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

Posted

技术标签:

【中文标题】求解 T(n) = 2T(n/2) + log n [关闭]【英文标题】:solving T(n) = 2T(n/2) + log n [closed] 【发布时间】:2011-11-27 10:05:56 【问题描述】:

我正在尝试解决 T(n) = 2T(n/2) + log n

替换 n = 2^k

T(2^k) = 2T(2^(k-1)) + k  
T(2^k) = 2^2 T(2^(k-1)) + 2(k-1) + k

after k steps
T(2^k) = 2^k T(1) + 2^(k-1) + 2 * (2^(k-2)) +....+k

所以基本上我需要对 i*2^i 的项求和,其中 i = 1 以记录 n - 1。 我找不到简单的方法来总结这些术语。难道我做错了什么 ?有没有其他方法可以解决这个递归?掌握定理对她有用吗?如果是,比如何?

谢谢。

【问题讨论】:

你试过math.stackexchange.com吗? 【参考方案1】:

首先你应该定义一个递归导出,比如 T(1) 然后: 因为 T(2^k) = 2T(2^(k-1)) + k; * 我们定义 g(k) = T(2^k)/2^k; 然后 * 进入: g(k) = g(k-1) + k/2^k = g(1) + sum(i/2^i); i=2,3,4...k 其中 g(1) = T(1)/2 = c;

然后您可以展开求和表达式并定义它 = y; 然后展开y/2的表达式; y-y/2 是几何级数,所以你可以解决它

根据我的计算,总和 = 3/2 - (k+2)/2^k;

所以 T(n) = 2^k * g(k) = (3/2+c)*n - (2+logn)

【讨论】:

【参考方案2】:

Wolfram|Alpha gives a closed form solution:

对于由初始条件固定的常数 c_1。

顺便说一下,log(n)/log(2) = lg(n),其中 lg 是以二为底的对数。

【讨论】:

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

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

用 log n 求解主定理:T(n) = 2T(n/4) + log n

如何求解递归 T(n) = 2T(n^(1/2)) + log n? [关闭]

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

如何计算该函数的增长率:T(n)= 2T(n ^(1/2))+ 2(n ^(1/2))

使用主定理求解 T (n) = √2*T(n/2) + log n