我最近遇到了一个复发问题:
T(n)= 2 * T(ceil((sqrt(n)))+ 1
T(1)= 1;
当我绘制重复树时,我无法看到此函数终止。只有当1/2 i 变为0时,树中的一般节点形式(n 1/2 i )才变为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)。
希望这有帮助!