递归关系:寻找大O.

时间:2010-07-11 23:23:11

标签: recurrence relation

我试图找到以下重现关系的大O界限:

T(n) = T(n-1) + n^c, where c >= 1 is a constant

所以我决定通过迭代来解决这个问题:

T(n) = T(n-1) + n^c
T(n-1) = T(n-2) + (n-1)^c
T(n) = T(n-2) + n^c + (n-1)^c
T(n-2) = T(n-3) + (n-2)^c
T(n) = T(n-3) + n^c + (n-1)^c + (n-2)^c
T(n) = T(n-k) + n^c + (n-1)^c + .... + (n-k+1)^c

Suppose k = n-1, then:

T(n) = T(1) + n^c + (n-1)^c + (n-n+1+1)^c
T(n) = n^c + (n-1)^c + 2^c + 1

我不确定这是否正确,而且我非常感谢有关如何从中获取Big O的一些指导。非常感谢!

6 个答案:

答案 0 :(得分:2)

你所拥有的不正确,但你走在正确的轨道上。

你犯的错误:

T(n) = T(n-3) + n^c + (n-1)^c + (n-2)^c    
T(n) = T(n-k) + n^c + (n-1)^c + (n-k+1)^c 

你不能只从第一行到第二行。

当您增加k时,右侧的术语数量也会增加。

要想到这样写的想法:

T(n) - T(n-1)  = n^c.

T(n-1) - T(n-2) = (n-1)^c
..

T(n-k) - T(n-k-1) = (n-k)^c.

..
T(2) - T(1) = 2^c

如果你添加它们会发生什么?

一旦你这样做,你能看到c = 1和c = 2的答案是什么?你能从那里找出最终答案的模式吗?

答案 1 :(得分:2)

是的,你是对的:

  

T(n)= n c +(n-1) c +(n-2) c + ... + 3 < sup> c + 2 c + 1,

这个总和是

  

T(n)= O(n c + 1 )。参见例如Faulhaber's formula。事实上,你甚至可以确定领先项中的常数(即使它与算法的渐近线没有密切关系):总和是n c + 1 /(c + 1)+ O( c ),您可以通过例如使用整合来确定。

答案 2 :(得分:0)

而不是从n开始工作,如何从0开始向上工作(我假设递归终止于0并且你将该位移出)。当你开始注意到一个固定点(即在所有情况下重复相同的模式)时,你有一个很好的候选答案。尝试证明答案,例如通过归纳法。

答案 3 :(得分:0)

我首先观察n ^ c,当然受n值的影响,对n和n + 1来说不会更复杂 - 它决定了那个特定的“运行时间”术语。鉴于此,您可以假设(至少我会)该术语具有常量运行时并确定递归将对给定n执行多少次,并且您将得到您的约束。

答案 4 :(得分:0)

要想出这些,请填写几个术语并寻找模式:

T(1)= 0 + 1 ^ c

T(2)= T(1)+ 2 ^ c = 0 + 1 ^ c + 2 ^ c

T(3)= T(2)+ 3 ^ c = 0 + 1 ^ c + 2 ^ c + 3 ^ c

T(4)= ...

现在用n表示模式,你有答案。

答案 5 :(得分:0)

这是:

T(n) = n^c + (n-1)^c + (n-2)^c + ... + 2^c + 1^c
     < n^c +     n^c +     n^c + ... + n^c + n^c
     = n * n^c
     = n^(c+1)

是O(n c + 1 )。

要显示这是一个合理的界限,请注意c = 1

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

显然是Θ(n 2 )。