当前目录
← Back

Substitution Method 代入法


Substitution Method 代入法

总结

代入法(Substitution Method) 是求解递归式的一种通用方法:先猜测递归式的渐近界,再把猜测代入递归式,用数学归纳法证明猜测成立,最后选择足够大的常数处理残差项和初始条件。

1. 基本思想

代入法的核心流程可以概括为三步:

  1. 猜测解的形式:例如猜 T(n)=O(n2)T(n)=O(n^2)、T(n)=Θ(nlog⁡n)T(n)=\Theta(n\log n)。
  2. 用归纳法验证:假设对所有更小规模 k<nk<n 成立,再证明对 nn 成立。
  3. 求常数:选择足够大的常数 c,c1,c2c,c_1,c_2,使不等式和初始条件同时成立。

其本质是:

guess⇒substitute⇒induction⇒constants\text{guess} \Rightarrow \text{substitute} \Rightarrow \text{induction} \Rightarrow \text{constants}

重要

代入法不是“把答案代进去看像不像”,而是一个严格的归纳证明过程。猜测只负责提出目标,真正成立依赖归纳证明。

2. 具体过程

设递归式为:

T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n)

或者更一般地:

T(n)=∑iT(gi(n))+f(n)T(n)=\sum_i T(g_i(n))+f(n)

代入法通常按以下步骤执行。

2.1 猜测渐近界

可以从以下来源猜测:

例如:

T(n)=4T(n/2)+nT(n)=4T(n/2)+n

可以先猜:

T(n)=O(n3)T(n)=O(n^3)

再尝试收紧为:

T(n)=O(n2)T(n)=O(n^2)

2.2 写出归纳假设

若要证明:

T(n)=O(g(n))T(n)=O(g(n))

则设存在常数 c>0c>0,对所有 k<nk<n 有:

T(k)≤cg(k)T(k)\le c g(k)

目标是推出:

T(n)≤cg(n)T(n)\le c g(n)

若要证明:

T(n)=Ω(g(n))T(n)=\Omega(g(n))

则设:

T(k)≥cg(k)T(k)\ge c g(k)

目标是推出:

T(n)≥cg(n)T(n)\ge c g(n)

若要证明:

T(n)=Θ(g(n))T(n)=\Theta(g(n))

通常需要分别证明:

T(n)=O(g(n))T(n)=O(g(n))

和

T(n)=Ω(g(n))T(n)=\Omega(g(n))

2.3 代入递归式

把归纳假设代入递归式中。

例如证明 T(n)=O(n3)T(n)=O(n^3):

T(n)=4T(n/2)+nT(n)=4T(n/2)+n

归纳假设:

T(k)≤ck3,k<nT(k)\le ck^3, \qquad k<n

代入:

T(n)=4T(n/2)+n≤4c(n/2)3+n=c2n3+n\begin{aligned} T(n) &=4T(n/2)+n \\ &\le 4c(n/2)^3+n \\ &=\frac{c}{2}n^3+n \end{aligned}

要证明:

c2n3+n≤cn3\frac{c}{2}n^3+n\le cn^3

等价于:

n≤c2n3n\le \frac{c}{2}n^3

当 c≥2c\ge2 且 n≥1n\ge1 时成立。因此:

T(n)=O(n3)T(n)=O(n^3)

2.4 处理初始条件

归纳必须有基例。通常设:

T(n)=Θ(1),n<n0T(n)=\Theta(1), \qquad n<n_0

然后选择足够大的常数 cc,使得对所有 1≤n<n01\le n<n_0 都有:

T(n)≤cg(n)T(n)\le cg(n)

警告

不能只证明递推步骤而忽略初始条件。递归式最终会落到小规模输入,基例必须被常数覆盖。

3. 需要问题具有的性质

代入法适用于递归式求解,通常需要满足以下条件。

性质说明
有明确递归式能写出 T(n)T(n) 与更小规模问题的关系
子问题规模变小递归必须朝基例推进,如 n/2n/2、n−1n-1、3n/43n/4
有初始条件需要给出 T(1)T(1) 或 T(n)=Θ(1)T(n)=\Theta(1) for n<n0n<n_0
能提出候选界需要先猜 OO、Ω\Omega 或 Θ\Theta 的形式
可用归纳法证明递归式对应良序结构,通常对 nn 做强归纳
常数可调允许选择足够大的常数处理低阶项和基例

备注

代入法比主方法更通用。主方法要求递归式接近 T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n),而代入法也可以处理非均匀子问题、期望递归式、带求和项的递归式等。

4. 典型例子:证明 T(n)=4T(n/2)+nT(n)=4T(n/2)+n 的上界

4.1 宽松上界:T(n)=O(n3)T(n)=O(n^3)

递归式:

T(n)=4T(n/2)+nT(n)=4T(n/2)+n

假设:

T(k)≤ck3,k<nT(k)\le ck^3, \qquad k<n

代入:

T(n)=4T(n/2)+n≤4c(n/2)3+n=c2n3+n≤cn3\begin{aligned} T(n) &=4T(n/2)+n \\ &\le 4c(n/2)^3+n \\ &=\frac{c}{2}n^3+n \\ &\le cn^3 \end{aligned}

最后一步要求:

c2n3+n≤cn3\frac{c}{2}n^3+n\le cn^3

即:

n≤c2n3n\le \frac{c}{2}n^3

当 c≥2c\ge2 且 n≥1n\ge1 时成立。因此:

T(n)=O(n3)T(n)=O(n^3)

但这个界不紧。

4.2 直接猜 O(n2)O(n^2) 会遇到问题

试图证明:

T(n)=O(n2)T(n)=O(n^2)

归纳假设:

T(k)≤ck2,k<nT(k)\le ck^2, \qquad k<n

代入:

T(n)=4T(n/2)+n≤4c(n/2)2+n=cn2+n\begin{aligned} T(n) &=4T(n/2)+n \\ &\le 4c(n/2)^2+n \\ &=cn^2+n \end{aligned}

但要证明的是:

T(n)≤cn2T(n)\le cn^2

而现在得到:

T(n)≤cn2+nT(n)\le cn^2+n

多出了 +n+n,无法推出目标结论。

错误

这不是说明 O(n2)O(n^2) 错了,而是说明归纳假设太弱,无法吸收递归式中的低阶项。

4.3 加强归纳假设

解决方法:减去一个低阶项,加强归纳假设。

设:

T(k)≤c1k2−c2k,k<nT(k)\le c_1k^2-c_2k, \qquad k<n

代入:

T(n)=4T(n/2)+n≤4(c1(n/2)2−c2(n/2))+n=c1n2−2c2n+n=c1n2−c2n−(c2n−n)≤c1n2−c2n\begin{aligned} T(n) &=4T(n/2)+n \\ &\le 4\left(c_1(n/2)^2-c_2(n/2)\right)+n \\ &=c_1n^2-2c_2n+n \\ &=c_1n^2-c_2n-(c_2n-n) \\ &\le c_1n^2-c_2n \end{aligned}

只要:

c2≥1c_2\ge1

就有:

c2n−n≥0c_2n-n\ge0

因此归纳成立。再选择足够大的 c1c_1 处理初始条件,即可得到:

T(n)=O(n2)T(n)=O(n^2)

因为:

T(n)≤c1n2−c2n≤c1n2T(n)\le c_1n^2-c_2n\le c_1n^2

所以:

T(n)=O(n2)T(n)=O(n^2)

5. 常见技巧

5.1 先猜宽松界,再收紧

若一开始不知道答案,可以先证明一个容易成立的上界,例如:

O(n3)→O(n2)O(n^3)\rightarrow O(n^2)

宽松界有助于理解递归式,但最终应尽量给出紧确界。

5.2 加强归纳假设

当直接假设:

T(k)≤cg(k)T(k)\le cg(k)

无法推出目标时,可以尝试:

T(k)≤cg(k)−lower-order termT(k)\le cg(k)-\text{lower-order term}

例如:

T(k)≤c1k2−c2kT(k)\le c_1k^2-c_2k

这类低阶项可以在代入后吸收额外残差。

5.3 分别证明上下界

证明 Θ(g(n))\Theta(g(n)) 时,通常不要直接写“显然为 Θ\Theta”。更稳妥的做法是:

  1. 证明 T(n)=O(g(n))T(n)=O(g(n));
  2. 证明 T(n)=Ω(g(n))T(n)=\Omega(g(n));
  3. 合并得到 T(n)=Θ(g(n))T(n)=\Theta(g(n))。

5.4 注意向上取整和向下取整

实际递归式中常见:

T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+f(n)T(n)=T(\lfloor n/2\rfloor)+T(\lceil n/2\rceil)+f(n)

初学阶段可以先忽略取整,得到主要增长阶;严格证明时再利用常数吸收取整误差。

6. 与其他方法的关系

方法作用
Recursion Tree Method 递归树法生成猜测、理解每层代价
Substitution Method 代入法严格证明猜测是否成立
Master Method 主方法快速求解标准形式递归式
Iteration Method 迭代展开法适合单分支或简单递归式

提示

做题时的实用流程:先用主方法或递归树猜答案,再用代入法证明。

7. 模板

证明 T(n)=O(g(n))T(n)=O(g(n)) 的模板:

Claim: T(n) = O(g(n)).
即存在常数 c>0 和 n0,使得 n>=n0 时 T(n) <= c g(n)。

Inductive Hypothesis:
假设对所有 k<n,有 T(k) <= c g(k)。

Inductive Step:
将归纳假设代入递归式:
T(n) = ...
     <= ...
     <= c g(n)

Base Case:
选择足够大的 c,使所有 n<n0 的基例也满足 T(n) <= c g(n)。

Conclusion:
因此 T(n)=O(g(n))。

证明 T(n)=Ω(g(n))T(n)=\Omega(g(n)) 的模板:

Claim: T(n) = Omega(g(n)).
即存在常数 c>0 和 n0,使得 n>=n0 时 T(n) >= c g(n)。

Inductive Hypothesis:
假设对所有 k<n,有 T(k) >= c g(k)。

Inductive Step:
将归纳假设代入递归式:
T(n) = ...
     >= ...
     >= c g(n)

Base Case:
选择合适常数,使基例满足下界。

Conclusion:
因此 T(n)=Omega(g(n))。

8. 易错点

警告

错误 1:只代入,不证明。 代入法必须以归纳法收尾。

警告

错误 2:忽略初始条件。 常数不仅要处理递推步骤,也要覆盖基例。

警告

错误 3:把证明失败当成结论错误。 有时结论是对的,只是归纳假设不够强。

警告

错误 4:证明 Θ\Theta 时只证明上界。 O(g(n))O(g(n)) 只给上界,不能推出紧确界。

9. 最小复习卡片

代入法的三步是什么?

  1. 猜测解的形式;
  2. 用归纳法验证;
  3. 求常数并处理初始条件。

为什么有时要加强归纳假设?

因为直接假设 T(k)≤cg(k)T(k)\le cg(k) 可能在代入后多出低阶残差,无法推出 T(n)≤cg(n)T(n)\le cg(n)。减去低阶项可以吸收这些残差。

代入法和递归树法的关系是什么?

递归树法常用于猜测答案,代入法用于严格证明答案。

文章大纲
  1. Substitution Method 代入法
  2. 1. 基本思想
  3. 2. 具体过程
  4. 2.1 猜测渐近界
  5. 2.2 写出归纳假设
  6. 2.3 代入递归式
  7. 2.4 处理初始条件
  8. 3. 需要问题具有的性质
  9. 4. 典型例子:证明 T(n)=4T(n/2)+nT(n)=4T(n/2)+nT(n)=4T(n/2)+n 的上界
  10. 4.1 宽松上界:T(n)=O(n3)T(n)=O(n^3)T(n)=O(n3)
  11. 4.2 直接猜 O(n2)O(n^2)O(n2) 会遇到问题
  12. 4.3 加强归纳假设
  13. 5. 常见技巧
  14. 5.1 先猜宽松界,再收紧
  15. 5.2 加强归纳假设
  16. 5.3 分别证明上下界
  17. 5.4 注意向上取整和向下取整
  18. 6. 与其他方法的关系
  19. 7. 模板
  20. 8. 易错点
  21. 9. 最小复习卡片