求解:T(n)= T(n-1)+ n

时间:2013-01-26 02:46:07

标签: algorithm math recurrence

在Cormen的算法入门书中,我试图解决以下问题:

显示递归关系T(n)= T(n-1)+ n的解是使用替换的O(n2)

(没有给出初始条件,这是问题的全文)

但是,我似乎无法找到正确的过程。教科书只是简单地触及它,我搜索过的大多数网站似乎都认为我已经知道了。如果有人可以给我一个简单的,一步一步的指南,甚至是一个链接,我将不胜感激。

对于踢球,这是我到目前为止的尝试:

T(n)< = c(n ^ 2)
< = c(n-1)^ 2 + n
 < = c(n ^ 2 -2n +1)+ n(我很确定不是< c(n ^ 2))

再次感谢。

更新:这是我试图完成的方法示例,以避免混淆。

证明解决方案是O(nlog(n))
T(n)= 2T([n / 2])+ n
替换方法要求我们证明T(n)< = cn * lg(n)用于选择常数c>假设这个界限适用于所有正m T(n)< = 2(c [n / 2] * lg([n / 2]))+ n
 < = cn * lg(n / 2)+ n
 = cn * lg(n) - cn * lg(2)+ n
 = cn * lg(n) - cn + n
 < = cn * lg(n)
只要c> = 1

,最后一步就成立  
我可以很好地遵循这个逻辑,但是当我尝试复制上述问题中的步骤时,我会陷入困境。

2 个答案:

答案 0 :(得分:7)

这是一个纯粹的数学问题吗?

从T(n)= T(n-1)+ n,我们得到:

T(n)   - T(n-1) = n
T(n-1) - T(n-2) = n-1
T(n-2) - T(n-3) = n-2
...
...
T(2)   - T(1)   = 2
T(1)   - T(0)   = 1

总结以上所有方程式给出了我们:

T(n) - T(0)= 1 + 2 + ... +(n-1)+ n = n *(n + 1)/ 2 = O(n ^ 2)

我们已经完成了。

UPDATE (我不确定这是否需要替换为OP):

T(n) = T(n-1) + n
= T(n-2) + (n-1) + n
= T(n-3) + (n-2) + (n-1) + n
= ... 
= T(1) + (2 + 3 + ... + n)
= T(0) + (1 + 2 + ... + n)
= T(0) +  n * (n+1) / 2
= O(n ^ 2)

答案 1 :(得分:4)

我想这应该是归纳法?

所以基本情况n = 1是微不足道的。感应情况,假设n> 1。 (*)假设T(n-1)为O((n-1) 2 )= O(n 2 )。证明T(n)也是O(n 2 )。

 T(n) = T(n-1) + n
      < c (n-1)^2 + n,  assume c>1 wlog
      < c n^2 - 2cn + c + n
      < c n^2 - (2c - 1)n + c
      < c n^2

表示n> 1,c> 1.

以下是突破:

首先,请注意当c> 1,2c-1&gt; c,所以你有

      < c n^2 - (2c - 1)n + c
      < c n^2 - (c)n + c

接下来,注意当n> 1, - (c)n + c =(1-n)c&lt; 0,所以你有

      < c n^2 - (c)n + c
      < c n^2

因为存在常数c使得T(n)<1。 c n ^ 2,显然T(n)是O(n 2 )。

这大致与你想要的一致吗?不得不多次修改它以修复边缘情况。