生成函数小结

前置芝士

广义二项式定理

\(\alpha\)是实数,对于所有满足\(0\leq |x| <|y|\)\(x\)\(y\),有

\[(x+y)^\alpha=\sum_{k=0}^{\infty}\dbinom{\alpha}{k}x^ky^{\alpha-k} \]

其中

\[\dbinom{\alpha}{k}=\frac{\alpha(\alpha-1)\cdots (\alpha-k+1)}{k!} \]

泰勒展开

(假设下式中的所有导数均是有意义的)

对于某个函数\(f(x)\),我们可以取一个使其有\(n\)阶导的\(x_0\),并利用\((x-x_0)\)\(n\)次多项式来逼近\(f(x)\).此时下式成立:

\[f(x)=\frac{f(x_0)}{0!}+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f^{(2)}(x_0)}{2!}(x-x_0)^2+\cdots+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n+R_n(x) \]

其中\(f^{(n)}(x)\)\(f(x)\)\(n\)阶导数,\(R_n(x)\)表示余项(事实上由于生成函数都是形式幂级数,我们不需要考虑其在何处收敛,更重要的是一般题目只会要求保留前\(n\)项,所以OI里根本不关心\(R_n(x)\)长啥样.)

\(x_0=0\)时,\(f(x)\)的泰勒展开即为麦克劳林级数,即

\[f(x)=\frac{f(0)}{0!}+\frac{f'(0)}{1!}x+\frac{f^{(2)}(n)}{2!}x^2+\cdots+\frac{f^{(n)}(0)}{n!}x^n+R_n(x) \]

一般生成函数(Ordinary Generating Function)

定义

对于给定的数列\(A\),定义其一般生成函数(Ordinary Generating Function,简称OGF)\(A(x)\)

\[A(x)=\sum_{i\geq 0}A_ix^i \]

例子:
数列\(<1,1,1,\cdots>\)的生成函数为\(1+x+x^2+\cdots\).

数列\(<0,1,2,\cdots>\)的生成函数为\(0+x+2x^2+\cdots\).

运算

对两个生成函数\(F(x),G(x)\).

  • 加(减)法

\[F(x)\pm G(x)=\sum_{i\geq 0}(f_i\pm g_i)x^i \]

  • 数乘

\[cF(x)=\sum_{i\geq 0}(cf_i)x^i \]

  • 乘法

\[F(x)\times G(x)=\sum_{i\geq 0}(\sum_{j=0}^if_jg_{i-j})x^i \]

  • 右移

\[x^mF(x)=\sum_{i\geq m}f_{i-m}x^i \]

  • 左移

\[\frac{F(x)-\sum_{i=0}^{m-1}f_ix^i}{x^m}=\sum_{i\geq 0}f_{i+m}x^i \]

  • 求导

\[F'(x)=\sum_{i\geq 0}(i+1)f_{i+1}x^i \]

  • 积分

\[\int F(x){\rm d}x=\sum_{i>0}\frac{f_{i-1}}{i}x^i+C(C为常数) \]

常见序列的OGF

根据上述运算法则,我们可以找到一些有着特殊性质的数列的OGF.

一个常数序列

考虑数列\(<1,1,1,1,1>\)的OGF,它是\(1+x+x^2+x^3+x^4\).

发现它有点像等比数列求和的形式,那么能不能把它按照等比数列求和公式写成\(\frac{1-x^5}{1-x}\)呢?

虽然看起来这时\(x=1\)时这个函数是无意义的,但是由于生成函数本质上是形式幂级数,所以我们并不关心它在何处收敛。我们只考虑这个函数的麦克劳林级数即可。

将上面的结论推广可以得到数列\(<1,1,1,\cdots>\)的OGF为\(\frac{1}{1-x}\).

更多的OGF

继续推广上面的结论,可以得到数列\(<1,a,a^2,\cdots>\)的OGF为\(\frac{1}{1-ax}\).

考虑一下\((\frac{1}{1-x})^2\)是什么,它可以看成是两个\(1+x+x^2+\cdots\)的乘积,那么新函数的第\(i\)项的系数等价于将\(i\)拆成两个非负整数的和的方案数,也就是说新函数是数列\(<1,2,3,\cdots>\)的生成函数。

继续推广下去,\(\frac{1}{(1-x)^m}\)可以看成\(m\)\(1+x+x^2+\cdots\)的乘积,故\(x^i\)的系数为将\(i\)拆分为\(m\)个非负整数之和,也就是\(\dbinom{i+m-1}{i}\).再把\(x\)代换为\(ax\),就有了这个式子:

\[(\frac{1}{1-ax})^m=\sum_{i\geq 0}\dbinom{i+m-1}{i}x^i \]

然后拿一些东西带进去就会有一些好玩的东西:

\[\sum_{i\geq 0}(i+1)x^i=\frac{1}{(1-x)^2}\\ \sum_{i\geq 0}(-1)^ix^i=\frac{1}{1+x}\\ \]

最后还有一个\(<1,\frac{1}{2},\frac{1}{3},\cdots>\),它的生成函数是\(-\ln(1-x)\),证明的话考虑将后面那个Taylor展开即可。

例题

求数列\(<0,1,4,\cdots,n^2,\cdots>\)的生成函数

令所求的生成函数为\(F(x)\), 则有

\[\begin{aligned} F(x)=&\sum_{i\geq 0}i^2x^i\\ xF(x)=&\sum_{i\geq 1}(i-1)^2x^i\\ (1-x)F(x)=&\sum_{i\geq 1}(2i-1)x^i\\ =&2\sum_{i\geq 1}ix^i-\sum_{i\geq 1} x^i\\ =&\frac{x}{(1-x)^2}-\frac{x}{1-x}\\ =&\frac{x(x+1)}{(1-x)^2} \end{aligned} \]

最后可以得到

\[F(x)=\frac{x(x+1)}{(1-x)^3} \]

利用OGF求数列的通项

Fibonacci数列

已知Fibonacci数列的递推式为:

\[f_n= \begin{cases} 0 & n=0\\ 1 & n=1\\ f_{n-1}+f_{n-2} & n>1 \end{cases} \]

求数列\(f_n\)的生成函数\(F(x)\).

\[\begin{aligned} F(x)=&\sum_{i\geq 0}f_ix^i\\ =&x+\sum_{i>1}(f_{i-1}+f_{i-2})x^i\\ =&x+\sum_{i\geq 0}f_i x^{i+1}+\sum_{i\geq 0}f_ix^{i+2}\\ =&x+xF(x)+x^2F(x) \end{aligned} \]

解得\(F(x)=\frac{1}{1-x-x^2}\).

看起来我们的确完成了任务,但是这个封闭形式除了长的短以外毫无作用。

注意到那些形如\(\frac{1}{1-ax}\)的生成函数我们是能够很好的展开的,于是考虑将这个封闭形式写成若干个乘积。

\(\phi=\frac{1+\sqrt 5}{2},\hat{\phi}=\frac{1-\sqrt5}{2}\),则分母有\(1-x-x^2=(1-\phi x)(1-\hat{\phi} x)\),之后我们假设\(F(x)=\frac{A}{1-\phi x}+\frac{B}{1-\hat{\phi}x}\),最终解得\(F(x)=\frac{1}{\sqrt 5}(\frac{1}{1-\phi x}-\frac{1}{1-\hat{\phi} x})=\frac{1}{\sqrt 5}\sum_{i\geq 0}(\phi^i-\hat{\phi}^i)x^i\).

求解某些组合计数问题

生成函数在求解选取某些物品的方案数时有一些神奇的效果。

例题:有\(A.B,C,D\)四种物品,假设每种都有无限个,现在要求恰好拿出\(n\)个,其中\(A\)必须拿偶数个,\(B\)必须拿\(5\)的倍数个,\(C\)至多能拿\(4\)个,\(D\)至多能拿\(1\)个,求方案数。

解:分别记拿\(A,B,C,D\)四种物品拿\(n\)个的方案数的生成函数为\(A(x),B(x),C(x),D(x)\).那么显然有:

\[A(x)=1+x^2+x^4+\cdots=\frac{1}{1-x^2}\\ B(x)=1+x^5+x^{10}+\cdots=\frac{1}{1-x^5}\\ C(x)=1+x+x^2+x^3+x^4=\frac{1-x^5}{1-x}\\ D(x)=1+x \]

记最终答案的生成函数为\(F(x)\),根据组合意义发现有\(F(x)=A(x)B(x)C(x)D(x)=\frac{1}{(1-x)^2}=1+2x+3x^2+\cdots\).也就是\([x^n]F(x)=n+1\),故最终的答案就是\(n+1\).

指数生成函数(Exponential Generating Function)

引入及定义

考虑一下上面那个数数题,我们认为\(F(x)\)是简单的四个生成函数相乘的结果,是因为在这里我们认为顺序影响结果,我们只关心每一类物品选了多少个。举个例子,假设某个\(n=3\)的方案依次选了2个\(A\)物品和1个\(B\)物品,那么无论\(B\)在两个\(A\)之前还是之后都是同一种方案。那么假设题目开始考虑这一种情况了呢?

考虑一种只有\(2\)个物品且无限制的情况:假设我们当前选了\(n\)\(A\)物品和\(m\)\(B\)物品,那么最终是有\(n+m\)个物品的,考虑把这看成一个长\(n+m\)的序列,则有\(n\)个位置上是物品\(A\),所以在两种物品的方案数相乘的同时还有一个组合数的贡献。具体的,我们记选A物品和选B物品的方案数分别是\(f_i,g_i\),最终答案的\(h_i\),则有

\[\begin{aligned} h_i=&\sum_{j=0}^i\dbinom{i}{j}f_jg_{i-j}\\ h_i=&\frac{i!}{j!(i-j)!}f_jg_{i-j}i \\ \frac{h_i}{i!}=&\frac{f_j}{j!}\frac{h_{i-j}}{(i-j)!} \end{aligned} \]

我们发现,如果能把\(i!\)也看成是\(x^i\)的一部分的话,那么它们的生成函数的乘法依然和最开始的OGF是一致的,这就引出了指数生成函数(Exponential Generating Function,简称EGF).

对于给定的数列\(A\),定义其指数型生成函数\(A(x)\)为:

\[ A(x)=\sum_{i\geq 0}\frac{A_i}{i!}x^i \]

运算

\(F(x),G(x)\)分别是数列\(f_i,g_i\)的EGF.

  • 加(减)法

\[ F(x)\pm G(x)=\sum_{i\geq 0}(f_i+g_i)\frac{x^i}{i!} \]

  • 数乘

\[ cF(x)=\sum_{i\geq 0}cf_i\frac{x^i}{i!} \]

  • 乘法

\[ F(x)G(x)=\sum_{i\geq 0}(\sum_{j=0}^i\dbinom{i}{j}f_jg_{i-j})x^i \]

  • 左移(?)

\[x^mF(x)=\sum_{i\geq m} f_{i-m}\frac{x^i}{(i-m)!}=\sum_{i\geq m}f_{i-m} \frac{x^i}{i^{\underline{m}}} \]

其中有\(n^{\underline{m}}=n(n-1)\cdots(n-m+1)\).

  • 右移(?)

\[\frac{F(x)-\sum_{i=0}^{m-1}f_ix^i}{x^m}=\sum_{i\geq 0}f_{i+m}\frac{x^i}{(i+m)!}=\sum_{i\geq 0}f_{i+m}\frac{1}{(i+m)^{\underline{m}}}\frac{x^i}{i!} \]

  • 求导

\[F'(x)=\sum_{i\geq 0}\frac{f_{i+1}}{(i+1)!}(i+1)x^i=\sum_{i\geq 0}f_{i+1}\frac{i!}{i!} \]

  • 积分

\[\int F(x){\rm d}x=\sum_{i>0}\frac{f_i}{i!(i+1)}x^{i+1}+C=\sum_{i<0} f_i\frac{x^{i+1}}{i+1}+C(C为常数) \]

注意到,由于在OI中我们存储EGF时一般存的都是\(\frac{f_n}{n!}\),所以要想实现\(f_n\)的左移和右移需要借助求导和积分。

常见数列的EGF

注意数列\(f_n\)的EGF和数列\(\frac{f_n}{n!}\)的OGF是等价的。

\[ <1,1,1,1,\cdots>\to e^x \\ <1,0,1,0,\cdots>\to \frac{e^x+e^{-x}}{2} \\ <0,1,0,1,\cdots>\to \frac{e^x-e^{-x}}{2} \\ \]

利用EGF解决某些简单的组合问题

不要忘记EGF是考虑不同种物品之间的顺序的,相对应的,OGF并不考虑。

例:用红、白、蓝三种颜色给\(1\times n\)的格子染色,要求红色格子的数目是偶数,且至少有一个格子是蓝色的方案数\(f_n\).

解:记\(f_n\)的EGF为\(F(x)\).仿照OGF的例题,我们将三种颜色的方案数的生成函数乘起来。

\[\begin{aligned} F(x)=&(1+\frac{x^2}{2!}+\frac{x^4}{4!}+\cdots)(1+\frac{x}{1!}+\frac{x^2}{2!}+\cdots)(\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdots)\\ =&(\frac{e^x+e^{-x}}{2})e^x(e^x-1)\\ =&\frac{e^{3x}-e^{2x}+e^x-1}{2}\\ =&-\frac{1}{2}+\sum_{i\geq 0}\frac{3^n-2^n+1}{2}\frac{x^n}{n!} \end{aligned} \]

故最终有

\[f_n= \begin{cases} 0 & n=0\\ \frac{3^n-2^n+1}{2} & n>0\\ \end{cases} \]

集合的EGF

考虑这样的问题:我们需要数集合\(S\)中元素的数量,但是集合\(S\)是由集合\(A\)中的元素拼接而成的。假设我们已知集合\(A\)中元素的生成函数,那么集合\(S\)的生成函数为(下式的\(A,S\)均表示函数)

\[S=e^A \]

例:求\(n\)个点的无向有标号连通图的数量\(f_n\), 要求无重边无自环。

解:记\(n\)个点的无向图的数量为\(g_n\). 由于\(n\)个点的无向图中最多有\(\dbinom{n}{2}\)条边,每条边的存在与否都会影响到方案,故有:

\[ g_n=2^{\dbinom{n}{2}} \]

分别记\(f_n,g_n\)的生成函数为\(F(x),G(x)\),由于无向图可以看成是若干个无向连通图拼在一起形成的,故:

\[ G(x)=e^{F(x)} \]

两边同时取\(\ln\)

\[F(x)=\ln G(x) \]

至于多项式如何取\(\ln\), 并不是本文的重点。可以自行上网百度

参考资料

posted @ 2020-04-08 00:05  EncodeTalker  阅读(390)  评论(1编辑  收藏  举报