组合数学:生成函数
递推关系
我们在一个银行账户中存入了 1000 元,该账户每年年底支付 5% 的利息。
每年年初,我们再向该账户存入 500 元。
20 年后,这个账户里会有多少钱?
a_0=1000, a_{n+1}=1.05\cdot a_n+500
a_{20}=?
练习 1 a_0=1000, a_{n+1}=1.05\cdot a_n+500
a_{20}=?
错排问题 (Derangement)
假设 n 个人编号为 1,2,\cdots,n。同时有 n 顶帽子也编号为 1,2,\cdots,n。我们需要找到没有人拿到的帽子编号与自己编号相同的方法数。
设 A_i 为 [n] 的所有排列构成的集合,其中元素 i 位于第 i 个位置,换句话说,元素 i 是固定的。
例如,23541\in A_4。
答案与 \#(\bigcup _{i=1}^{n}A_{i}) 相关。
\#A_i=(n-1)!
集合 A_i\cap A_j 由元素 i 和 j 固定的排列组成,其余 n-2 个项可以自由排列,共有 (n-2)! 种方式。 \#(A_i\cap A_j)=(n-2)!
因此,解为: n!-\left[\binom n1 (n-1)!-\binom n2 (n-2)!+\binom n3 (n-3)!\cdots\right]
或
\sum_{k=0}^{n}(-1)^k\binom nk (n-k)!\quad\text{即}\quad d_n=n!\sum_{k=0}^{n}\frac{(-1)^k}{k!}。
递推方法 假设我们要确定 n 个整数 1,2,\cdots,n 的错排数。
让我们关注元素 k 并将其移至第一个位置。
这样我们就开始了一个错排,因为 1 不在其自然位置。那么 1 可以放在哪里呢?
有两种情况可以考虑:要么 1 在位置 k,要么 1 不在位置 k。
如果 1 在位置 k:
\begin{aligned} 1&2&3&\cdots&k-1&k&k+1&\cdots&n\\ k&?&?&\cdots&?&1&?&\cdots&?\\ \end{aligned}
还有 n-2 个整数需要进行错排。
这可以用 d_{n-2} 种方式完成。
如果 1 不在位置 k:
\begin{aligned} 1&2&3&\cdots&k-1&k&k+1&\cdots&n\\ k&?&?&\cdots&?&?&?&\cdots&?\\ \end{aligned}
现在有 n-1 个整数需要进行错排。
这可以用 d_{n-1} 种方式完成。
综合起来,当 k 在第一个位置时,有 d_{n-1} + d_{n-2} 种可能的错排。
选择元素 k 共有 (n-1) 种不同的方式。
因此, d_n = (n-1)\left[d_{n-1} + d_{n-2}\right]
d_1 = 0 且 d_2 = 1。
普通生成函数
生成函数 (Generating function) 是一个关于一个不定元的形式幂级数,其系数编码了关于由自然数索引的数列 a_n 的信息。
数列 a_n 的普通生成函数 (Ordinary generating function) 是:
G(a_n,x)=\sum_{n=0}^\infty a_nx^n。
例 1 a_0=50, a_{n+1}=4a_n-100。
令 G(x)=\sum_{n=0}^\infty a_nx^n。
\sum_{n=0}^\infty a_{n+1}x^{n+1}=\sum_{n=0}^\infty 4a_{n}x^{n+1}-\sum_{n=0}^\infty 100x^{n+1} G(x)-a_0=4xG(x)-\frac{100x}{1-x}。
G(x)=\frac{a_0}{1-4x}-\frac{100x}{(1-x)(1-4x)}
\frac{a_0}{1-4x}=50\sum_{n=0}^\infty (4x)^n=50\sum_{n=0}^\infty 4^nx^n
\frac{100x}{(1-x)(1-4x)}=-\frac{100/3}{1-x}+\frac{100/3}{1-4x} =\frac{100}{3}\left(\sum_{n=0}^\infty 4^nx^n-\sum_{n=0}^\infty x^n \right)
G(x)=50\sum_{n=0}^\infty 4^nx^n-\frac{100}{3}\left(\sum_{n=0}^\infty 4^nx^n-\sum_{n=0}^\infty x^n \right)
=\sum_{n=0}^\infty \left(50\cdot 4^n-100\cdot \frac{4^n-1}{3}\right)x^n
由于 G(x)=\sum_{n=0}^\infty a_nx^n,
a_n=50\cdot 4^n-100\cdot \frac{4^n-1}{3}。
\sum_{n=0}^\infty x^n=\frac{1}{1-x}
\frac{A}{1-x}+\frac{B}{1-4x}=\frac{100x}{(1-x)(1-4x)}
A(1-4x)+B(1-x)=100x
(-B-4A)x+A+B=100x
\begin{cases} -B-4A=100\\ A+B=0\\ \end{cases}
练习 2 请使用生成函数计算 a_{20}。
a_0=1000
a_{n+1}=1.05\cdot a_n+500
斐波那契数列
斐波那契数 (Fibonacci numbers) 数列 F_n 由以下递推关系定义:
F_n = F_{n-1} + F_{n-2},
初始值为:
F_1 = 1,\; F_2 = 1。
斐波那契数列 的生成函数是幂级数:
G(x)=\sum_{k=0}^{\infty} F_k x^k。
接着 \begin{gather} = F_0 + F_1x + \sum_{k=2}^{\infty} \left( F_{k-1} + F_{k-2} \right) x^k \\ = x + \sum_{k=2}^{\infty} F_{k-1} x^k + \sum_{k=2}^{\infty} F_{k-2} x^k \end{gather}
\begin{gather} = x + x\sum_{k=0}^{\infty} F_k x^k + x^2\sum_{k=0}^{\infty} F_k x^k \\ = x + x G(x) + x^2 G(x)。 \end{gather}
解方程:
G(x)=x+xG(x)+x^2G(x)
得:
G(x)=\frac{x}{1-x-x^2}
练习 3 试求出斐波那契数 F_n 的通项公式 (explicit formula)。
定理 1 前 n 个斐波那契数之和可以表示为:F_{1}+F_{2}+\cdots+F_{n-1}+F_{n}=F_{n+2}-1。
证. \begin{aligned} F_1=F_3-F_2\\ F_2=F_4-F_3\\ F_3=F_5-F_4\\ \cdots\\ F_n=F_{n+2}-F_{n+1}\\ \end{aligned}
F_1+F_2+\cdots+F_{n}=F_{n+2}-F_2=F_{n+2}-1\square
定理 2 斐波那契数列奇数项之和:
F_{1}+F_{3}+F_{5}+\cdots+F_{2n-1}=F_{2n}。
练习 4 你能证明它吗?
定理 3 斐波那契数列偶数项之和: F_{2}+F_{4}+F_{6}+\cdots+F_{2n}=F_{2n+1}-1。
证. F_1+F_2+\cdots+F_{2n}=F_{2n+2}-1 F_1+F_3+\cdots+F_{2n-1}=F_{2n}
F_2+F_4+\cdots+F_{2n}=F_{2n+2}-1-F_{2n}=F_{2n+1}-1\square
定理 4 正负交替的斐波那契数之和:
F_1-F_2+F_3-F_4+\cdots+(-1)^{n+1}F_n=(-1)^{n+1}F_{n-1}+1。
练习 5 你能证明它吗?
定理 5 前 n 个斐波那契数的平方和:
F_1^2+F_2^2+\cdots+F_{n-1}^2+F_n^2=F_n F_{n+1}
证. F_k^2=F_k(F_{k+1}-F_{k-1})=F_k F_{k+1}-F_k F_{k-1}
\begin{aligned} F_1^2=F_1 F_2\\ F_2^2=F_2 F_3-F_1 F_2\\ F_3^2=F_3 F_4-F_2 F_3\\ \cdots\\ F_n^2=F_n F_{n+1}-F_{n-1}F_n\square\\ \end{aligned}
约瑟夫·开普勒 (Johannes Kepler) 观察到,相邻斐波那契数的比值趋于收敛。
该极限趋向于黄金分割比 \varphi。
\lim_{n\to\infty}\frac{F_{n+1}}{F_n}=\varphi。
证. 使用斐波那契规则:
F_n = F_{n-1} + F_{n-2}。
\varphi^2 = \varphi + 1,
\varphi = \frac{1\pm\sqrt{5}}{2}\approx1.618 \text{ 或 } -0.618。\square
指数生成函数 ***
数列 a_n 的指数生成函数 (Exponential generating function) 是:
\operatorname{E}(a_n,x)=\sum _{n=0}^{\infty} a_n \frac{x^n}{n!}。
例 2 设 a_0 = 1,且当 n > 0 时,a_{n+1} = (n + 1)(a_n-n + 1)。试求 a_n 的闭态公式。
指数生成函数为: E(x)=\sum_{n=0}^\infty a_n\frac{x^n}{n!}。
\sum_{n=0}^\infty a_{n+1}\frac{x^{n+1}}{{(n+1)}!}=\sum_{n=0}^\infty a_n\frac{x^{n+1}}{n!}-\sum_{n=0}^\infty (n-1)\frac{x^{n+1}}{n!}
E(x)-1=xE(x)-x^2 e^x+xe^x
E(x)=\frac{1}{1-x}+x e^x=\sum_{n=0}^\infty x^n+\sum_{n=0}^\infty \frac{x^{n+1}}{n!}。
E(x)=\sum_{n=0}^\infty n!\frac{x^n}{n!}+\sum_{n=0}^\infty (n+1)\frac{x^{n+1}}{(n+1)!}。
E(x)=\sum_{n=0}^\infty n!\frac{x^n}{n!}+\sum_{n=0}^\infty n\frac{x^{n}}{n!}。
由于 E(x)=\sum_{n=0}^\infty a_n\frac{x^n}{n!},
a_n=n!+n。
练习 6 设 a_0 = 0。如果 n > 0,则: a_{n+1} = 2(n + 1)a_n+(n+1)!
试求 a_n 的通项公式。
错排问题
从递推式 d_{n+1}=nd_n+nd_{n-1} 开始。定义 d_{-1}=0,这与递推式是一致的。
乘以 \frac{x^n}{n!} 并对 n\ge 0 求和:
\sum_{n\ge 0}d_{n+1}\frac{x^n}{n!}=\sum_{n\ge 0}nd_n\frac{x^n}{n!}+\sum_{n\ge 0}nd_{n-1}\frac{x^n}{n!}。
令 E(x)=\sum_{n\ge 0}d_n\frac{x^n}{n!} 为指数生成函数。
E'(x)=\sum_{n\ge 0}nd_n\frac{x^{n-1}}{n!}=\sum_{n\ge 1}d_n\frac{x^{n-1}}{(n-1)!}=\sum_{n\ge 0}d_{n+1}\frac{x^n}{n!},\qquad
xE'(x)=x\sum_{n\ge 0}nd_n\frac{x^{n-1}}{n!}=\sum_{n\ge 0}nd_n\frac{x^n}{n!},
xE(x)=\sum_{n\ge 0}d_n\frac{x^{n+1}}{n!}\qquad
=\sum_{n\ge 0}(n+1)d_n\frac{x^{n+1}}{(n+1)!}=\sum_{n\ge 1}nd_{n-1}\frac{x^n}{n!}=\sum_{n\ge 0}nd_{n-1}\frac{x^n}{n!}\qquad
因此, E'(x)=xE'(x)+xE(x),\quad \frac{E'(x)}{E(x)}=\frac{x}{1-x}=-1+\frac{1}{1-x},\quad E(x)=\frac{e^{-x}}{1-x}。
E(x)=\left(1+x+x^2+\cdots+x^n+\cdots\right)\cdot
\left(1-\frac{x}{1!}+\frac{x^2}{2!}-\cdots+(-1)^n\frac{x^n}{n!}+\cdots\right)=\sum_{n=0}^\infty \left[1-\frac{1}{1!}+\frac{1}{2!}-\cdots+\frac{(-1)^n}{n!}\right]x^n
d_n=\left[1-\frac{1}{1!}+\frac{1}{2!}-\cdots+\frac{(-1)^n}{n!}\right]\cdot n!