提前感谢您帮助解决这个问题。我正在参加算法课,而且我仍然坚持不懈。根据教授的说法,如果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)?
答案 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