递归关系T(n)= 3T(n-1)+ n

时间:2018-04-29 13:14:09

标签: big-o recurrence

我试图解决递归关系T(n)= 3T(n-1)+ n,我认为答案是O(n ^ 3)因为每个新节点在重现中产生三个子节点树。它是否正确?并且,就重现树而言,是否有更多的数学方法来处理它?<​​/ p>

1 个答案:

答案 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)