相关笔记: 8.3 分治算法与递推关系 | 8.5 容斥原理

概览

本节系统介绍了生成函数(generating functions)的定义、性质与应用。生成函数将序列的项编码为形式幂级数的系数,是解决计数问题、求解递推关系、证明组合恒等式的强大工具。

  • 常生成函数(OGF),将序列 编码为幂级数的系数
  • 核心幂级数:
  • 广义二项式定理,其中 为广义二项式系数
  • 用生成函数求解计数问题:将约束条件转化为因式的乘积,目标数为展开式中对应幂次的系数
  • 用生成函数求解递推关系:将递推关系转化为关于 的方程,解出 后提取系数
  • 指数生成函数(EGF),适用于排列计数等场景

一、知识结构总览

graph TB
    A["8.4 生成函数<br/>Generating Functions"] --> B["常生成函数 OGF 定义"]
    A --> C["幂级数基本事实"]
    A --> D["广义二项式定理"]
    A --> E["计数问题"]
    A --> F["求解递推关系"]
    A --> G["证明恒等式"]
    A --> H["指数生成函数 EGF"]

    B --> B1["G(x) = Σ a_k x^k"]
    B --> B2["有限序列的多项式表示"]
    B --> B3["生成函数的加法与乘法"]

    C --> C1["1/(1-x) = 1 + x + x² + ..."]
    C --> C2["1/(1-ax) = Σ a^k x^k"]
    C --> C3["1/(1-x)² = Σ(k+1)x^k"]
    C --> C4["Theorem 1:加法与乘法规则"]

    D --> D1["广义二项式系数 binom(u,k)"]
    D --> D2["(1+x)^u = Σ binom(u,k) x^k"]
    D --> D3["(1-x)^(-n) = Σ C(n+k-1,k) x^k"]
    D --> D4["(1+x)^(-n) = Σ(-1)^k C(n+k-1,k) x^k"]

    E --> E1["方程解的计数"]
    E --> E2["分配问题"]
    E --> E3["组合数公式推导"]
    E --> E4["邮票/零钱问题"]

    F --> F1["一阶线性递推"]
    F --> F2["含非齐次项的递推"]
    F --> F3["部分分式分解"]

    G --> G1["Vandermonde 恒等式"]
    G --> G2["Pascal 恒等式"]

    H --> H1["EGF 定义:Σ a_k x^k/k!"]
    H --> H2["EGF 的乘法对应排列"]

二、核心思想

核心思想

本节的核心思想是用幂级数编码序列:将一个序列 的各项作为形式幂级数 的系数。这样,序列上的运算(如加法、卷积)就转化为幂级数上的代数运算(如加法、乘法),使我们能够利用微积分和代数工具来解决组合计数和递推关系问题。

1. 常生成函数的定义

常生成函数(Ordinary Generating Function, OGF)

实数序列 生成函数是无穷级数

对于有限序列 ,通过令 将其扩展为无穷序列,其生成函数为多项式:

基本生成函数示例

  • 常数序列
  • 线性序列 ):
  • 指数序列 ):
  • 有限序列

二项式系数的生成函数

,则

这正是二项式定理的直接结果。

2. 幂级数的基本事实

基本幂级数公式

以下幂级数在 (或相应的收敛半径内)收敛:

Theorem 1:生成函数的加法与乘法

,则

加法

乘法(Cauchy 乘积 / 卷积):

乘法公式表明:两个生成函数乘积的第 个系数,等于两个序列前 项的卷积

的展开系数

由 Example 4,。由 Theorem 1 的乘法规则:

因此

3. 广义二项式系数与广义二项式定理

广义二项式系数(Extended Binomial Coefficient)

为实数, 为非负整数。广义二项式系数定义为

为负整数 时,有重要公式:

推导

广义二项式系数的计算

Theorem 2 — 广义二项式定理(Extended Binomial Theorem)

为实数且 为实数,则

为正整数时,广义二项式定理退化为普通的二项式定理(因为当 )。

的生成函数

由广义二项式定理:

替换为

这是生成函数中最重要的公式之一,它告诉我们 的第 个系数是

常用生成函数汇总表

生成函数 展开式 系数

4. 用生成函数解决计数问题

计数问题的生成函数方法

用生成函数解决计数问题的核心思路是:

  1. 将每种选择用一个多项式因式表示,其中 的系数表示选择 个该类物品的方式数
  2. 将所有因式相乘,乘积展开式中 的系数就是选择总数为 的方式数

常见因式对应关系:

  • 每种物品可选 个(无上限):
  • 每种物品可选 个:
  • 每种物品至少选 个:
  • 每种物品可选 个:

方程解的计数(Example 10)

求方程 的解的个数,其中

解法:构造生成函数

答案为 的系数。逐一枚举:

  • :需要 不在范围内,无解
  • :需要 不在范围内,无解
  • :需要
  • :需要 ✓;

共 3 个解。

分配问题(Example 11)

将 8 个相同的饼干分给 3 个不同的孩子,每个孩子至少 2 个、至多 4 个饼干,有多少种方式?

解法:每个孩子对应因式 ,生成函数为

答案为 的系数。令 ,则 ,需要 的系数。

的系数:展开后 项来自以下组合:

  • 从三个因式中取
  • 从三个因式中取

种方式。

用生成函数推导组合数公式(Example 14)

用生成函数求从 个元素的集合中选取 个元素(允许重复)的组合数。

解法:每个元素可以被选 次,对应因式 个元素的生成函数为

由广义二项式定理:

因此允许重复的 -组合数为 ,这与第6章 Theorem 2 的结论一致。

至少选一个的组合数(Example 15)

种不同物品中选 个,每种至少选 1 个。

每种物品对应因式 ,生成函数为

由广义二项式定理:

,则 ,系数为

5. 用生成函数求解递推关系

生成函数求解递推关系的方法

  1. 为序列的生成函数
  2. 将递推关系两边乘以 并求和,利用递推关系消去部分项
  3. 解关于 的方程,得到 的闭式(有理函数形式)
  4. 展开为幂级数(通常用部分分式分解),提取系数

求解 (Example 16)

。则

利用递推关系

因此 ,解得

,得

因此

求解含 项的递推关系(Example 17)

设有效码字是含偶数个 0 的 位十进制数, 为长度为 的有效码字数。递推关系为

扩展序列令 (空串)。

。两边乘以 并从 求和:

解得:

部分分式分解:

展开:

因此

6. 用生成函数证明组合恒等式

证明 (Example 18)

证明:由二项式定理, 的系数。

另一方面:

展开后 的系数为:

由于 ,这等于

两个表达式都是 的系数,故相等。

7. 指数生成函数简介

指数生成函数(Exponential Generating Function, EGF)

序列 指数生成函数

例如,常数序列 的指数生成函数为

注意: 是常数序列的指数生成函数,但它是序列 的常生成函数。

指数生成函数的乘法对应于排列的复合:两个 EGF 乘积的系数涉及排列的标签分配问题,这在排列计数中非常有用。


三、补充理解与易混淆点

补充理解

补充1:生成函数为什么有效——"编码-代数-解码"三步法

生成函数的威力在于它将计数问题转化为代数问题。整个过程可以概括为三步:

  1. 编码:将每种选择用一个多项式因式表示。例如,“选 0 到 5 个苹果”编码为
  2. 代数:将所有因式相乘,利用代数工具(部分分式、广义二项式定理等)求出乘积的闭式
  3. 解码:从闭式中提取目标幂次的系数,即为答案

这种方法的优美之处在于:复杂的约束条件被自然地编码为多项式的因式结构,而幂级数的乘法自动处理了”不同选择之间的组合”这一计数核心操作。

生成函数的理论基础可追溯到 18 世纪 Euler 对整数分拆问题的研究,后经 Laplace 在概率论中的应用而广泛传播。现代组合数学中,生成函数是核心工具之一(Wilf, 2006, generatingfunctionology)。 来源:Wilf, H. S. (2006). generatingfunctionology (3rd ed.). A K Peters/CRC Press, Chapter 1. 来源:Graham, R. L., Knuth, D. E. & Patashnik, O. (1994). Concrete Mathematics (2nd ed.), Addison-Wesley, Chapter 7.

补充2:常生成函数 vs 指数生成函数

常生成函数(OGF)和指数生成函数(EGF)适用于不同类型的计数问题:

特性常生成函数 OGF指数生成函数 EGF
定义
乘法含义无序选择(组合)有序选择(排列)
典型应用组合计数、方程解数排列计数、分配问题
核心公式

简单的经验法则:如果问题涉及”选若干个”(组合),用 OGF;如果涉及”排列”或”标签分配”,用 EGF。 来源:Wilf, H. S. (2006). generatingfunctionology (3rd ed.). A K Peters/CRC Press, Chapter 3. 来源:Rosen, K. H. (2019). Discrete Mathematics and Its Applications (8th ed.), McGraw-Hill, Section 8.4.

易混淆点

误区:生成函数中的 不是变量

  • ❌ 认为需要关心 取何值时的收敛性
  • ✅ 在组合数学中,生成函数被当作形式幂级数(formal power series)处理, 只是一个占位符,其作用是将序列的项编码为系数
  • 收敛性问题在微积分中有意义,但在生成函数的应用中通常可以忽略
  • 例如 处无定义,但这不影响它作为序列 的生成函数

误区:广义二项式系数的符号

  • ❌ 混淆 的符号
  • ,注意前面的 因子
  • 这意味着 的系数是交错符号的:
  • 的系数全部为正:

误区:生成函数乘积中因式的顺序

  • ❌ 认为因式的顺序会影响结果
  • ✅ 生成函数的乘法满足交换律,因式的顺序不影响最终结果
  • 但每个因式对应的”物品类型”必须区分清楚,不能遗漏或重复

四、习题精选

习题概览

题号范围核心考点难度
1-2有限序列的生成函数
3-4无限序列的生成函数闭式⭐⭐
5-6特殊序列的生成函数⭐⭐
7-8从生成函数求序列⭐⭐
9-12求幂级数中特定幂次的系数⭐⭐⭐
13-18用生成函数解决分配/选择问题⭐⭐⭐
19-22生成函数的构造与系数解释⭐⭐⭐
23-26邮票/零钱问题⭐⭐⭐⭐
27-28掷骰子问题⭐⭐⭐
29-31用生成函数做零钱问题⭐⭐⭐⭐
32-33生成函数的变换(平移、缩放等)⭐⭐⭐
34-40用生成函数求解递推关系⭐⭐⭐⭐
41Fibonacci 数的生成函数解法⭐⭐⭐⭐
42-43Catalan 数与生成函数⭐⭐⭐⭐
44-45用生成函数证明 Pascal/Vandermonde 恒等式⭐⭐⭐
46 个平方和的生成函数推导⭐⭐⭐
47-50指数生成函数⭐⭐⭐⭐
53-58整数分拆与生成函数⭐⭐⭐⭐

题1:有限序列的生成函数

题目

求有限序列 的生成函数闭式。

题2:求幂级数的系数

题目

展开式中 的系数。

题3:分配问题

题目

用生成函数求将 10 个相同的气球分给 4 个不同的孩子、每个孩子至少 2 个气球的方式数。

题4:用生成函数求解递推关系

题目

用生成函数求解递推关系

题5:证明组合恒等式

题目

用生成函数证明 Vandermonde 恒等式:

解题思路提示

生成函数问题的解题方法论:

  1. 构造生成函数:根据约束条件,为每种选择构造对应的多项式因式
  2. 利用常用公式:熟记 等核心公式及其展开
  3. 提取系数:目标幂次的系数即为答案,可利用广义二项式定理直接读取
  4. 求解递推关系:关键步骤是将递推关系转化为 的方程,然后用部分分式分解
  5. 证明恒等式:找到同一个生成函数的两种展开方式,比较同次幂的系数

五、视频学习指南

视频资源

资源链接对应内容备注
Rosen 8e Section 8.4教材原文完整定义、定理与例题英文教材
Harvey Mudd — Generating Functions链接生成函数入门与应用英文
MIT 18.042J链接生成函数与组合计数英文,MIT开放课程

六、教材原文

教材原文

“Generating functions are used to represent sequences efficiently by coding the terms of a sequence as coefficients of powers of a variable in a formal power series.”

“Generating functions can be used to solve many types of counting problems, such as the number of ways to select or distribute objects of different kinds, subject to a variety of constraints, and the number of ways to make change for a dollar using coins of different denominations.”

“Generating functions can be used to solve recurrence relations by translating a recurrence relation for the terms of a sequence into an equation involving a generating function. This equation can then be solved to find a closed form for the generating function.”


参见 Wiki

高级计数技术