生成函数入门

生成函数

毒。

定义:对于一个序列\(\{ a_i \}\),我们构造一个函数取表示它。

\[f(x)=a_0x^0+a_1x+a_2x^2+...+a_n x^n \]

那么其中每个系数 \(a_i\) 也就对应了序列中的 \(a_i\)。显然其中的\(x\)对于整个序列表示并没有什么贡献与影响,那么称这种函数为形式幂级数。

那么为什么我们要这样去定义?

不难发现\(f(x)\)是一个多项式形式的函数,我们需要去借助一下它多项式的性质去完成一些神奇的构造或者运算。

具体应用会举例说明。

普通生成函数

有三种不同物品,同种物品都没有差别,且数量分别为\(3,2,1\),在其中随机拿出四件物品,求方案数。

我们考虑用生成函数去构造解。

对于每种物品构造函数,其中第\(i\)项系数即为当前选了\(i\)件此种物品的方案数。

那么可构造得

\[G1(x)=1+x^1+x^2+x^3 \]

\[G2(x)=1+x^1+x^2 \]

\[G(3)=1+x^1+x^2+x^3 \]

那么显然最终答案为\(G1(x)\ *G2(x)\ *G3(x)\)所得到的多项式\(G(x)\)的第\(4\)项系数。

证明的话,你每一项\(x\)的次数的含义其实就是选择物品的个数,那么每次相乘之后就会有幂次和为\(n\)项的新项并入,代入到题意中也就是选了\(n\)件物品的方案数之和。那么最终\(n\)次的系数其实也就是所要求的\(n\)件物品方案数。

而且这道题很显然也可以用背包解题,而且过程其实和我们多项式相乘的过程极为相似。其原因就在于其实背包就是在模拟多项式乘法,最终乘出来的结果也就是所求。

那么,形如

\[F(x)=\sum\limits_{i=0}^{n}a_ix^i \]

来表示一个序列的函数,我们称为普通生成函数。

那么,我们就可以借助普通生成函数来解决组合类的计数问题。

指数生成函数

与普通生成函数相对的,指数生成函数是用来解决排列类的计数问题。

那么显然,和普通生成函数相比,我们需要考虑的多了一个顺序问题,但也仅仅是一个顺序问题。

我们可以借助多重集排列数的思想去处理。

多重集排列数:
\(s=\{a_1,a_2,a_3...a_n \},N=\sum\limits_{i=1}^{n}a_i ,a_i\)表示的是物品数量。
那么从中选出\(N\)件物品排列的方案数为$\frac{N!}{a_1!a_2!...a_n!} $。

即为把物品任意排列后减去同种物品重复计算的贡献。

那么我们定义函数

\[G(x)=\sum\limits_{i=0}^{n}a_i\frac{x_i}{i!} \]

形如\(G(x)\)的函数用来表示序列,我们称之为指数生成函数。

还是用上面那个题举例,不过换成了排列。那么我们设

\[G1(x)=1+\frac{x^1}{1}+\frac{x^2}{2!}+\frac{x^3}{3!} \]

\[G2(x)=1+\frac{x^1}{1}+\frac{x^2}{2} \]

\[G(3)=1+\frac{x^1}{1}+\frac{x^2}{2!}+\frac{x^3}{3!} \]

那么显然,相乘可得结果

\[G1(x)*G2(x)*G3(x) \]

\[=1+3x+\frac{9}{2}x^2+\frac{14}{3}x^3+\frac{35}{15}x^4+\frac{17}{12}x^5+\frac{35}{72}x^6+\frac{8}{72}x^7+\frac{1}{71}x^8 \]

那么的答案即为\(\frac{35}{12}*4!\),为\(70\)

关于证明的话,我们对于每个系数所构造出的\(i!\)就可以类比为多重排列数里的分母,那么最终乘出来当然也就是所求了。

转化与计算

那么我们考虑更方便地解决问题,就要对式子进行化简。

有一个常用的结论为

\[\sum\limits_{i=0}^{\infty}x^i=\frac{1}{1-x} \]

证明不会。

\[S=1+x+x^2..+x^\infty \\ xS=x+x^2+...+x^\infty \\ S-xS=1 \\ S=\frac{1}{1-x} \]

好,证完了。

有什么用?我们可以对于\(\frac{1}{1-x}\)来变换形式,表示更多的序列。却我们可以得到$\frac{1}{1-x} \(对应的序列的第\)i$项系数为\(1\),那么我们就可以借此把某一序列变成这一形式来得到其通项公式。

那么我们如何通过生成函数来求通项公式?其中一个比较常用的就是广义二项式定理

\[\frac{1}{a-x}^n=\sum\limits_{k=0}^{\infty}C_{n+k-1}^{k-1}x^k \]

我们需要借助它来完成转化。

比如说,求斐波那契数列

那么推导一下

\[A=1+1x+2x^2+3x^3+5x^4+... \]

我们可以得到

\[A=1+1x+2x^2+3x^3+5x^4+... \\ Ax=x+1x+2x^3+3x^4+5x^5+... \\ Ax^2=1x^2+1x^3+2x^4+3x^5+5x^6+... \]

那么即为

\[A-Ax-Ax^2=1 \\ A=\frac{1}{1-x-x^2} \]

那么这就是斐波那契数列的生成函数。

接下来怎么办?

我们已经推导过了
$\frac{1}{a-x} $ 与 $\frac{1}{1-kx} $ 所表示的序列了,那么我们接下来肯定想把$ \frac{1}{1-x-x^2} $往上面两个式子上化。

显然 \(1-x-x^2\) 是一个二次方程,那么我么可以给它配方得到

\[F=1-x-x^2=(1-\frac{1+\sqrt{5}}{2}x)(1-\frac{1-\sqrt{5}}{2}x) \]

我们分别用 \(\phi_{1},\phi_{2}\) 去表示 \(\frac{1+\sqrt{5}}{2},\frac{1-\sqrt{5}}{2}\)

那么我们已经发现了它与 \(1-kx\) 的联系。可以直接把 \(\frac{1}{F}\) 拆成求和的形式,再裂项,可得到 $ \frac{a}{1-\phi_{1}x}+\frac{b}{1-\phi_{2} x}$

解方程

\[a(1-\phi_2x)+b(1-\phi_1x)=1 \\ (a+b-1)-(a\phi_2+b\phi_1)x=0 \]

那么我们只需要解一个二元一次方程组

\[\begin{cases} a+b-1=0\\ a\phi_2+b\phi_1=0 \end{cases} \]

解出来

\[a=\frac{1}{\sqrt{5}}\phi_1\\ b=-\frac{1}{\sqrt{5}}\phi_2 \]

回代,得到

\[A=\frac{\phi_1}{\sqrt{5}}\frac{1}{1-\phi_1x}-\frac{\phi_2}{\sqrt{5}}\frac{1}{1-\phi_2x} \]

\[A_n=\frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})^{n+1}-(\frac{1-\sqrt{5}}{2})^{n+1}) \]

为第\(n\)项的通项公式。

关于指数生成函数,我们也有一个结论

\[e^x=\sum\limits_{i=0}^{\infty}\frac{x^i}{i!} \]

关于证明,我们可以直接把 $ e^x $ 在 \(x_0=0\) 处泰勒展开,最终可得。

由此我们也可以得到一些常用的形式转化

\[e^{-x}=1-\frac{x}{1}+\frac{x}{2!}-\frac{x}{3!}+\frac{x}{4!}+... \\ \frac{e^{x}+e^{-x}}{2}=1+\frac{x^2}{2!}+\frac{x^4}{4!}+\frac{x^6}{6!}+... \\ \frac{e^{x}-e^{-x}}{2}=\frac{x}{1}+\frac{x^3}{3!}+\frac{x^5}{5!}+\frac{x^7}{7!}+... \\ e^{kx}=1+\frac{kx}{1}+\frac{k^2x^2}{2!}+\frac{k^3x^3}{3!}+... \]

好了,那么我们的生成函数最基础最基础的入门知识已经了解了,那么就该授之以1,考之以#?@&*了

这篇博文借鉴了attack巨佬的博文,可以去观赏Dalao的博客小学生都能看懂的生成函数

常用定理与反演

单位根反演

\[[n|k]=\frac{1}{n}\sum\limits_{i=0}^{n-1}{({\omega_n}^{k})}^{i} \]

证明用等比数列求和即可。

二项式定理

\[(x+y)^n=\sum\limits_{k=0}^{n} \binom{n}{k}x^{k}y^{n-k}=\sum\limits_{k=0}^{n} \binom{n}{k}x^{n-k}y^{k} \]

证明不会

后面的先鸽了

posted @ 2022-07-21 17:23  Ztemily  阅读(105)  评论(4)    收藏  举报