通过替换求解递归T(n)= 2T(n / 2)+Θ(1)

时间:2014-09-15 23:33:27

标签: math big-o recurrence

所以我很确定它是O(n)(但它可能不是?),但你如何通过替换来解决它?

如果假设T(n)<= c * n,那么归纳步骤是什么?

3 个答案:

答案 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)