第四讲:生成函数(II)
\[ \require{enclose} \newcommand{circled}[1]{\enclose{circle}{#1}} %\enclose{circle}{\kern .06em 1\kern .06em} \]
\(\stirlingII{n}{k}\) 的生成函数
我们首先来计算第二类斯特林数 \(\stirlingII{n}{k}\) 的生成函数。由于有 \(n\) 和 \(k\) 两个参数,我们需要先固定一个参数,然后把 \(\stirlingII{n}{k}\) 看成关于另外一个参数的数列。当然,这就产生了两种选择,固定 \(n\) 或者固定 \(k\)。一番尝试之后,可以发现如果固定 \(k\) 并把 \(\stirlingII{n}{k}\) 看成关于 \(n\) 的数列,可以更加方便的得到生成函数。因此,我们对于每一个 \(k\),设 \[ S_k(z) = \sum_{n\ge 0} \stirlingII{n}{k}\cdot z^n. \] 我们在第一节课证明了对于 \(n,k\ge 1\),有 \[ \stirlingII{n}{k} = \stirlingII{n-1}{k-1}+k\cdot \stirlingII{n-1}{k}. \] 对边界情况进行简单尝试之后,可以发现,对于任意\(n,k\in \^Z\),有如下递推式成立: \[ \stirlingII{n}{k} = \stirlingII{n-1}{k-1}+k\cdot \stirlingII{n-1}{k}+\^1[n=k=0]. \] 固定\(k>0\),对上式两边同乘\(z^n\),并对所有的\(n\in\^Z\)求和并进行整理,可以得到 \[ S_k(z) = \frac{z}{1-kz}S_{k-1}(z)=\cdots=\frac{z^k}{\prod_{j=1}^k (1-j\cdot z)}. \] 我们现在想来求解\([z^n]S_k(z)\)。一个自然的想法是把\(S_k(z)\)表示成 \[ \begin{equation} S_k(z) = \sum_{j=1}^k \frac{\alpha_j}{1-j\cdot z}, \end{equation} \tag{1}\] 其中 \(\alpha_j\) 是待定系数。现在固定一个\(i\in [k]\),我们用一个技巧来计算\(\alpha_i\):把 (Equation 1) 两边同乘 \((1-i\cdot z)\),可以得到: \[ \alpha_i + \sum_{j\ne i} \alpha_j\frac{(1-i\cdot z)}{1-j\cdot z} = \frac{z^k}{\prod_{j\ne i}(1-j\cdot z)}. \] 再把 \(z = 1/i\) 代入上式,即得: \[ \alpha_i = \frac{1/i}{\prod_{j\ne i}(1-j/i)} = (-1)^{k-i}\frac{1}{(k-1)!i!} = \frac{(-1)^{k-i}}{k!}\binom{k}{i}. \] 所以,我们有 \[ [z^n] S_k(z) = \sum_{i=1}^k i^n \alpha_i = \sum_{i=1}^k i^n \frac{(-1)^{k-i}}{k!}\binom{k}{i} = \frac{1}{k!}\sum_{i=0}^ k (-1)^i \binom{k}{i}(k-i)^n. \] 这和我们之前用容斥原理得到的表达式是一样的。
生成函数的乘积
两个生成函数 \(F(z)=\sum_n f_n z^n\) 和 \(G(z)=\sum_n g_n z^n\)的乘积的系数,是 \(F(z)\) 与 \(G(z)\) 系数的卷积: \[ [z^n](F\cdot G)=\sum_{k}f_kg_{n-k}. \]
卡特兰数(Catalan Number)
卡特兰数是一类在组合数学中经常出现的数字。比如说,给定 \(n\) 个变量相乘($ x_1x_2x_n$),总共有多少种加括号的方式使得其得到不同的运算顺序。我们用 \(c_n\) 来表示这个数。
当 \(n=3\) 的时候,有如下五种加括号的方式。因此 \(c_3=5\)。
- \(((x_0x_1)x_2)x_3\);
- \((x_0(x_1x_2))x_3\);
- \((x_0x_1)(x_2x_3)\);
- \(x_0((x_1x_2)x_3)\);
- \(x_0(x_1(x_2x_3))\).
通过枚举最后一次乘法的位置,我们可以把问题递归的分成左右两个子问题。因此,对于任意 \(n\),我们有递推式: \[ c_n=\sum_{k=0}^{n-1}c_k\cdot c_{n-1-k}+\^1[n=0]. \] 两边同乘 \(z^n\),可以得到 \[ c_nz^n=\sum_{k=0}^{n-1}c_k\cdot c_{n-1-k}z^n+\^1[n=0]z^n. \] 对所有 \(n\) 求和,就有 \[ C(z)=\sum_n c_nz^n =z\sum_n(\sum_{k=0}^{n-1}c_k c_{n-1-k}z^{n-1})+1=zC(z)^2+1. \] 使用边界条件 \(C(0)=c_0=1\),可以得到 \(C(z)=\frac{1-\sqrt{1-4z}}{2z}\)。
广义二项式定理指的是对于任意 \(r\in\^R\),\((a+b)^r=\sum\limits_{k\geq 0}\binom{r}{k}a^kb^{r-k}\),其中 \(\binom{r}{k}\defeq\frac{r(r-1)(r-2)\cdots(r-k+1)}{k!}\)。
我们可以使用广义二项式定理得到 \[ (1-4z)^{\frac{1}{2}}=\sum\limits_{n\geq 0}\binom{\frac{1}{2}}{n}(-4z)^n=1+\sum\limits_{n\geq 1}\binom{\frac{1}{2}}{n}(-4z)^n. \] 因此, \[ \begin{align*} C(z)&=\frac{1-(1-4z)^{\frac{1}{2}}}{2z}=-\frac{1}{2z}\sum\limits_{n\geq 1}\binom{\frac{1}{2}}{n}(-4z)^n\\ &=2\sum\limits_{n\geq 1}\binom{\frac{1}{2}}{n}(-4z)^{n-1}=2\sum\limits_{n\geq 0}\binom{\frac{1}{2}}{n+1}(-4)^nz^n. \end{align*} \] 于是有 \[ \begin{align*} c_n&=[z^n]C(z)=2\binom{\frac{1}{2}}{n+1}\cdot(-4)^n \\ &=2\cdot\frac{\frac{1}{2}(\frac{1}{2}-1)\cdots (\frac{1}{2}-n)}{(n+1)!}\cdot(-2)^n\cdot2^n\\ &=\frac{1\cdot 3\cdot 5 \cdots (2n-1)}{(n+1)!}\cdot 2^n\\ &= \frac{1}{(n + 1) !} 2^n \frac{(2 n) !}{2^n n!} \\ &=\frac{(2n)!}{(n+1)!n!}=\frac{1}{n+1}\binom{2n}{n}. \end{align*} \]
由于卡特兰数满足的这一种递推关系再离散数学中是很常见的,因此,我们在不少场合都能看到 \(c_n=\frac{1}{n+1}\binom{2n}{n}\) 的身影。
卡特兰数的另一个例子是计算 \(n\) 个顶点的二叉树的个数 \(T(n)\)。如右图所示,\(T(3)=5\)。
我们通过枚举树的根是第几个顶点,可以得到 \[ T(n)=\sum{k=0}^{n-1}T(k)T(n-1-k), \] 并且有 \(T(0)=1\)。这正好是卡特兰数的递推式和边界条件,于是 \(T(n)=c_n=\frac{1}{n+1}\binom{2n}{n}\)。
指数生成函数
考虑如下一个递推关系 \[ f(0)=1;\quad \forall n\ge 1\colon f_n = n. \] 显然 \(f(n)=n!\)。但我们尝试使用生成函数的方法来求解。对于任意 \(n\in\^Z\),我们有 \[ f_n=nf_{n-1}+\*1[n=0]. \] 两边同乘 \(z^n\),得到 \[ f_nz^n=nf_{n-1}z^n+\^1[n=0]z^n. \tag{2}\] 注意到 \(F'(z)=\sum_{n}nf_nz^{n-1}\)。因此 \[ z^2F'=\sum_{n}nf_{n-1}z^n -\sum_{n}f_{n-1}z^n =\sum_{n}nf_{n-1}z^n-zF. \] 于是,\(F(z)\) 满足 \(z^2F'+(z-1)F+1=0\)。 这样一个微分方程一般情况下是没有闭式解的。
Graham, Knuth, and Patashnik (1989, 第5章) 给出了一个使用“超几何级数”处理这类微分方程的方法。
为了方便的处理此类递推式,我们引入指数生成函数
。
Definition 1 (指数生成函数) 一个数列 \(\set{f_k }_{ k\geq 0 }\) 的指数生成函数是 \[ \widehat F(z) = \sum_{k\geq 0}\frac{f_k}{k!}\cdot z^k. \]
下面是两个简单的例子:
- \(f_k=k!\), \(\wh F(z)=\sum_{k\geq 0}z^k=\frac{1}{1-z}\);
- \(f_k=1\),\(\wh F(z)=\sum_{k\geq 0}\frac{z^k}{k!}=e^z\)。
我们来用指数生成函数来处理 (Equation 2)。两边除上 \(n!\),可以得到 \[ \frac{f_nz^n}{n!}=\frac{f_{n-1}z^n}{(n-1)!}+\^1[n=0]\cdot \frac{z^n}{n!}. \] 对所有 \(n\) 求和,有 \[ \wh{F}(z)=z\wh{F}(z)+1. \] 于是就可以得到 \(\wh F(z)=\frac{1}{1-z}=1+z+z^2\cdots\). 因此 \(f_n=n!\)。
我们来计算一下两个指数生成函数的乘积。设 \(\wh F(z)=\sum_{n\geq 0}f_n\frac{z^n}{n!}\),\(\wh G(z) = \sum_{n\ge 0} g_n\frac{z^n}{n!}\)。设 \(\wh H(z)=\sum_{n\geq 0}h_n\frac{z^n}{n!}=\wh F(z)\cdot \wh G(z)\). 则有 \[ h_n=n!\sum_{k}\frac{f_k}{k!}\cdot\frac{g_{n-k}}{(n-k)!}=\sum_{k}\binom{n}{k}f_kg_{n-k}. \]
我们再次来考虑生成树计数问题。设 \(t_n\) 为在一个 \(n\) 个(有编号的)顶点的图中生成树的个数。我们来写出 \(t_n\) 的递推式。我们考虑去掉第一个顶点后,生成树变成了多少个连通块。一旦我们固定了 \(m\) 个连通块,我们就只需要在每个连通块里构造一个生成树,然后把它们和第一个顶点连起来。于是,我们有 \[ t_n=\sum\limits_{m>0}\frac{1}{m!}\sum_{k_1+k_2+\cdots k_m=n-1}\binom{n-1}{k_1,k_2\dots k_m}k_1k_2\cdots k_mt_{k_1}t_{k_2}\cdots t_{k_m}. \] 在上式中,我们要求 \(k_i\geq 1\),并且记号 \[ \binom{n-1}{k_1,k_2,\dots ,k_m} \defeq \binom{n-1}{k_1}\binom{n-1-k_1}{k_2}\binom{n-1-k_1-k_2}{k_3}\cdots =\frac{(n-1)!}{k_1!k_2!\cdots k_m!}. \] 直接计算可得 \[ t_n=\sum\limits_{m>0}\frac{1}{m!}\sum\limits_{k_1+k_2+\cdots k_m=n-1}(n-1)!\frac{t_{k_1}}{(k_1-1)!}\frac{t_{k_2}}{(k_2-1)!}\cdots\frac{t_{k_m}}{(k_m-1)!}. \] 设 \(u_n=nt_n\),则有 \[ \frac{u_n}{n!}=\sum_{m>0}\frac{1}{m!}\sum_{k_1+k_2+\cdot k_m=n-1}\prod_{i=1}^m\frac{u_{k_i}}{k_i!}. \] 这说明 \[\begin{align*} [z^n]\wh{U}(z)=[z^{n-1}]\sum_{m\geq 0}\frac{1}{m!}\wh{U}^m(z)=[z^{n-1}]e^{\wh{U}(z)}=[z^n]ze^{\wh{U}(z)}. \end{align*}\] 因此,\(\wh U\) 满足方程 \(\wh{U}=ze^{\wh{U}}\)。
我们使用如下定理:
Theorem 1 (拉格朗日反演定理)
设形式级数 \(\phi(u)\) 满足 \(\phi(0)=1\)。那么存在唯一的形式级数 \(u(z)\) 满足 \(u = z\phi(u)\)。并且对任意 \(n> 0\), \[
[z^n]\tp{u(z)} = \frac{1}{n}[u^{n-1}]\tp{\phi(u)^n}.
\]
这个定理的证明需要一定复分析的知识,可以在 Wilf (2005) 找到。使用这个定理,我们可以得到\([z^n]\wh{U}=\frac{k^{k-2}}{(k-1)!}\)。因此,\(t_n=\frac{u_n}{n}=n^{n-2}\)。 这便是我们之前遇到过的 Cayley 公式。