我正在研究一些算法,并且我试图确定在形成等式时如何处理多个递归步骤。
所以展览A:
对我来说很明显,这里的递推方程是:T(n)= c + 2T(n / 2),其中大O符号简化为O(n)
然而在这里,我们也有类似的东西,我得到递推方程T(n)= n + 2T(n / 2),因为我们有两个递归调用,与第一个不同,其中大O符号简化为O(n),但这不是这种情况。关于如何在这第二个中得到正确的递推方程的任何输入?
关于如何解决这个问题的任何意见都很棒。
答案 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)