求解递归:T(n)=2T(n/2)+n/logn

Posted

技术标签:

【中文标题】求解递归:T(n)=2T(n/2)+n/logn【英文标题】:Solve the recurrence: T(n)=2T(n/2)+n/logn 【发布时间】:2012-08-20 15:09:43 【问题描述】:

我可以找到每一行的总和(n/log n-i),我也可以绘制它的递归树,但我不能计算它的行​​的总和。

T(n)=2T(n/2)+n/logn

T(1) = 1

【问题讨论】:

【参考方案1】:

当你开始展开递归时,你会得到:

你的基本情况是T(1) = 1,所以这意味着n = 2^k。代入你会得到:

第二个和的行为与harmonic series 相同,因此可以近似为log(k)。现在k = log(n) 得到的答案是:

【讨论】:

很抱歉在这么旧的帖子中提问,但我一直在寻找你的答案,我一直在试图理解为什么从 i=0 到 k-1 1/(ki) 的总和表现与调和级数相同。提前谢谢你。 @Ph.只需将总和写为 k-1 个元素的实际总和即可。【参考方案2】:

假设 n = 2^k;

我们知道调和级数(欧拉公式):

Sum[i = 1 to n](1/i) ~= log(n) [n -> infinity]

t(n) = 2t(n/2) + n/log(n)
     = 2(2t(n/4) + n/2/log(n/2)) + n/log(n)
     = 4t(n/4) + n/log(n/2) + n/log(n)
     = 4(2t(n/8) + n/4/log(n/4)) + n/log(n/2) + n/log(n)
     = 8t(n/8) + n/log(n/4) + n/log(n/2) + n/log(n)
     = 16t(n/16) + n/log(n/8) + n/log(n/4) + n/log(n/2) + n/log(n)
     = n * t(1) + n/log(2) + n/log(4) + ... + n/log(n/2) + n/log(n)
     = n(1 + Sum[i = 1 to log(n)](1/log(2^i)))
     = n(1 + Sum[i = 1 to log(n)](1/i))
     ~= n(1 + log(log(n)))
     = n + n*log(log(n)))
     ~= n*log(log(n)) [n -> infinity]

【讨论】:

【参考方案3】:

遵循下面的扩展大师定理。

使用扩展大师定理T(n)=2T(n/2)+n/logn 可以很容易地解决如下。 这里n/log n部分可以改写为n * (logn)^-1, 有效地使 p=-1 的值。 现在扩展大师定理可以很容易地应用,它会涉及到扩展大师定理的案例2b。

T(n)= O(nloglogn)

了解更多详情

https://www.youtube.com/watch?v=Aude2ZqQjUI

【讨论】:

以上是关于求解递归:T(n)=2T(n/2)+n/logn的主要内容,如果未能解决你的问题,请参考以下文章

T(n) = 2T(n/2) + log n 的解

通过替换求解递归 T(n) = 2T(n/2) + Θ(1)

计算递归使用重复展开

通过主定理找到递归方程的闭端公式

求解 T(n) = 2T(n/2) + log n [关闭]

算法复杂度,求解递归方程