用多个递归步骤求解递推方程

时间:2012-12-21 03:23:13

标签: recursion big-o time-complexity recurrence

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

所以展览A: Exhibit A

对我来说很明显,这里的递推方程是:T(n)= c + 2T(n / 2),其中大O符号简化为O(n)

然而在这里,Exhibit B我们也有类似的东西,我得到递推方程T(n)= n + 2T(n / 2),因为我们有两个递归调用,与第一个不同,其中大O符号简化为O(n),但这不是这种情况。关于如何在这第二个中得到正确的递推方程的任何输入?

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

1 个答案:

答案 0 :(得分: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)