【发布时间】:2012-08-20 15:09:43
【问题描述】:
我可以找到每一行的总和(n/log n-i),我也可以绘制它的递归树,但我不能计算它的行的总和。
T(n)=2T(n/2)+n/logn
T(1) = 1
【问题讨论】:
标签: time complexity-theory recurrence
我可以找到每一行的总和(n/log n-i),我也可以绘制它的递归树,但我不能计算它的行的总和。
T(n)=2T(n/2)+n/logn
T(1) = 1
【问题讨论】:
标签: time complexity-theory recurrence
当你开始展开递归时,你会得到:
你的基本情况是T(1) = 1,所以这意味着n = 2^k。代入你会得到:
第二个和的行为与harmonic series 相同,因此可以近似为log(k)。现在k = log(n) 得到的答案是:
【讨论】:
假设 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]
【讨论】:
遵循下面的扩展大师定理。
使用扩展大师定理T(n)=2T(n/2)+n/logn 可以很容易地解决如下。
这里n/log n部分可以改写为n * (logn)^-1,
有效地使 p=-1 的值。
现在扩展大师定理可以很容易地应用,它会涉及到扩展大师定理的案例2b。
T(n)= O(nloglogn)
了解更多详情
【讨论】: