我想解决以下重现关系:
T(n)= 2T(√n);
我猜是T(n) = O(log log n)
,但我不确定如何证明这一点。我如何证明此重复解决了O(log log n)
?
答案 0 :(得分:9)
一个想法是通过引入新的变量k来简化重现,使得2 k = n。然后,递归关系适用于
T(2 k )= 2T(2 k / 2 )
如果你然后让S(k)= T(2 k ),你会得到复发
S(k)= 2S(k / 2)
请注意,这相当于
S(k)= 2S(k / 2)+ O(1)
因为0 = O(1)。因此,通过主定理,我们得到S(k)=Θ(k),因为我们得到a = 2,b = 2,并且d = 0并且log b a> d。
由于S(k)=Θ(k)且S(k)= T(2 k )= T(n),我们得到T(n)=Θ(k)。由于我们选择2 k = n,这意味着k = log n,因此T(n)=Θ(log n)。这意味着您对O(log log n)的初始猜测是不正确的,并且运行时只是对数,而不是双对数。但是,如果只进行了一次递归调用,那么运行时将是O(log log n)是正确的。
希望这有帮助!
答案 1 :(得分:4)
您可以通过展开递归来轻松解决此问题:
现在重复将在T(1) = a
时完成,您可以找到相应的a
。如果a = 0
或1
没有意义,但a=2
会得到:
将k
替换为第一个等式的最新部分,您将获得O(log(n))
的复杂性。
在此检查其他类似的递归: