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

时间:2011-09-29 05:42:13

标签: divide-and-conquer recurrence

我正在尝试解决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到log n - 1 而且我找不到一个简单的方法来总结这些术语。难道我做错了什么 ?有没有其他方法来解决这种递归?会掌握定理工作吗?如果是,那么?

感谢。

2 个答案:

答案 0 :(得分:2)

Wolfram|Alpha gives a closed form solution

recurrence

solution

表示由初始条件确定的常数c_1。

顺便说一句,log(n)/ log(2)= lg(n),其中lg是基数2的对数。

答案 1 :(得分:2)

首先应该定义一个递归导出,比如说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;

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

当我计算出来时,sum = 3/2 - (k + 2)/ 2 ^ k;

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