求解递推T(n)= 2T(sqrt(n))

Tas*_*ima 4 algorithm math big-o recurrence

我想解决以下重现关系:

T(n)= 2T(√n);

我猜T(n) = O(log log n),但我不知道如何证明这一点.我如何证明这种复发可以解决O(log log n)

tem*_*def 10

一种想法是通过引入新的变量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)是正确的.

希望这可以帮助!

  • @Ritwik绝对正确的是,一般来说,您不能进行此类替换。您遇到的大多数重复都具有很好的特性,它们会单调增加。如果递归是单调递增的,并且您可以在各个优美的点(2的幂,3的幂等)上提供其值的界限,则可以渐近地约束整个递归。这就是我们在这里所做的。这是一个很常见的技巧,以至于您通常通常不会看到任何人写出“单调”作为理由,但是值得一看为什么这是正确的。 (2认同)

Sal*_*ali 5

您可以通过展开递归轻松解决此问题:

\n\n

在此输入图像描述

\n\n

T(1) = a现在,当您可以找到合适的时,循环就会结束a。当a = 01它没有意义但当a=2你会得到:

\n\n

在此输入图像描述

\n\n

将 代入k第一个方程的最新部分,您将得到 的复杂度O(log(n))

\n\n

在这里检查其他类似的递归:

\n\n\n