【问题标题】:solving T(n) = 2T(n/2) + log n [closed]求解 T(n) = 2T(n/2) + log n [关闭]
【发布时间】: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。
我找不到简单的方法来总结这些术语。难道我做错了什么 ?有没有其他方法可以解决这个递归?掌握定理对她有用吗?如果是,比如何?

谢谢。

【问题讨论】:

标签: divide-and-conquer recurrence


【解决方案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 是以二为底的对数。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2012-08-20
      • 2013-08-08
      • 2015-07-14
      相关资源
      最近更新 更多