如何解决递归T(n)= 2T(n ^(1/2))+ log n?

时间:2012-10-27 20:27:53

标签: math logarithm recurrence

我试图找到重现的时间复杂度:

  

T(n)= 2T(n 1/2 )+ log n

我非常接近解决方案,但是,我遇到了障碍。我需要解决:

  

n (1/2 k = 1

表示k可以简化我的替换模式。我不是在寻找复发的答案,只是k的解决方案。

4 个答案:

答案 0 :(得分:5)

当您开始展开递归时,您会得到: enter image description here

这里有一些额外的步骤:

enter image description here

现在使用边界条件进行递归(数字2选为0和1没有意义),您将得到:

enter image description here

k替换回您将获得的等式:

enter image description here

以下是一些使用相同想法的递归。

答案 1 :(得分:3)

无法解决

  

n (1/2 k = 1

表示k,因为如果n> 1然后n x > 1表示任何非零x。你能解决这个问题的唯一方法就是你选择k使得1/2 k = 0,但这是不可能的。

但是,你可以解决这个问题:

  

n (1/2 k = 2

首先,记录双方的日志:

  

(1/2 k )lg n = lg 2 = 1

接下来,将两边乘以2 k

  

lg n = 2 k

最后,再次记录日志:

  

lg lg n = k

因此,一旦k = lg lg n。

,这种复发将停止

虽然你只询问了k的值,因为你问了整整一年,我想我会指出你可以做一个变量替换来解决这个问题。尝试设置k = 2 n 。那么k = lg n,所以你的重现是

  

T(k)= 2T(k / 2)+ k

这解决(使用主定理)到T(k)=Θ(k log k),并且使用k = lg n的事实,整体递归求解为Θ(log n log log n)。

希望这有帮助!

答案 2 :(得分:0)

如果这是快速排序,那就是方程式:

enter image description here

此问题的解决方案是O(n*log(n)),因为现在它对某些T(n) ~ n^1/2来说更小(N),这意味着您的复杂性低于O(n*log(n))

尝试使用归纳来证明你的约束

答案 3 :(得分:0)

log base 1,为0。

所以

n ^((1/2)^ k)= 1

log(n)(n ^((1/2)^ k))= log(n)(1)

1/2 ^ k = 0

log(1/2)((1/2)^ k)= log(1/2)(0)

log base 0的任何一个是负无穷大..所以......

k = -infinity。

我认为你应该为n使用不同的“最终数字”,而不是1 只是说...