我试图找到以下重现关系的大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的一些指导。非常感谢!
答案 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 )。