“生成函数” (Generating Function)
字数 4296 2025-10-27 23:35:16

好的,我们开始学习一个新的词条:“生成函数” (Generating Function)

生成函数是组合数学和离散数学中一个极为强大的工具,它用一种巧妙的方式将序列(通常是无穷序列)编码成一个函数的幂级数系数,从而可以利用函数论和微积分的工具来解决计数、递归关系等离散问题。


第一步:基本概念——什么是生成函数?

想象一下,你有一个无穷数列:

\[a_0, a_1, a_2, a_3, \dots \]

这个序列可能代表任何东西:比如抛硬币得到特定正面序列的方式数,或者满足某些条件的结构数量。

生成函数的核心思想是:我们不再孤立地看待这些离散的数字,而是将它们“打包”成一个幂级数的系数。最常用的是普通生成函数 (Ordinary Generating Function, OGF)

定义:对于序列 \(\{a_n\}\),其普通生成函数 \(G(x)\) 定义为:

\[G(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + \dots = \sum_{n=0}^{\infty} a_n x^n \]

这里,\(x\) 是一个形式变量(我们起初可以暂时忽略它的收敛性,将其视为形式幂级数)。

关键点:整个序列的信息被完整地“存储”在了函数 \(G(x)\) 中。序列的第 \(n\) 项,就是 \(G(x)\) 展开式中 \(x^n\) 的系数。


第二步:一个简单的例子——理解“生成”的过程

考虑最简单的无穷序列:全是 1 的序列。

\[a_n = 1, \quad \text{对于所有 } n = 0, 1, 2, \dots \]

那么它的生成函数是:

\[G(x) = 1 + 1\cdot x + 1\cdot x^2 + 1\cdot x^3 + \dots \]

在中学数学中,我们知道这是一个无穷等比数列求和。当 \(|x| < 1\) 时,它的和有一个简洁的封闭形式:

\[G(x) = \frac{1}{1-x} \]

这是一个非常深刻的结论:看似复杂的无穷级数,其本质可以是一个简单的有理函数 \(\frac{1}{1-x}\)。这个函数“生成”了我们的序列,因为如果我们用二项式定理或几何级数公式将 \(\frac{1}{1-x}\) 展开,正好就能得到 \(1 + x + x^2 + x^3 + \dots\)


第三步:生成函数的运算与实用性

生成函数的威力在于我们可以对它们进行代数运算(加、减、乘、求导、积分),而这些运算对应着原始序列的某种组合操作。

例1:序列的平移
假设我们有一个序列 \(\{a_n\}\),其生成函数为 \(G(x) = \sum a_n x^n\)
那么,序列 \(\{a_{n+1}\}\)(即原序列向左平移一位)的生成函数是多少?

\[\sum_{n=0}^{\infty} a_{n+1} x^n = \frac{1}{x} \sum_{n=0}^{\infty} a_{n+1} x^{n+1} = \frac{1}{x} (G(x) - a_0) \]

这个关系在求解递归方程时至关重要。

例2:序列的卷积
考虑两个序列 \(\{a_n\}\)\(\{b_n\}\),它们的生成函数分别为 \(A(x)\)\(B(x)\)
那么,新序列 \(c_n = a_0 b_n + a_1 b_{n-1} + \dots + a_n b_0\)(称为序列的卷积)的生成函数是多少?

\[C(x) = A(x) \cdot B(x) \]

证明

\[A(x)B(x) = (a_0 + a_1x + a_2x^2 + \dots)(b_0 + b_1x + b_2x^2 + \dots) \]

当我们展开这个乘积时,\(x^n\) 项是如何得到的?它来自于所有满足 \(i+j=n\) 的项 \(a_i x^i \cdot b_j x^j\) 的和。因此,\(x^n\) 的系数正好是 \(\sum_{i=0}^n a_i b_{n-i} = c_n\)

这个性质是生成函数解决计数问题的核心。例如,如果要计算完成一个两步骤任务的方法数,而第一步有 \(a_i\) 种方式,第二步有 \(b_j\) 种方式,那么总共完成整个任务的方法数序列就是这两个序列的卷积,其生成函数就是两个生成函数的乘积。


第四步:应用——求解递归关系

让我们看一个经典例子,斐波那契数列。
斐波那契数列定义为:

\[F_0 = 0, \quad F_1 = 1, \quad F_n = F_{n-1} + F_{n-2} \quad \text{对于 } n \ge 2 \]

我们的目标是找到一个关于 \(n\) 的显式公式(闭合公式)。

  1. 定义生成函数
    \(G(x) = F_0 + F_1 x + F_2 x^2 + F_3 x^3 + \dots = 0 + 1\cdot x + F_2 x^2 + F_3 x^3 + \dots\)

  2. 利用递归关系
    将递归式 \(F_n - F_{n-1} - F_{n-2} = 0\) 两边乘以 \(x^n\) 并对 \(n \ge 2\) 求和:

\[ \sum_{n=2}^{\infty} F_n x^n - \sum_{n=2}^{\infty} F_{n-1} x^n - \sum_{n=2}^{\infty} F_{n-2} x^n = 0 \]

利用第三步中的“平移”技巧:
  • \(\sum_{n=2}^{\infty} F_n x^n = G(x) - F_0 - F_1 x = G(x) - x\)
  • \(\sum_{n=2}^{\infty} F_{n-1} x^n = x \sum_{n=2}^{\infty} F_{n-1} x^{n-1} = x (G(x) - F_0) = x G(x)\)
  • \(\sum_{n=2}^{\infty} F_{n-2} x^n = x^2 \sum_{n=2}^{\infty} F_{n-2} x^{n-2} = x^2 G(x)\)
  1. 得到 \(G(x)\) 的方程
    将上述结果代入方程:

\[ (G(x) - x) - x G(x) - x^2 G(x) = 0 \]

解得:

\[ G(x) - x G(x) - x^2 G(x) = x \]

\[ G(x) (1 - x - x^2) = x \]

\[ G(x) = \frac{x}{1 - x - x^2} \]

我们成功地将无穷递归关系转化为了一个简单的有理函数!
  1. 部分分式分解与显式公式
    现在,我们将 \(G(x)\) 分解成我们熟悉的几何级数形式。

\[ G(x) = \frac{x}{1 - x - x^2} \]

首先求分母的根:\(1 - x - x^2 = 0\),解得 \(x = \frac{-1 \pm \sqrt{5}}{2}\)。设 \(\phi = \frac{1+\sqrt{5}}{2}\)(黄金比例),\(\psi = \frac{1-\sqrt{5}}{2}\)。可以验证 \(1 - x - x^2 = -(x+\phi)(x+\psi)\),但更常用的分解是:

\[ G(x) = \frac{x}{(1-\phi x)(1-\psi x)} = \frac{1}{\sqrt{5}} \left( \frac{1}{1-\phi x} - \frac{1}{1-\psi x} \right) \]

现在,利用第二步中的几何级数公式 \(\frac{1}{1 - r x} = \sum_{n=0}^{\infty} r^n x^n\)

\[ G(x) = \frac{1}{\sqrt{5}} \left( \sum_{n=0}^{\infty} \phi^n x^n - \sum_{n=0}^{\infty} \psi^n x^n \right) = \sum_{n=0}^{\infty} \frac{1}{\sqrt{5}} (\phi^n - \psi^n) x^n \]

由于 \(G(x) = \sum_{n=0}^{\infty} F_n x^n\),比较系数,我们立即得到斐波那契数列的比奈公式 (Binet‘s Formula)

\[ F_n = \frac{\phi^n - \psi^n}{\sqrt{5}} \]

这是一个非常漂亮的显式解,直接计算即可,无需递归。

第五步:生成函数的其他类型

除了普通生成函数(OGF),根据不同的应用场景,还有其他类型的生成函数:

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

\[ E(x) = \sum_{n=0}^{\infty} a_n \frac{x^n}{n!} \]

它特别适用于计数与“排列”、“标号结构”相关的问题。例如,序列 \(a_n = 1\) 的指数生成函数是 \(e^x\)。两个指数生成函数的乘积对应着序列的某种组合(如集合的分划与合并)。

  1. 狄利克雷生成函数 (Dirichlet Generating Function)

\[ D(s) = \sum_{n=1}^{\infty} \frac{a_n}{n^s} \]

这在解析数论中极为重要,例如黎曼ζ函数 \(\zeta(s) = \sum_{n=1}^{\infty} \frac{1}{n^s}\) 就是序列 \(a_n=1\) 的狄利克雷生成函数。两个狄利克雷生成函数的乘积对应着数论函数的狄利克雷卷积。

总结

生成函数是一个“桥梁”工具,它将离散的序列连续的函数联系起来。通过这个桥梁:

  • 我们可以用代数运算(求导、积分、乘法)来处理组合结构(选择、排列、递归)。
  • 我们可以用解析方法(复分析、渐近分析)来研究序列的渐近行为
  • 它将复杂的递归关系转化为简单的代数方程求解问题。

从简单的组合计数到深刻的数论问题,生成函数都扮演着不可或缺的角色,是数学中“化繁为简”思想的杰出代表。

好的,我们开始学习一个新的词条: “生成函数” (Generating Function) 。 生成函数是组合数学和离散数学中一个极为强大的工具,它用一种巧妙的方式将序列(通常是无穷序列)编码成一个函数的幂级数系数,从而可以利用函数论和微积分的工具来解决计数、递归关系等离散问题。 第一步:基本概念——什么是生成函数? 想象一下,你有一个无穷数列: \[ a_ 0, a_ 1, a_ 2, a_ 3, \dots \] 这个序列可能代表任何东西:比如抛硬币得到特定正面序列的方式数,或者满足某些条件的结构数量。 生成函数 的核心思想是:我们不再孤立地看待这些离散的数字,而是将它们“打包”成一个幂级数的系数。最常用的是 普通生成函数 (Ordinary Generating Function, OGF) 。 定义 :对于序列 \(\{a_ n\}\),其普通生成函数 \(G(x)\) 定义为: \[ G(x) = a_ 0 + a_ 1 x + a_ 2 x^2 + a_ 3 x^3 + \dots = \sum_ {n=0}^{\infty} a_ n x^n \] 这里,\(x\) 是一个形式变量(我们起初可以暂时忽略它的收敛性,将其视为形式幂级数)。 关键点 :整个序列的信息被完整地“存储”在了函数 \(G(x)\) 中。序列的第 \(n\) 项,就是 \(G(x)\) 展开式中 \(x^n\) 的系数。 第二步:一个简单的例子——理解“生成”的过程 考虑最简单的无穷序列:全是 1 的序列。 \[ a_ n = 1, \quad \text{对于所有 } n = 0, 1, 2, \dots \] 那么它的生成函数是: \[ G(x) = 1 + 1\cdot x + 1\cdot x^2 + 1\cdot x^3 + \dots \] 在中学数学中,我们知道这是一个无穷等比数列求和。当 \(|x| < 1\) 时,它的和有一个简洁的封闭形式: \[ G(x) = \frac{1}{1-x} \] 这是一个非常深刻的结论: 看似复杂的无穷级数,其本质可以是一个简单的有理函数 \(\frac{1}{1-x}\)。这个函数“生成”了我们的序列,因为如果我们用二项式定理或几何级数公式将 \(\frac{1}{1-x}\) 展开,正好就能得到 \(1 + x + x^2 + x^3 + \dots\)。 第三步:生成函数的运算与实用性 生成函数的威力在于我们可以对它们进行代数运算(加、减、乘、求导、积分),而这些运算对应着原始序列的某种组合操作。 例1:序列的平移 假设我们有一个序列 \(\{a_ n\}\),其生成函数为 \(G(x) = \sum a_ n x^n\)。 那么,序列 \(\{a_ {n+1}\}\)(即原序列向左平移一位)的生成函数是多少? \[ \sum_ {n=0}^{\infty} a_ {n+1} x^n = \frac{1}{x} \sum_ {n=0}^{\infty} a_ {n+1} x^{n+1} = \frac{1}{x} (G(x) - a_ 0) \] 这个关系在求解递归方程时至关重要。 例2:序列的卷积 考虑两个序列 \(\{a_ n\}\) 和 \(\{b_ n\}\),它们的生成函数分别为 \(A(x)\) 和 \(B(x)\)。 那么,新序列 \(c_ n = a_ 0 b_ n + a_ 1 b_ {n-1} + \dots + a_ n b_ 0\)(称为序列的卷积)的生成函数是多少? \[ C(x) = A(x) \cdot B(x) \] 证明 : \[ A(x)B(x) = (a_ 0 + a_ 1x + a_ 2x^2 + \dots)(b_ 0 + b_ 1x + b_ 2x^2 + \dots) \] 当我们展开这个乘积时,\(x^n\) 项是如何得到的?它来自于所有满足 \(i+j=n\) 的项 \(a_ i x^i \cdot b_ j x^j\) 的和。因此,\(x^n\) 的系数正好是 \(\sum_ {i=0}^n a_ i b_ {n-i} = c_ n\)。 这个性质是生成函数解决计数问题的核心。例如,如果要计算完成一个两步骤任务的方法数,而第一步有 \(a_ i\) 种方式,第二步有 \(b_ j\) 种方式,那么总共完成整个任务的方法数序列就是这两个序列的卷积,其生成函数就是两个生成函数的乘积。 第四步:应用——求解递归关系 让我们看一个经典例子,斐波那契数列。 斐波那契数列定义为: \[ F_ 0 = 0, \quad F_ 1 = 1, \quad F_ n = F_ {n-1} + F_ {n-2} \quad \text{对于 } n \ge 2 \] 我们的目标是找到一个关于 \(n\) 的显式公式(闭合公式)。 定义生成函数 : 设 \(G(x) = F_ 0 + F_ 1 x + F_ 2 x^2 + F_ 3 x^3 + \dots = 0 + 1\cdot x + F_ 2 x^2 + F_ 3 x^3 + \dots\) 利用递归关系 : 将递归式 \(F_ n - F_ {n-1} - F_ {n-2} = 0\) 两边乘以 \(x^n\) 并对 \(n \ge 2\) 求和: \[ \sum_ {n=2}^{\infty} F_ n x^n - \sum_ {n=2}^{\infty} F_ {n-1} x^n - \sum_ {n=2}^{\infty} F_ {n-2} x^n = 0 \] 利用第三步中的“平移”技巧: \(\sum_ {n=2}^{\infty} F_ n x^n = G(x) - F_ 0 - F_ 1 x = G(x) - x\) \(\sum_ {n=2}^{\infty} F_ {n-1} x^n = x \sum_ {n=2}^{\infty} F_ {n-1} x^{n-1} = x (G(x) - F_ 0) = x G(x)\) \(\sum_ {n=2}^{\infty} F_ {n-2} x^n = x^2 \sum_ {n=2}^{\infty} F_ {n-2} x^{n-2} = x^2 G(x)\) 得到 \(G(x)\) 的方程 : 将上述结果代入方程: \[ (G(x) - x) - x G(x) - x^2 G(x) = 0 \] 解得: \[ G(x) - x G(x) - x^2 G(x) = x \] \[ G(x) (1 - x - x^2) = x \] \[ G(x) = \frac{x}{1 - x - x^2} \] 我们成功地将无穷递归关系转化为了一个简单的有理函数! 部分分式分解与显式公式 : 现在,我们将 \(G(x)\) 分解成我们熟悉的几何级数形式。 \[ G(x) = \frac{x}{1 - x - x^2} \] 首先求分母的根:\(1 - x - x^2 = 0\),解得 \(x = \frac{-1 \pm \sqrt{5}}{2}\)。设 \(\phi = \frac{1+\sqrt{5}}{2}\)(黄金比例),\(\psi = \frac{1-\sqrt{5}}{2}\)。可以验证 \(1 - x - x^2 = -(x+\phi)(x+\psi)\),但更常用的分解是: \[ G(x) = \frac{x}{(1-\phi x)(1-\psi x)} = \frac{1}{\sqrt{5}} \left( \frac{1}{1-\phi x} - \frac{1}{1-\psi x} \right) \] 现在,利用第二步中的几何级数公式 \(\frac{1}{1 - r x} = \sum_ {n=0}^{\infty} r^n x^n\): \[ G(x) = \frac{1}{\sqrt{5}} \left( \sum_ {n=0}^{\infty} \phi^n x^n - \sum_ {n=0}^{\infty} \psi^n x^n \right) = \sum_ {n=0}^{\infty} \frac{1}{\sqrt{5}} (\phi^n - \psi^n) x^n \] 由于 \(G(x) = \sum_ {n=0}^{\infty} F_ n x^n\),比较系数,我们立即得到斐波那契数列的 比奈公式 (Binet‘s Formula) : \[ F_ n = \frac{\phi^n - \psi^n}{\sqrt{5}} \] 这是一个非常漂亮的显式解,直接计算即可,无需递归。 第五步:生成函数的其他类型 除了普通生成函数(OGF),根据不同的应用场景,还有其他类型的生成函数: 指数生成函数 (Exponential Generating Function, EGF) : \[ E(x) = \sum_ {n=0}^{\infty} a_ n \frac{x^n}{n !} \] 它特别适用于计数与“排列”、“标号结构”相关的问题。例如,序列 \(a_ n = 1\) 的指数生成函数是 \(e^x\)。两个指数生成函数的乘积对应着序列的某种组合(如集合的分划与合并)。 狄利克雷生成函数 (Dirichlet Generating Function) : \[ D(s) = \sum_ {n=1}^{\infty} \frac{a_ n}{n^s} \] 这在解析数论中极为重要,例如黎曼ζ函数 \(\zeta(s) = \sum_ {n=1}^{\infty} \frac{1}{n^s}\) 就是序列 \(a_ n=1\) 的狄利克雷生成函数。两个狄利克雷生成函数的乘积对应着数论函数的狄利克雷卷积。 总结 生成函数是一个“桥梁”工具,它将 离散的序列 与 连续的函数 联系起来。通过这个桥梁: 我们可以用 代数运算 (求导、积分、乘法)来处理 组合结构 (选择、排列、递归)。 我们可以用 解析方法 (复分析、渐近分析)来研究序列的 渐近行为 。 它将复杂的递归关系转化为简单的代数方程求解问题。 从简单的组合计数到深刻的数论问题,生成函数都扮演着不可或缺的角色,是数学中“化繁为简”思想的杰出代表。