我正在阅读《算法导论》这本书,第三版。在一个练习中,我们被要求使用归纳推理来证明
T(n) = {2 if n = 2, 2T(n/2) + n if n > 2^k for k > 1} = nlgn
其中 lg 是 log base 2。这本书提供了解决方案:
Base Case:
n = 2, T(2) = 2, 2lg(2) = 2
Assumption:
T (n/2) = (n/2)lg(n/2)
Induction:
T (n) = 2T (n/2) + n
= 2(n/2)lg(n/2) + n
= n(lg n − 1) + n
= n lg n − n + n
= n lg n
有人可以解释为什么在假设步骤中使用值 n/2 吗?根据我对归纳的理解,我会使用该值2^n
,然后将其递增到2^(n+1)
以涵盖 2 的所有可能幂。我想知道为什么我错了。此外,有人可以解释改变的操作吗2(n/2)lg(n/2)+n into n(lg n-1) + n?
?它不符合我所知道的数学约定。