Algorithm 递推T(n)=T(n/2)和#x2B的解;仅使用感应的sqrt(n)

Algorithm 递推T(n)=T(n/2)和#x2B的解;仅使用感应的sqrt(n),algorithm,data-structures,recursion,recurrence,Algorithm,Data Structures,Recursion,Recurrence,我想证明当T(1)=1时,T(n)=T(n/2)+sqrt(n)是O(sqrt(n)) 仅使用归纳法。 使用主定理很容易解决,但事实并非如此。 我试着假设 T(n/2)4时,c/sqrt(2)+1

我想证明当T(1)=1时,T(n)=T(n/2)+sqrt(n)是O(sqrt(n)) 仅使用归纳法。 使用主定理很容易解决,但事实并非如此。 我试着假设

T(n/2) 但在剩下的证据中,我们并没有走得很远。 提前感谢大家的回答

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


T(n)好的,你接近了。所以基本上,正如我在评论中提到的,基本情况很简单。对于归纳法的情况,您希望证明T(n)是O(sqrt(n)),因为T(n/2)是O(sqrt(n/2))

所以,它是这样的:

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)
T(n)=T(n/2)+sqrt(n);这只是你的复发
4
=c sqrt(n)/sqrt(2)+sqrt(n)
=(c/sqrt(2)+1)sqrt(n)
观察c>4时,c/sqrt(2)+1
(c/sqrt(2) + 1) sqrt(n) < c sqrt(n)
(c/sqrt(2)+1)sqrt(n)
所以

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

所以这里有几个关键点你没有注意到


首先,你可以把c增加到你想要的任何值。这是因为大O只需要好的,你很接近了。所以基本上,正如我在评论中提到的,基本情况很简单。对于归纳法的情况,您希望证明T(n)是O(sqrt(n)),因为T(n/2)是O(sqrt(n/2))

所以,它是这样的:

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)
T(n)=T(n/2)+sqrt(n);这只是你的复发
4
=c sqrt(n)/sqrt(2)+sqrt(n)
=(c/sqrt(2)+1)sqrt(n)
观察c>4时,c/sqrt(2)+1
(c/sqrt(2) + 1) sqrt(n) < c sqrt(n)
(c/sqrt(2)+1)sqrt(n)
所以

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

所以这里有几个关键点你没有注意到


首先,你可以把c增加到你想要的任何值。这是因为大O只需要一条思路,这可能有助于递归地扩展重复性。你得到

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))
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+…)

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

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))
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+…)

归纳法要求你知道给出给你的解决方案。这是一种非建设性的证明方法。基本情况很清楚。你需要证明的是,如果这个断言对1是真的,那么它对n是真的……n-1。我试图理解你等式中大“T”和小“T”的区别。@trumpetlicks,我认为这是一个typo@thang-这就是我想的:-)好的提示#2:假设T(n/2)是O(sqrt(n/2))=O(sqrt(n)),说明T(n)是O(sqrt(n))。该死的乳胶在这里不起作用。诱导要求你知道给你的解决方案。这是一种非建设性的证明方法。基本情况很清楚。你需要证明的是,如果这个断言对1是真的,那么它对n是真的……n-1。我试图理解你等式中大“T”和小“T”的区别。@trumpetlicks,我认为这是一个typo@thang-这就是我想的:-)好的提示#2:假设T(n/2)是O(sqrt(n/2))=O(sqrt(n)),说明T(n)是O(sqrt(n))。该死的乳胶在这里不起作用,谢谢。我忽略了两条线相交的事实,所以忽略了常数c0,从中c总是更大。谢谢。我忽略了两条线相交的事实,所以忽略了常数c0,从中c总是更大。谢谢。实际上,我尝试了这种展开技术,但错误地将普通成员视为其他成员,这使得序列不收敛。你的回答是一个额外的见解。谢谢。实际上,我尝试了这种展开技术,但错误地将普通成员视为其他成员,这使得序列不收敛。你的回答是一个额外的见解。