所以我很确定它是O(n)(但它可能不是?),但你如何通过替换来解决它?
如果假设T(n)<= c * n,那么归纳步骤是什么?
答案 0 :(得分:7)
首先,我想清楚地假设Θ(1)= k,某些常数。
接下来,继续使用替换方法,我们得到
T(n)=2T(n/2)+Θ(1)
=2T(n/2)+k
=2{2T(n/4)+k)+k
=4T(n/4)+3k
=...
=n.T(1)+(n-1)k
=n.k+(n-1)k
=2nk-k
=O(n).
如果你认为它是T(n) <= c * n
,你应该从T(1)开始并假设T(n)是正确的,然后继续显示它对于T(n + 1)是正确的使用T(n)的假设。
BTW,你的假设是对的!
答案 1 :(得分:1)
为简单起见,让我们假设O(1)项隐藏了一些常数c,所以重现真的是
T(n)= 2T(n / 2)+ c
为简单起见,我们也假设T(1)= c。
你冒险(正确)猜测
T(n)&lt; = an + b
对于一些常数a和b。让我们试着证明这一点。
对于n = 1,我们需要a和b为
c&lt; = a + b
对于归纳步骤,我们想要
T(n)<= 2T(n / 2)+ c
代替我们的猜测
T(n)<= 2(an / 2 + b)+ c
= a + 2b + c
请注意,如果2b + c = b,则此表达式的左侧将是+ b,我们需要的上限。因此我们需要选择a和b这样
c&lt; = a + b
2b + c = c
这里有一个可行的选择是a = 2c和b = -c,给出T(n)&lt; = 2cn - c = O(n)。
希望这有帮助!
答案 2 :(得分:0)
Master's theorem非常适合此问题:
比较给定的方程式
T(n)= 2T(n / 2)+ c
具有公式
T(n)= aT(n / b)+(n k log p n)
其中a> = 1,b> 1,k> = 0并且p是实数
我们可以说它满足条件a> b k ,因为a = 2,b = 2并且k = 0
所以,T(n)=θ(n log b a )=θ(n)