生成函数简介
生成函数
生成函数(generating function)又称母函数,是处理组合数学问题的一大利器。
普通型生成函数
Definition
对于一个数列 $f=<f_0,f_1,f_2\dots>$ ,构造形式幂级数 $$ F(x) = \sum_{i=0}^{\infty}f_ix^i $$ qi称为数列$f$的普通型生成函数(ordinary generating function, 下简称OGF)。
一些常见的OGF有:
数列 | OGF |
---|---|
$<1,0,0,\dots>$ | $1$ |
$<1,1,1,\dots>$ | $\frac1{1-x}$ |
$<1,2,3,\dots>$ | $\frac1{(1-x)^2}$ |
$<1,-1,1,-1,\dots>$ | $\frac1{1+x}$ |
$<1,2,1,0,0,\dots>$ | $(1+x)^2$ |
$<1,4,6,4,1,0,0,\dots>$ | $(1+x)^4$ |
根据OGF的定义,容易发现OGF的运算和数列运算之间的关系: $$ \begin{aligned} \alpha F(x)+\beta G(x)&=\sum_n(\alpha f_n+\beta g_n)x^n\\ x^mF(x)&=\sum_n[n\geq m]f_{n-m}x^n\\ \frac{F(x)-\sum_{i=0}^{m-1}f_ix^i}{x^m}&=\sum_nf_{n+m}x^n\\ F(cx)&=\sum_nc^nf_nx^n\\ F^\prime(x)&=\sum_n(n+1)f_{n+1}x^n\\ \int_0^xF(t)\mathrm{d}t&=\sum_n[n>0]\frac{f_{n-1}}nx^n\\ F(x)G(x)&=\sum_n\left(\sum_{i=0}^nf_ig_{n-i}\right)x^n \end{aligned} $$ 以上所有公式都是比较显然的,在此不证。
不过特别要注意最后一个式子,即OGF的乘积对应数列卷积。
通过上面的运算规则可以推出下面的式子。
数列 | OGF |
---|---|
$<1,c,c^2,c^3,\dots>$ | $\frac1{1-cx}$ |
$<1,n,\binom n2,\binom n3,\dots>$ | $(1+x)^n$ |
$<1,n,\binom{n+1}2,\binom{n+1}3,\dots>$ | $(1-x)^{-n}$ |
$<0,1,\frac12,\frac13,\dots>$ | $\ln\frac1{1-x}$ |
$<0,1,-\frac12,\frac13,-\frac14,\dots>$ | $\ln(1+x)$ |
$<1,1,\frac12,\frac16,\frac1{24},\dots>$ | $e^x$ |
你会发现以上都是一些看上去很简单的东西。那么生成函数到底哪里厉害了呢?
Examples
注:这里只是简介...所以并没有太多的例子...
Example 1
$$f_n=\begin{cases}n&n\leqslant1\\f_{n-1}+f_{n-2}&n>1\end{cases}$$
简单的Fibonacci数列。
我们令 $F(x)$ 表示其OGF,则 $$ \begin{aligned} F(x)&=\sum_nf_nx^n\\ &=\sum_n(f_n+f_{n-1}+[n=1])x^n\\ &=F(x)+xF(x)+x \end{aligned} $$ 从中我们解出$F(x)=\frac{x}{1-x-x^2}$。然而这有什么用呢?
我们令$\phi=\frac{1+\sqrt5}{2},\hat\phi=\frac{1-\sqrt5}2$,可以计算出$F(x)=\frac{1}{\sqrt5}\left(\frac1{1-\phi x}-\frac1{1-\hat\phi x}\right)$
根据$\frac1{1-cx}=\sum_nc^nx^n$,我们可以知道$f_n=\frac1{\sqrt5}\left(\phi^n-\hat\phi^n\right)$。就是这么简单。
Example 2
Warning!
许多线性递推的例子与上面的$F$相类似,于是我们直接来跳到一个复杂的例子来。
众所周知的Catalan数列的生成函数如何呢?
$$f_n=\begin{cases}1&n=0\\\sum_{i=0}^{n-1}f_if_{n-i-1}&n>0\end{cases}$$
则 $$ \begin{aligned} F(x)&=\sum_n\left([n=0]+\sum_{i=0}^{n-1}f_if_{n-i-1}\right)x^n\\ &=1+x\sum_n\left(\sum_{i=0}^{n-1}f_if_{n-1-i}\right)x^{n-1}\\ &=1+xF^2(x) \end{aligned} $$ 亦即$xF^2-F+1=0$。代入二次方程求根公式,我们可以得到$F(x)=\frac{1\pm\sqrt{1-4x}}{2x}$。
然而$\pm$取哪一个呢?我们发现一个数列$f$的生成函数$F$一定满足$F(0)=f_0$(某些情况下或许应该写成$\lim_{x\to0}F(x)=f_0$)。然而$f_0=1$,这意味着$F(0)=1$。而如果我们令$\pm$取$+$,那么$F(0)=\frac20$是未定义的,这显然不是一个多项式应有的表现。
于是我们得到:Catalan数的生成函数是$\frac{1-\sqrt{1-4x}}{2x}$。这个生成函数令人有点难以置信,我们可以尝试展开它Warning!!!。
展开它的方式是$(x+y)^c=\sum_i\binom cix^iy^{c-i}$在等式右端收敛($\left|\frac xy\right|<1\lor c\in \mathbb N$)的情况下成立。然而生成函数是形式幂级数,这意味着我们不需要考虑收敛性。
于是
$$ \sqrt{1-4x}=\sum_n\binom{\frac12}{n}(-4x)^n $$
$$ \because\binom{\frac12}n=\frac{\frac12(\frac12-1)\dots(\frac12-n+1)}{n!}=\frac{(-1)^{n-1}1\times1\times3\times\dots\times(2n-3)}{2^nn!}=\frac{(-1)^{n-1}(2n-2)!}{2^{2n-1}n!(n-1)!} $$
$$ \therefore\sqrt{1-4x}=\sum_n\binom{\frac12}{n}(-4x)^n=-2\sum_n\frac{(2n-2)!}{n!(n-1)!}x^n $$
这意味着$$\frac{1-\sqrt{1-4x}}{2x}=\sum_n\frac{(2n)!}{n!(n+1)!}x^n$$,正是Catalan数的通项公式。
更多例子请见生成函数(可能有点困难...然而我的Blog里没几道简单题qaq...)。
指数型生成函数
Definition
指数型生成函数(exponential generating function,简称EGF),其定义为
$$ F(x)=\sum_nf_n\frac{x^n}{n!} $$
其意义体现在其乘法操作上: $$ F(x)G(x)=\sum_n\left(\sum_{i=0}^n\binom nif_ig_{n-i}\right)x^i $$ 多出来的$\binom ni$告诉我们它适用于排列的计算(相对于OGF的普通卷积对应组合)。
EGF的运算法则: $$ \begin{aligned} \alpha F(x)+\beta G(x)&=\sum_n(\alpha f_n+\beta g_n)\frac{x^n}{n!}\\ x^mF(x)&=\sum_n[n\geq m]n^{\underline m}f_{n-m}\frac{x^n}{n!}\\ \frac{F(x)-\sum_{i=0}^{m-1}f_ix^i}{x^m}&=\sum_n\frac1{(n+m)^{\underline m}}f_{n+m}\frac{x^n}{n!}\\ F(cx)&=\sum_nc^nf_n\frac{x^n}{n!}\\ F^\prime(x)&=\sum_nf_{n+1}\frac{x^n}{n!}\\ \int_0^xF(t)\mathrm{d}t&=\sum_n[n>0]f_{n-1}\frac{x^n}{n!}\\ F(x)G(x)&=\sum_n\left(\sum_{i=0}^n\binom nif_ig_{n-i}\right)\frac{x^n}{n!} \end{aligned} $$ 同样有一些基本的EGF:
数列 | EGF |
---|---|
$<1,1,1,\dots>$ | $e^x$ |
$<0,1,2,\dots>$ | $xe^x$ |
$<1,c,c^2,\dots>$ | $e^{cx}$ |
$\dots$ | $\dots$ |
好吧你只需要注意到$<f_n>$的EGF实际上就是$<\frac{f_n}{n!}>$的OGF,就能找到不少例子。
那么EGF又有什么作用呢?
Examples
Example 1
贝尔数$\omega_n$是把大小为$n$的子集分割成若干非空不相交子集的方案数。
通过枚举第一个元素所在的子集大小$i$,我们可以得到
$$\omega_n=[n=0]+\sum_{i=1}^n\binom{n-1}{i-1}\omega_{n-i}$$
于是其EGF满足
$$F(x)=1+\int_0^xe^tF(t)\mathrm{d}t$$
两边求导 $$ \begin{aligned} F^\prime(x)&=e^xF(x)\\ \frac{\mathrm{d}F}{\mathrm{d}x}&=e^xF(x)\\ \frac{\mathrm{d}F}F&=e^x\mathrm{d}x\\ \int\frac{\mathrm{d}F}F&=\int e^x\mathrm{d}x\\ \ln F&=e^x+C\\ F&=e^{e^x+C}\\ \end{aligned} $$ 把$F(0)=\omega_0=1$代入即得$F(x)=e^{e^x-1}$。这个多项式的系数可以利用$e^g=\sum_n\frac{g^n}{n!}$计算。
$F(x)=e^{e^x-1}$也可以这样理解:$g(x)=e^x-1$的$n$次项系数是“n个数组成一个非空集合”的方案数(显然),而$g^c(x)$的$n$次项系数(由于EGF对应排列)就是“n个数划分成c个非空集合”的方案数。而由于这$c$个集合是不可区分的,所以要乘上$\frac1{c!}$。于是我们得到$F(x)=\sum_n\frac{g^n(x)}{n!}=e^{g(x)}=e^{e^x-1}$
留坑待填
PS:_rqy太懒了以至于他不想写了
PS2: 已经坑了。