我希望证明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)的
答案 0 :(得分:3)
所以,它是这样的:
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))
。您可以使用此信息来使用标准归纳来证明它。