相关笔记: 3.2 渐近记号的形式化定义 | 4.5 主定理

概览

本节系统回顾了算法分析中常用的标准数学函数与记号,并展示了渐近记号在这些函数上的具体应用。内容涵盖单调性取整函数的性质、多项式指数函数的增长率比较、Stirling 近似公式对阶乘的精确刻画、Fibonacci 数黄金比例 的关系、调和级数 的渐近行为、函数迭代迭代对数 的极慢增长特性,以及对数函数的核心恒等式与不等式。这些数学工具是后续章节中算法复杂度分析的基础构件。

  • 取整函数 (下取整)和 (上取整)均为单调递增函数,满足 (当 不是整数时)
  • 对任意渐近正多项式 ,其中 为多项式的次数
  • 对任意实常数 ,有 ,即指数函数严格快于多项式函数
  • Stirling 近似,给出了阶乘函数的渐近紧确界
  • Fibonacci 数 ,其中 为黄金比例,增长率为
  • 调和级数 ,与自然对数同阶
  • 迭代对数 是增长极慢的函数,对可观测宇宙中的所有

知识结构总览

graph TB
    A["3.3 标准记号与常见函数"] --> B["单调性与取整"]
    A --> C["多项式与指数"]
    A --> D["对数函数"]
    A --> E["阶乘与Stirling近似"]
    A --> F["Fibonacci数与黄金比例"]
    A --> G["调和级数"]
    A --> H["函数迭代与迭代对数"]
    A --> I["模运算"]

    B --> B1["单调递增/递减"]
    B --> B2["下取整 ⌊x⌋"]
    B --> B3["上取整 ⌈x⌉"]
    B --> B4["取整恒等式"]

    C --> C1["多项式 p(n) = Θ(n^d)"]
    C --> C2["指数恒等式"]
    C --> C3["多项式 vs 指数增长"]
    C --> C4["e^x 的展开与不等式"]

    D --> D1["lg / ln / lg^k 记号"]
    D --> D2["换底公式"]
    D --> D3["对数不等式"]
    D --> D4["多项式 vs 多对数"]

    E --> E1["n! 的定义"]
    E --> E2["Stirling 近似"]
    E --> E3["阶乘的渐近界"]

    F --> F1["Fibonacci 递推定义"]
    F --> F2["黄金比例 φ"]
    F --> F3["Binet 公式"]
    F --> F4["Fibonacci 的指数增长"]

    G --> G1["H_n 的定义"]
    G --> G2["H_n = ln n + O(1)"]

    H --> H1["函数迭代 f^(i)(n)"]
    H --> H2["迭代对数 lg* n"]
    H --> H3["lg* n 的实际值"]

    I --> I1["a mod n"]
    I --> I2["同余 a ≡ b (mod n)"]

核心思想

核心思想

本节的核心思想是:算法分析中频繁出现的各类数学函数具有明确的增长率层次关系,掌握这些函数的性质和相互关系是进行复杂度分析的基本功。从增长速度看,存在一个清晰的层次:常数 < 对数 < 多对数 < 线性 < 线性对数 < 多项式 < 指数 < 阶乘渐近记号为这一层次提供了精确的数学语言。Stirling 近似将阶乘与指数函数联系起来,Fibonacci 数的 Binet 公式将递推关系与黄金比例联系起来,调和级数将离散求和与连续对数联系起来——这些桥梁公式使得我们可以用统一的渐近分析框架处理看似不同的数学对象。

1. 单调性与取整函数

单调性(Monotonicity)

  • 单调递增:若 蕴含 ,则 是单调递增的
  • 单调递减:若 蕴含 ,则 是单调递减的
  • 严格递增:若 蕴含 ,则 是严格递增的
  • 严格递减:若 蕴含 ,则 是严格递减的

取整函数(Floors and Ceilings)

对任意实数

  • 下取整 :不超过 的最大整数(“地板”)
  • 上取整 :不小于 的最小整数(“天花板”)

两者均为单调递增函数。核心恒等式:

  • 对任意整数
  • 对任意实数 和整数 (当 不是整数时)
  • 对任意实数 和整数
  • 对任意整数 和实数

取整函数的直觉理解

想象你在一栋大楼里,每层楼高 3.5 米。如果你站在 10 米的高度:

  • :你位于第 2 层楼的地板之上
  • :你需要到达第 3 层才能完全覆盖这个高度

取整函数在算法中广泛出现,例如二分搜索中计算中点 (见2.3 分治法),归并排序中划分数组时需要处理奇数长度的情况。

2. 多项式与指数函数

多项式(Polynomials)

给定非负整数 次多项式为:

其中 。若 ,则多项式是渐近正的。对渐近正多项式:

即多项式的渐近增长率由其最高次项决定。若 (对某个常数 ),则称 多项式有界的

指数函数(Exponentials)

对所有实数

关于 单调递增。约定

多项式 vs 指数的增长率

对所有实常数

,这意味着任何底数严格大于 1 的指数函数都严格快于任何多项式函数

为底的指数函数有如下重要性质:

  • (对所有实数
  • (对所有 ,等号仅当 时成立)
  • 时,
  • 时,

多项式 vs 指数的直觉理解

想象两种增长方式:

  • 多项式增长 :像一个人每步走得更远一点(步长随时间缓慢增加)
  • 指数增长 :像一个人每步走两倍远(步长翻倍)

起初多项式可能领先(),但指数很快就会远远甩开多项式:

这就是为什么指数时间算法(如暴力搜索)对大规模输入不可行。

3. 对数函数

对数记号与性质

本节使用以下记号:

  • (以 2 为底的对数,二进制对数)
  • (以 为底的对数,自然对数)
  • (对数值的 次幂,幂运算)
  • (对数值的再取对数,复合运算)

约定:无括号时,对数函数仅作用于下一个项,因此 表示 ,而非

核心恒等式( 且底数不为 1):

  • 换底公式

对数不等式

等号仅当 时成立。当 时, 的级数展开为:

多项式 vs 多对数:对所有实常数

,任何正多项式函数都严格快于任何多对数函数。若 (对某个常数 ),则称 多对数有界的

换底公式的算法意义

由换底公式 可知,不同底数的对数之间仅差一个常数因子。因此在O 记号中,对数的底数不影响渐近增长率。计算机科学家偏好以 2 为底(),因为许多算法和数据结构涉及将问题一分为二(如归并排序、二叉搜索树)。

4. 阶乘与 Stirling 近似

阶乘(Factorial)

对整数

。一个弱上界为 (因为 个因子中每个都不超过 )。

Stirling 近似(Stirling's Approximation)

其中 是自然对数的底数。由此可得三个重要结论:

  • (阶乘严格慢于
  • (阶乘严格快于
  • (阶乘的对数是 量级)

对所有 ,还有如下更紧的界:

Stirling 近似的直觉理解

Stirling 近似告诉我们, 的增长率介于 之间,更精确地说,它非常接近于

为例:

  • Stirling 近似值:
  • 相对误差仅约

越大,Stirling 近似的精度越高。在算法分析中,我们通常只需要 这一结论,它直接用于推导基于比较的排序算法的下界。

5. Fibonacci 数与黄金比例

Fibonacci 数(Fibonacci Numbers)

,递推定义:

产生序列:

黄金比例(Golden Ratio)

黄金比例 和其共轭 是方程 的两个根:

Binet 公式(可通过数学归纳法证明):

由于 ,当 增大时 ,因此:

这意味着 Fibonacci 数以指数速率增长:

Fibonacci 数的直觉理解

Fibonacci 数在自然界中广泛出现:向日葵的螺旋数、贝壳的生长模式、兔子的繁殖数量等。在算法中,Fibonacci 数出现在:

  • Fibonacci 堆(一种优先队列数据结构)
  • 最坏情况输入构造(如某些排序算法的最坏情况)
  • 递归算法的复杂度分析(如朴素递归计算 的时间为

Binet 公式揭示了递推关系与特征方程之间的深刻联系:递推 的特征方程正是 ,其根决定了递推解的增长率。

6. 调和级数

调和级数(Harmonic Series)

个调和数为:

调和级数的渐近行为为:

其中 是 Euler-Mascheroni 常数。在渐近记号下:

调和级数的算法意义

调和级数在算法分析中频繁出现。例如:

  • 快速排序的平均情况比较次数为
  • 二项堆中 decrease-key 操作的均摊代价为 ,与 的增长有关
  • 散列表中某些探测序列的分析涉及调和级数

虽然调和级数是发散的(),但其增长极其缓慢:

7. 函数迭代与迭代对数

函数迭代(Functional Iteration)

表示函数 迭代应用于初始值 次:

例如,若 ,则

迭代对数(Iterated Logarithm)

迭代对数 (读作 “log star of n”)定义为:

其中 表示对数函数连续应用 次。 的增长极其缓慢:

21
42
163
65,5364
5

由于可观测宇宙中的原子数约为 ,远小于 ,因此在实际计算中几乎不会遇到 的输入。

迭代对数的算法意义

迭代对数出现在某些高级算法的复杂度分析中:

  • Union-Find 数据结构(带路径压缩和按秩合并)的均摊操作时间为 ,其中 是反 Ackermann 函数,增长比 还要慢
  • van Emde Boas 树的查询时间为
  • 近线性时间的最小生成树算法(如 Chazelle 算法)中涉及

是”几乎常数”的函数——在所有实际输入规模上,它的值都不超过 5。

8. 模运算

模运算(Modular Arithmetic)

对任意整数 和正整数

的余数(或称剩余)。由此可得:

  • (即使 为负数也成立)

,则记 ,称 在模 下同余。等价地, 当且仅当 整除


补充理解与拓展

Stirling 近似的历史与深层含义

Stirling 近似由 James Stirling 于 1730 年在其著作 Methodus Differentialis 中首次发表(常数 的确定归功于 Abraham de Moivre)。该公式建立了离散数学(阶乘)与连续数学(指数函数、)之间的桥梁。在信息论中,Stirling 近似用于推导二项分布的正态近似和熵的渐近表达式。在统计力学中,它用于计算微观状态数。在算法分析中, 是证明”基于比较的排序算法至少需要 次比较”这一下界定理的关键步骤。

来源:T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Section 3.3; G. H. Hardy and E. M. Wright, An Introduction to the Theory of Numbers, 6th ed., Oxford University Press, 2008; C. E. Shannon, “A Mathematical Theory of Communication,” Bell System Technical Journal, 1948.

Fibonacci 数与算法复杂度

Fibonacci 数在算法设计中有多重角色。在递归算法分析中,朴素递归计算 的时间复杂度为 ,这展示了不使用记忆化/动态规划的指数级时间代价。在数据结构中,Fibonacci 堆利用 Fibonacci 数的性质实现了 的均摊插入和 decrease-key 操作。在密码学中,Fibonacci 数列的周期性(Pisano 周期)与模运算密切相关。此外,Fibonacci 数与 Euclid 算法的效率分析也有联系:Lame 定理指出 Euclid 算法在计算 时恰好执行 次递归调用,这是 Euclid 算法最坏情况的输入。

来源:T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Section 3.3 and Chapter 31; D. E. Knuth, The Art of Computer Programming, Vol. 2: Seminumerical Algorithms, Addison-Wesley, 1997.


易混淆点与辨析

(幂运算)与 (函数迭代)的混淆

初学者常混淆这两种记号,它们含义完全不同。

记号含义示例(
先取对数,再求 次幂
对数函数连续应用
  • ❌ ” 表示对 连续取两次对数”
  • ✅ ” 表示对数值的平方; 才表示连续取两次对数。注意上标位置的区别:(上标在函数名上)是幂运算,(上标带括号)是函数迭代”

的混淆

初学者常从 错误推断

  • ❌ “,因为 的每个因子都不超过
  • ✅ “(严格慢于 )。虽然 给出上界 ,但 。Stirling 近似给出更精确的刻画:,比 小了一个 的因子”

直觉理解: 相乘),而 (从 相乘)。 的因子远小于 的因子,因此 增长得慢得多。


习题精选

题号核心考点难度
3.3-1单调递增函数的和、复合与积⭐⭐
3.3-2取整恒等式的证明⭐⭐
3.3-4Stirling 近似的应用与 ⭐⭐⭐
3.3-5阶乘的多项式有界性判定⭐⭐⭐
3.3-9⭐⭐⭐

视频学习指南

资源链接对应内容备注
MIT 6.006 Lecture 4: Heaps and Heap Sorthttps://www.youtube.com/watch?v=B7hVxCmfPsM对数函数在堆操作中的应用Erik Demaine 教授
MIT 6.006 Recitation 2: Asymptoticshttps://www.youtube.com/watch?v=Z4dR1sJrPdMStirling 近似、常见函数增长率MIT OCW
3Blue1Brown - Fibonacci and the Golden Ratiohttps://www.youtube.com/watch?v=VoXw-1cPJCkFibonacci 数与黄金比例的几何直觉动画可视化
Abdul Bari - Stirling’s Formulahttps://www.youtube.com/watch?v=kqlxmkFfGoEStirling 近似的推导与应用直观的逐步推导

教材原文

教材原文摘录

“This section reviews some standard mathematical functions and notations and explores the relationships among them. It also illustrates the use of the asymptotic notations.”

“We can relate the rates of growth of polynomials and exponentials by the following fact. For all real constants and , we have , from which we can conclude that . Thus, any exponential function with a base strictly greater than 1 grows faster than any polynomial function.”

“Stirling’s approximation gives us a tighter upper bound, and a lower bound as well.”

“The iterated logarithm is a very slowly growing function… Since the number of atoms in the observable universe is estimated to be about , which is much less than , we rarely encounter an input size for which .”


参见 Wiki

常见函数