Skip to content

Lec 7 递归

1. 递推关系

Definition. 递推关系(recurrence)是一个数列的隐式表示:前几项显式给出,后续项定义为前项的函数。

目标: 与求和一样,我们希望找到第 n 项的闭合公式closed form),而无需逐项计算。

常见例子:

递推关系闭合公式
a0=1,;an=an1+1an=n+1
F0=0,;F1=1,;Fn=Fn1+Fn2Fn=15[(1+52)n(152)n]

2. 汉诺塔 (Towers of Hanoi)

2.1 问题描述

n 个大小各异的圆盘堆在柱 L 上(从下到上由大到小),目标是将所有圆盘移到柱 R,规则:

  1. 每次只能移动一个圆盘;
  2. 大圆盘不能放在小圆盘上。

2.2 递归算法

归纳构造:已知可以移动 n1 个圆盘,则移动 n 个圆盘的策略为:

H(n, A, B):   // 将盘 1..n 从柱 A 移到柱 B,C 为第三根柱
  if n == 1: 直接移动盘 1 从 A 到 B
  else:
    H(n-1, A, C)   // 将上面 n-1 个盘移到中间柱
    移动盘 n 从 A 到 B
    H(n-1, C, B)   // 将 n-1 个盘从中间柱移到目标柱

2.3 递推与闭合公式

T(n) 为移动 n 个圆盘所需步数:

T(1)=1,T(n)=2T(n1)+1(n2)

Guess and Check: 猜测 T(n)=2n1,用归纳法验证:

  • Base case: T(1)=211=1。✓
  • Inductive step: T(n)=2T(n1)+1=2(2n11)+1=2n1。✓

实际意义: 64 个圆盘需 2641 步,按每秒一步,约需 5800 亿年


3. 选择排序 (Selection Sort)

算法: 每轮扫描找最大元素(n1 次比较),移至末尾,对剩余 n1 元素递归。

递推关系:

T(1)=0,T(n)=(n1)+T(n1)

展开得:

T(n)=(n1)+(n2)++1=n(n1)2=Θ(n2)

4. 归并排序 (Merge Sort)

核心思路: 已排好的两个有序列表,可以用至多 n1 次比较合并(merge)为一个有序列表。

算法(n=2k 时):

MergeSort(X):
  if |X| == 1: return X
  L, R = 前半段, 后半段
  L' = MergeSort(L)
  R' = MergeSort(R)
  return Merge(L', R')

正确性: 就是归纳法——MS(1) 成立;MS(2k)MS(2k1) 和正确的合并步骤保证。

比较次数递推:

T(n)=2T(n/2)+(n1)

4.1 展开法 (Plug and Chug)

反复将递推代入自身,寻找规律(n=2k):

T(n)=(n1)+2T(n/2)$$$$=(n1)+(n2)+4T(n/4)$$$$=(n1)+(n2)+(n4)+8T(n/8)$$$$=$$$$=j=0k1(n2j)+2kT(1)$$$$=kn(1+2++2k1)+0$$$$=nlog2n(n1)=Θ(nlogn)

对比:

nMerge SortSelection Sort
81728
1649120
32129496

5. 主定理 (Master Theorem)

5.1 适用形式

分治算法的递推通常形如:

T(n)=aT!(nb)+f(n)

其中 a1(子问题数),b>1(规模缩减比),f(n)(合并代价)。

Theorem (Master Theorem).a1b>1 为常数,T(n)=aT(n/b)+f(n),则:

Case 1:f(n)=O(nlogbaε)(某 ε>0),则 T(n)=Θ(nlogba)

Case 2:f(n)=Θ(nlogba),则 T(n)=Θ(nlogbalogn)

Case 3:f(n)=Ω(nlogba+ε)(某 ε>0),且 a,f(n/b)c,f(n)(某 c<1),则 T(n)=Θ(f(n))

(将 n/b 换成 n/b 结论同样成立。)

5.2 直觉:递归调用树

递归树共 logbn 层,节点总数 Θ(nlogba)。每层工作量为:

f(n),;a,f(n/b),;a2f(n/b2),;
  • Case 1(f 增长慢): 叶节点数量主导,运行时间 =Θ(叶子数)=Θ(nlogba)
  • Case 3(f 增长快): 根节点代价主导,运行时间 =Θ(f(n))
  • Case 2(二者平衡): 每层贡献相同,运行时间 =Θ(f(n)深度)=Θ(nlogbalogn)

5.3 应用示例

算法递推abnlogbaCase结论
Merge Sort2T(n/2)+n22n2Θ(nlogn)
Binary SearchT(n/2)+112n0=12Θ(logn)
Karatsuba3T(n/2)+Θ(n)32nlog231Θ(nlog23)
Hanoi2T(n1)+1不适用Θ(2n)

注意: 主定理有盲区。例如 T(n)=2T(n/2)+nlognf(n)=nlognnlog22=n 大,但仅大一个 log 因子(不是多项式因子),既不属于 Case 2 也不属于 Case 3,需要回归递归树分析或归纳法。


6. 关键术语速查

英文中文
Recurrence递推关系
Closed form闭合公式
Guess and Check猜测验证法
Plug and Chug展开代入法
Towers of Hanoi汉诺塔
Selection Sort选择排序
Merge Sort归并排序
Merge合并
Master Theorem主定理
Divide and conquer分治法
Recursion tree递归调用树
KaratsubaKaratsuba 整数乘法算法