0

我正在研究一些算法,并试图确定在形成方程时如何处理多个递归步骤。

所以展览A: 展品 A

对我来说很明显,这里的递归方程是: T(n) = c + 2T(n/2) 在大 O 表示法中简化为 O(n)

然而在这里,展品 B我们也有类似的事情发生,我得到了递归方程 T(n) = n + 2T(n/2) 因为我们有两个递归调用与第一个不同,在大 O 表示法中简化为 O (n),但是这里不是这样。关于如何在第二个中获得正确的递归方程的任何输入?

任何关于如何解决这个问题的意见都会很棒。

4

1 回答 1

2

您可能对主定理感兴趣:

http://en.wikipedia.org/wiki/Master_theorem

递推方程T(n) = n + 2T(n/2)Theta(n log n),可以使用定理推导出来。要手动执行此操作,您还可以假设n = 2^k并执行以下操作:

T(n) = 2T(n/2) + n
     = 2(2T(n/4) + n/2) + n
     = (2^2)T(n/(2^2)) + 2n
     = (2^2)(2T(n/(2^3)) + n/(2^2)) + 2n
     = (2^3)T(n/(2^3)) + 3n
     = ...
     = (2^k)T(n/(2^k)) + kn
     = nT(1) + n log2 n
     = Theta(n log n)
于 2012-12-21T03:37:31.980 回答