求解 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? [关闭]