麻烦的递归方程:T(n)= 2 * T(ceil((sqrt(n)))+ 1

时间:2014-06-24 13:40:51

标签: math recurrence

我最近遇到了一个复发问题:

  

T(n)= 2 * T(ceil((sqrt(n)))+ 1

     

T(1)= 1;

当我绘制重复树时,我无法看到此函数终止。只有当1/2 i 变为0时,树中的一般节点形式(n 1/2 i )才变为1。这意味着我应该倾向于无限。

1 个答案:

答案 0 :(得分:0)

你是对的,如果sqrt是平方根的上限,那么你将永远不会通过重复应用平方根来达到1。我打算假设你打算使用地板,这意味着当复发解除时你最终会达到1。

在这种情况下,您的再现更为正确

  

T(1)= 1

     

T(n)= 2T(⌊√n⌋)+ 1

解决复发涉及平方根的标准技术是进行替换。让我们定义一个新值k,使得n = 2 k 。注意√n=(2 k 1/2 = 2 k / 2 。换句话说,取n的平方根相当于将k的值减半。因此,我们可以将上述涉及平方根的重现转换为一个新的重复,它将更接近主定理和其他递归求解技术所使用的形式。具体来说,让我们定义S(k)= T(2 k )。然后我们得到复发

  

S(0)= 1

     

S(k)= 2S(⌊k/2⌋)+ 1

要了解如何解决这种复发,要容易得多。通过从其他地方或通过使用主定理来识别这种重现,我们得到S(k)=Θ(k)。现在,我们想要求解T(n),因此我们可以使用S(k)= T(2 k )= T(n)的事实。由于S(k)=Θ(k),我们现在看到T(n)=Θ(k)。由于我们选择k使得2 k = n,这意味着k = lg n。因此,T(n)=Θ(log n),因此递归计算为Θ(log n)。

希望这有帮助!