1. 递归式简介

1.1 什么是递归式

递归式(Recurrence Relation)是用于定义序列的数学方程,其中序列的每一项都通过前面若干项来定义。递归式在计算机科学中广泛用于描述分治算法的时间复杂度。

一个递归式包含两个部分:

  • 基础情况(Base Case):递归终止条件
  • 递归情况(Recursive Case):将问题分解为更小的子问题

1.2 常见递归式示例

斐波那契数列

最经典的递归式例子是斐波那契数列:

int fib(int n) {
    if (n <= 1) return n;
    return fib(n - 1) + fib(n - 2);
}

归并排序

归并排序的递归式为:

void mergeSort(vector<int>& arr, int left, int right) {
    if (left >= right) return;
    int mid = left + (right - left) / 2;
    mergeSort(arr, left, mid);
    mergeSort(arr, mid + 1, right);
    merge(arr, left, mid, right);  // O(n) 合并操作
}

2. 代入法求解递归式

代入法(Substitution Method)是求解递归式最基本的方法,通过猜测解的形式,然后用数学归纳法证明。

2.1 方法步骤

  1. 猜测解的形式
  2. 假设解对某个常数 成立
  3. 用数学归纳法证明

2.2 示例:证明 的解为

猜测 为某个正常数)

基础情况:设 ,则 (当 足够大时成立)

归纳假设:假设对所有小于 的值,不等式成立,即

归纳证明

时, 成立。

得证

2.3 代入法的局限性

代入法需要猜测解的形式,对于某些递归式难以猜测正确解。这时我们可以使用递归树方法来辅助猜测。


3. Master 定理

Master 定理(Master Theorem)提供了一种直接求解形如以下递归式的方法:

其中:

  • :子问题数量
  • :子问题规模的缩减比例
  • :分解和合并子问题的代价

3.1 Master 定理的三种情况

关键项,比较 的相对增长速度:

情况条件结论
情况 1,其中
情况 2,其中
情况 3,其中

情况 2 的关键:当 多项式级别相等时(差一个对数因子),解需要再乘以一个对数因子。

3.2 Master 定理的几何直观

         n                    n
        / \                  / \
       /   \                /   \
      /     \              /     \
    n/2     n/2          n/4     n/4
    / \     / \          / \     / \
   /   \   /   \        /   \   /   \
  ...  ...       =>    ...  ...  ...
  
  每层代价: f(n)       子问题数: a
  子问题规模: n/b     深度: log_b n

每层处理的代价为 ,共 层,共有 个叶子节点。


4. 经典应用示例

4.1 二分查找

递归式

参数

分析

比较

属于情况 2(),所以:

int binarySearch(vector<int>& arr, int target, int left, int right) {
    if (left > right) return -1;
    int mid = left + (right - left) / 2;
    if (arr[mid] == target) return mid;
    else if (arr[mid] < target) 
        return binarySearch(arr, target, mid + 1, right);
    else 
        return binarySearch(arr, target, left, mid - 1);
}

4.2 归并排序

递归式

参数

分析

比较

属于情况 2(),所以:

4.3 Strassen 矩阵乘法

Strassen 算法将两个 矩阵乘法分解为 7 个子矩阵乘法:

递归式

参数

分析

比较

  • ,其中

属于情况 1,所以:

这比朴素的 矩阵乘法更快。


5. 扩展 Master 定理

标准 Master 定理的情况 2 仅适用于 多项式级别相等的情况。扩展 Master 定理(Akra-Bazzi 定理的特例)可以处理多对数因子的情况。

5.1 扩展形式

情况条件结论
情况 2a,其中
情况 2b,其中

5.2 示例:递归式

参数

分析

,属于情况 2a(),所以:


6. Master 定理的局限性

Master 定理并非万能,以下情况不能直接使用:

限制示例说明
子问题规模不同不是 形式
不是多项式 增长过快
不是常数 必须为常数
缺少多项式级别差距介于情况 1 和 2 之间

对于无法直接应用 Master 定理的递归式,可以使用递归树法Akra-Bazzi 定理求解。


7. 总结

方法适用场景特点
代入法所有递归式需要猜测解的形式
递归树法复杂递归式直观,但计算繁琐
Master 定理快速得到精确答案
Akra-Bazzi 定理更一般的递归式

掌握这些技术,可以快速分析大多数分治算法的时间复杂度,从而更好地理解算法效率。


参考资料