在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
< = cn * lg(n / 2)+ n
= cn * lg(n) - cn * lg(2)+ n
= cn * lg(n) - cn + n
< = cn * lg(n)
只要c> = 1
,最后一步就成立
我可以很好地遵循这个逻辑,但是当我尝试复制上述问题中的步骤时,我会陷入困境。
答案 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 )。
这大致与你想要的一致吗?不得不多次修改它以修复边缘情况。