前言
在运用分治法将原问题分解成多个子问题后,通常可以得到一个关于时间复杂度的递归式,如T(n)=T(n/2)+O(1),如何求解递归式并得出该算法的时间复杂度O(f(n))就是我们要解决的问题。一般来说,有三种方法可以供我们选择,代入法、递归树法和公式法(即《算法导论》中所描述的主方法)。下面先从代入法开始讲起。
代入法
一、基本步骤
- 猜测解的形式,
- 运用第二类数学归纳法,证明存在常数c使得
二、数学归纳法
定义
数学归纳法是代入法的核心,此处使用的是其第二种形式,其具体过程如下:
- 当
时,命题成立;
- 假设当
时,命题成立,由此可推得当
时,命题也成立。
我们用一个例子来说明用数学归纳法证明递归式的解的过程。
例:求递归式 的渐进上界。
解:第一步猜测的时候需要一些经验,观察递归式和已知确界的式子是否相似,选取相应的解的形式。这里我们猜测 ,然后用数学归纳法证明其正确性。
假设存在