混淆了一对递归关系

时间:2013-10-06 03:19:43

标签: recurrence

提前感谢您帮助解决这个问题。我正在参加算法课,而且我仍然坚持不懈。根据教授的说法,如果C(1)= 1且n是2的幂,则以下成立:

C(n) = 2 * C(n/2) + n解析为C(n) = n * lg(n) + n

C(n) = 2 * C(n/2) + lg(n)解析为C(n) = 3 * n - lg(n) - 2

我完全理解的第一个。据我理解的形式,所说的是C(n)解决了两个子问题,每个子问题需要n / 2个工作来解决,另外还有n个工作要分割和合并所有东西。因此,对于问题的每个除法,常数2增加了一个因子^ k(其中k是分裂的数量),n / 2中的2也增加了^ k的因子大致相同原因,并且最后的n乘以因子k,因为每个分割创建了k个额外工作的倍数。

我的困惑源于第二种关系。鉴于第一和第二关系几乎相同,为什么第二个关系的结果不是像nlgn +(lgn ^ 2)?

1 个答案:

答案 0 :(得分:2)

一般结果是Master Theorem

但在这种特殊情况下,你可以计算出2的幂数:

C(2^k) 
= 2 * C(2^(k-1)) + lg(2^k) 
= 4 * C(2^(k-2)) + lg(2^k) + 2 * lg(2^(k-1))
= ... repeat ...
= 2^k * C(1) + sum (from i=1 to k) 2^(k-i) * lg 2^i
= 2^k + lg(2) * sum (from i=1 to k) 2^(i) * i
= 2^k - 2 + 2^k+1 - k
= 3 * 2^k - k - 2 
= 3 * n - lg(n) - 2