生成函数

ref:

佬的博客

x义x的博客

写在前面

有很多方法可以从一个级数生成一个数列,一般来说,只要选取\(K_n(z)\)满足

\[\sum\limits_{n}g_nK_n(z)=0\Rightarrow \forall n,g_n=0 \]

即可。

一般来说,若无特别定义,下指标为负的部分全为\(0\)

写GF要特别注意位置\(0\)

在一定语境中,\(G(z)\)会简写为\(G\)

和多项式之间

联系密切,因为生成函数化出来的东西要使用多项式技术去实现。

这二者都是形式幂级数:\(\sum\limits_{n\ge 0}a_nz^n\),我们不必考虑其收敛性。

在上面可以定义各种运算。特别地,\(\exp\)\(\ln\)使用了麦克劳林展开来定义。

\[\begin{aligned} \exp(F)&=\sum\limits_{n\ge 0}\dfrac{F^n}{n!}\\ \ln(F+1)&=\sum\limits_{n\ge 1}(-1)^{n+1}\dfrac{F^n}{n} \end{aligned} \]

可以验证\(F\)的乘法逆存在当且仅当\(f_0\ne 0\),若存在则唯一。

OGF的\(k\)次幂的组合意义

\[\begin{aligned} F^k&=\sum\limits_{n\ge 0}\Big[\sum\limits_{\sum\limits_{1\le t\le k} a_t=n}\prod\limits_{1\le j\le k}f_{a_j}\Big]z^n \end{aligned} \]

EGF的\(k\)次幂的组合意义

\[\begin{aligned} \hat F^k&=\sum\limits_{n\ge 0}\Big[\sum\limits_{\sum\limits_{1\le t\le k} a_t=n}\dbinom{n}{a_1,a_2,\dots,a_k}\prod\limits_{1\le j\le k}\dfrac{f_{a_j}}{a_j!}\Big]\dfrac{z^n}{n!} \end{aligned} \]

\(n\)有标号元素分到\(k\)有标号集合中形成具有特殊性质的组合结构的方案数的EGF。

EGF的\(\exp\)的组合意义

我们给EGF中的系数赋予一个组合意义:\(f_k\)表示将\(k\)个元素构成具有特殊性质的组合结构的方案数(比如说构成DAG,构成二叉树etc.)。

\(F_k(n)\)表示将\(n\)个有标号元素划分为\(k\)非空无序集合(无标号)且构成特殊结构的情况的方案数,那么:

\[F_k(n)=\dfrac{n!}{k!}\sum\limits_{\sum\limits_{1\le i\le k} a_i=n}\prod\limits_{1\le j\le k}\dfrac{f_{a_j}}{a_j!} \]

\(\hat F=\sum\limits_{n\ge 0} f_n\dfrac{z^n}{n!}\)\(G_k=\sum\limits_{n\ge 0} F_k(n)\dfrac{z^n}{n!}\)

化一下:

\[\begin{aligned} G_k&=\sum\limits_{n\ge 0} F_k(n)\dfrac{z^n}{n!}\\ &=\sum\limits_{n\ge 0}\dfrac{n!}{k!}\sum\limits_{\sum\limits_{1\le i\le k} a_i=n}\prod\limits_{1\le j\le k}\dfrac{f_{a_j}}{a_j!}\dfrac{z^n}{n!}\\ &=\dfrac{1}{k!}\sum\limits_{n\ge 0}z^n\sum\limits_{\sum\limits_{1\le i\le k} a_i=n}\prod\limits_{1\le j\le k}\dfrac{f_{a_j}}{a_j!}\\ &=\dfrac{1}{k!}\sum\limits_{n\ge 0}\sum\limits_{\sum\limits_{1\le i\le k} a_i=n}\prod\limits_{1\le j\le k}\dfrac{f_{a_j}z^{a_j}}{a_j!}\\ &=\dfrac{1}{k!}\hat F^k \end{aligned} \]

左右两边对\(k\)求和:

\[\sum\limits_{k\ge 0}G_k=\sum\limits_{k\ge 0}\dfrac{1}{k!}\hat F^k=\exp \hat F \]

尝试取第\(n\)项系数看看是什么东西:

\[[z^n]\exp \hat F=\sum\limits_{k\ge 0} [z^n] G_k=\dfrac{1}{n!}\sum\limits_{k\ge 0} F_k(n) \]

就是把\(n\)有标号元素分成若干个 无标号集合,每个集合中形成具有特殊性质的组合结构的方案数的EGF。

大概就这样。太菜了。

Euler变换

还是写在符号化方法吧。

普通生成函数

选取\(K_n(z)=z^n\)

通常记\(A(z)=\sum\limits_{n\ge 0} a_nz^n\)为序列\(\{a_n\}\)的普通生成函数(OGF)。

给出一些容易遗忘的运算:

  • \(z^mG(z)=\sum\limits_{n} g_{n-m}z^n,m>0\)

  • \(\dfrac{G(z)-g_0-g_1z\dots -g_{m-1}z^{m-1}}{z^m}=\sum\limits_{n\ge 0} g_{n+m}z^n,m>0\)

  • \(G(cz)=\sum\limits_{n\ge 0} g_nc^nz^n\)

  • \(G'(z)=\sum\limits_{n}(n+1)g_{n+1}z^n\)

  • \(zG'(z)=\sum\limits_{n}ng_nz^n\)

  • \(\int_0^z G(t)\mathrm d t=\sum\limits_{n\ge 1}\frac{1}{n}g_{n-1}z^n\)

特别的,\([z^n]F(z)G(z)=\sum\limits_{k}f_kg_{n-k}\),相乘就是得到了数列的卷积

特别有用的式子\(\dfrac{1}{1-z}\)\(\{a_n=1\}\)的OGF。

特别有用的运算:

  • \([z^n]\dfrac{1}{1-z}G(z)=\sum\limits_{k\le n} g_k\),即做前缀和

  • \((\dfrac{1}{1-z})^{(n)}\)可以提供形如\(i^{\underline{n}}\)的因子。

  • \([z^n]\dfrac{1}{(1-z)^c}=\dbinom{c+n-1}{n}\),诸如此类。

提取标号为偶数项:\(\dfrac{G(z)+G(-z)}{2}\),提取标号为奇数项:\(\dfrac{G(z)-G(-z)}{2}\)

解递归式

  1. 用数列中其他元素写出一个关于\(n\)单个方程,这个方程应该对所有整数\(n\)成立。可能需要利用艾弗森括号之类的。注意边界。

  2. \(z^n\)乘两边,并在两边对\(n\)求和。左边就是\(G\),右边应该处理成含有\(G\)的式子。

  3. 解方程得到\(G\)的封闭形式。

  4. 提取\(G\)的第\(n\)项系数。

如果解方程得到了多个根,验证\(G(0)=g_0\)是否为正确的数值来舍。

多重卷积

\(\{f_n\}\)\(\{g_n\}\)卷积后再与\(\{h_n\}\)卷积,得到:

\[[z^n]F(z)G(z)H(z)=\sum\limits_{j+k+l=n} f_jg_kh_l \]

更加多重的形式也类似。

特别的,我们关注自己与自己的\(m\)次卷积,得到:

\[[z^n]G^m=\sum\limits_{k_1+k_2+\cdots+k_m=n}g_{k_1}g_{k_2}\cdots g_{k_m} \]

很有用。

指数生成函数

有这个东西是因为有时候\(\{g_n\}\)的OGF很难求,而\(\{\dfrac{g_n}{n!}\}\)的OGF很好求,性质良好。

选取\(K_n(z)=\dfrac{z^n}{n!}\),称之为EGF。

\(\{g_n\}\)的EGF为\(\hat G(z)=\sum\limits_{n\ge 0} g_n\dfrac{z^n}{n!}\)。但同时\(\hat G\)也是\(\{\dfrac{g_n}{n!}\}\)的OGF。

运算:

  • \(z\hat G(z)=\sum\limits_{n\ge 0} g_n\dfrac{z^{n+1}}{n!}=\sum\limits_{n\ge 0} ng_{n-1}\dfrac{z^n}{n!}\)

  • \([z^n]\dfrac{\mathrm d}{\mathrm d z}\hat G(z)=g_{n+1}\),相当于左移。

  • \([z^n]\int_0^z\hat G(t)\mathrm d t=g_{n-1}\),相当于右移。

特别的,\([z^n]\hat F(z)\hat G(z)=\sum\limits_{k}\dbinom{n}{k}f_kg_{n-k}\),称之为数列的二项卷积

\(\{g_n=k^n\}\)的EGF为\(\hat G(z)=\sum\limits_{n\ge 0}k^n\dfrac{z^n}{n!}=e^{kz}\)

多重卷积

大多数时候是自己与自己卷积,不同的EGF进行多重卷积是类似的。

\[[z^n]G^m=\sum\limits_{k_1+k_2+\cdots +k_m=n}\dbinom{n}{k_1,k_2,\cdots,k_m}g_{k_1}g_{k_2}\cdots g_{k_m} \]

通常两边还会继续同除以\(n!\)

Dirichlet生成函数

概率生成函数

符号化方法

符号化方法

posted @ 2024-07-26 23:03  RandomShuffle  阅读(29)  评论(0)    收藏  举报