好的,我们开始学习一个新的词条:“生成函数” (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\) 的狄利克雷生成函数。两个狄利克雷生成函数的乘积对应着数论函数的狄利克雷卷积。
总结
生成函数是一个“桥梁”工具,它将离散的序列与连续的函数联系起来。通过这个桥梁:
- 我们可以用代数运算(求导、积分、乘法)来处理组合结构(选择、排列、递归)。
- 我们可以用解析方法(复分析、渐近分析)来研究序列的渐近行为。
- 它将复杂的递归关系转化为简单的代数方程求解问题。
从简单的组合计数到深刻的数论问题,生成函数都扮演着不可或缺的角色,是数学中“化繁为简”思想的杰出代表。