我试图解决递归关系T(n)= 3T(n-1)+ n,我认为答案是O(n ^ 3)因为每个新节点在重现中产生三个子节点树。它是否正确?并且,就重现树而言,是否有更多的数学方法来处理它?</ p>
答案 0 :(得分:1)
递归方程只是数学:展开,总结和简化。
T(n) = 3T(n-1) + n = 3 (3 T(n - 2) + (n-1)) + n
= 3^2 T(n - 3) + 3^2(n-2) + 3(n-1) + n)
= ...
= 3^i T(n - i) + Σ_(j=0..i-1) 3^j * (n-j)
= Σ_(j=0..n-1) 3^j * (n-j) // assuming T(0) = 0
现在我们可以找到不同的上限,这取决于我们想要多少考虑它:
T(n) = Σ_(j=0..n-1) 3^j * (n-j)
< n * Σ_(j=0..n-1) 3^j
= n * (3^n - 1)
所以T(n) = O(n*3^n)
。
通过将总和分成两部分,您也可以获得更严格的约束:
T(n) = Σ_(j=0..n-1) 3^j * (n-j)
< n * Σ_(j=0..n-x) 3^j * (n-j) + x * Σ_(j=n-x..n-1) 3^j
= n (3^(n-x+1) - 1) + x * (3^n - 3^(n-x+1))
使用x = log_3(n)
即可获得T(n) = O(3^n * log(n))
。
您还可以使用积分逼近总和Σ(n-i)3^i
,并获得确切的复杂度Θ(3^n)
。