生成函数
ref:
写在前面
有很多方法可以从一个级数生成一个数列,一般来说,只要选取\(K_n(z)\)满足
即可。
一般来说,若无特别定义,下指标为负的部分全为\(0\)。
写GF要特别注意位置\(0\)。
在一定语境中,\(G(z)\)会简写为\(G\)。
和多项式之间
联系密切,因为生成函数化出来的东西要使用多项式技术去实现。
这二者都是形式幂级数:\(\sum\limits_{n\ge 0}a_nz^n\),我们不必考虑其收敛性。
在上面可以定义各种运算。特别地,\(\exp\)和\(\ln\)使用了麦克劳林展开来定义。
可以验证\(F\)的乘法逆存在当且仅当\(f_0\ne 0\),若存在则唯一。
OGF的\(k\)次幂的组合意义
EGF的\(k\)次幂的组合意义
\(n\)个有标号元素分到\(k\)个有标号集合中形成具有特殊性质的组合结构的方案数的EGF。
EGF的\(\exp\)的组合意义
我们给EGF中的系数赋予一个组合意义:\(f_k\)表示将\(k\)个元素构成具有特殊性质的组合结构的方案数(比如说构成DAG,构成二叉树etc.)。
设\(F_k(n)\)表示将\(n\)个有标号元素划分为\(k\)个非空无序集合(无标号)且构成特殊结构的情况的方案数,那么:
设\(\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!}\)。
化一下:
左右两边对\(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}\)
解递归式
-
用数列中其他元素写出一个关于\(n\)的单个方程,这个方程应该对所有整数\(n\)成立。可能需要利用艾弗森括号之类的。注意边界。
-
用\(z^n\)乘两边,并在两边对\(n\)求和。左边就是\(G\),右边应该处理成含有\(G\)的式子。
-
解方程得到\(G\)的封闭形式。
-
提取\(G\)的第\(n\)项系数。
如果解方程得到了多个根,验证\(G(0)=g_0\)是否为正确的数值来舍。
多重卷积
\(\{f_n\}\)和\(\{g_n\}\)卷积后再与\(\{h_n\}\)卷积,得到:
更加多重的形式也类似。
特别的,我们关注自己与自己的\(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进行多重卷积是类似的。
通常两边还会继续同除以\(n!\)。