算法简介第三版 - 练习2.3 -3 - nlg(n)的归纳证明

时间:2015-07-07 04:21:06

标签: algorithm big-o complexity-theory induction

我正在阅读“算法简介”第三版。在练习中,我们被要求使用归纳推理来证明

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?它并不遵守我所知道的数学惯例。

1 个答案:

答案 0 :(得分:1)

来一些基本的数学:

lg(a / b)= lg(a) - lg(b)

这就是为什么:

2(n / 2)lg(n / 2)+ n = n(lg(n) - lg(2))+ n = n(lg(n) - 1)+ n

关于 n / 2 的假设,这个假设是最好的假设,因为它简化了归纳步骤。在归纳步骤中,我们轻松地达到了结果,没有任何严格的数学解释。

被认为是算法圣经的Cormen书称这种替换方法解决了重复现象,首先我们假设对于给定的输入重现为真,并且使用该假设我们看是否 我们的假设是拟合输入n的表达式。