仅使用归纳的重复T(n)= t(n / 2)+ sqrt(n)的解决方案

时间:2013-01-28 21:35:44

标签: algorithm data-structures recursion recurrence

我希望证明T(n)= T(n / 2)+ sqrt(n)是O(sqrt(n))给定T(1)= 1 仅使用感应。 使用Master定理很容易解决,但事实并非如此。 我试着假设

  

T(n / 2)< C * SQRT(N / 2)

但其余的证据并没有得到很大的帮助。 提前感谢大家的答案。

编辑: 我的解决方案(在上面的假设之后)是:

  

T(n)< = c * sqrt(n / 2)+ sqrt(n)= sqrt(n)(c / sqrt(2)+1)< = sqrt(n)(C + 1)

我不知道如何从这个转移到所需的

  

T(n)的< = C * SQRT(n)的

2 个答案:

答案 0 :(得分:3)

好的,你很亲密。所以基本上,正如我在评论中提到的,基本情况很简单。对于归纳案例,如果T(n / 2)为O(sqrt(n / 2)),则要显示T(n)为O(sqrt(n))。

所以,它是这样的:

T(n) = T(n/2) + sqrt(n)               ; this is just your recurrence
     < c sqrt(n/2) + sqrt(n)          ; since T(n/2) is O(sqrt(n))
                                      ; wlog here, assume c > 4
     = c sqrt(n) / sqrt(2) + sqrt(n)
     = (c/sqrt(2) + 1) sqrt(n)

观察c> 4,c / sqrt(2)+ 1&lt; c,所以

(c/sqrt(2) + 1) sqrt(n) < c sqrt(n)

所以

T(n) < c sqrt(n)

因此,T(n)是O(sqrt(n))

所以你错过了几个关键点。

首先,您可以随时将c增加到您想要的任何值。这是因为大O只需要&lt;。如果它是&lt; c f(n)那么它是&lt; d f(n)其中d> C。

第二个是要注意,线f(c)= c / sqrt(2)+ 1与线f(c)= c相交,约为c = sqrt(2)/(sqrt(2)-1 )= 3.4143(左右),所以你要做的就是强制c为&gt;这个值是为了得到(c / sqrt(2)+ 1)&lt; C。 4肯定有效,所以这就是4来自的地方。

回想起来,我应该把关键点作为提示。我的错。遗憾!

答案 1 :(得分:1)

可能有帮助的一条思路是递归地扩展递归。你得到了

T(n) = sqrt(n) + sqrt(n/2) + sqrt(n/4) + ... + sqrt(n/(2^k)) + ... + sqrt(1)
     = sqrt(n) + sqrt(n)/sqrt(2) + sqrt(n)/sqrt(4) + ... + sqrt(n)/sqrt(2^k) + ... + sqrt(1)
     = sqrt(n) * (1 + sqrt(1/2) + sqrt(1/2)^2 + ... + sqrt(1/2)^k + ...)
     <= sqrt(n) * ∑(k=0 to ∞) sqrt(1/2)^k
     = sqrt(n) * 1/(1 - sqrt(1/2))

由于1/(1-sqrt(1/2))是有限常数(约为3.4),T(n)必须为O(sqrt(n))。您可以使用此信息来使用标准归纳来证明它。