Skip to main content

生成函数

参考资料

普通生成函数

序列 aa 的普通生成函数(Ordinary Generating Function,OGF)定义为形式幂级数:

F(x)=nanxnF(x)=\sum_n a_nx^n

换句话说,如果序列 aa 有通项公式,那么它的普通生成函数的系数就是通项公式。

基本运算

考虑两个序列 a,ba,b 的普通生成函数,分别为 F(x),G(x)F(x),G(x)。那么有:

F(x)±G(x)=n(an±bn)xnF(x)\pm G(x)=\sum_n (a_n\pm b_n)x^n

因此 F(x)±G(x)F(x)\pm G(x) 是序列 an±bn\langle a_n\pm b_n\rangle 的普通生成函数。

考虑乘法运算,也就是卷积:

F(x)G(x)=nxni=0naibniF(x)G(x)=\sum_n x^n\sum_{i=0}^na_ib_{n-i}

因此 F(x)G(x)F(x)G(x) 是序列 i=0naibni\langle\sum_{i=0}^n a_ib_{n-i}\rangle 的普通生成函数。

指数生成函数

序列 aa 的指数生成函数(Exponential Generating Function,EGF)定义为形式幂级数:

F^(x)=nanxnn!\hat F(x)=\sum_n a_n\frac{x^n}{n!}

相比普通生成函数多了 n!n! 的分母,因此指数生成函数适合刻画「有标号」组合对象的计数。

基本运算

考虑两个序列 a,ba,b 的指数生成函数,分别为 F^(x),G^(x)\hat F(x),\hat G(x)。那么有:

F^(x)±G^(x)=n(an±bn)xnn!\hat F(x)\pm \hat G(x)=\sum_n (a_n\pm b_n)\frac{x^n}{n!}

因此 F^(x)±G^(x)\hat F(x)\pm \hat G(x) 是序列 an±bn\langle a_n\pm b_n\rangle 的指数生成函数。

考虑乘法运算:

F^(x)G^(x)=nxnn!i=0n(ni)aibni\hat F(x)\hat G(x)=\sum_n \frac{x^n}{n!}\sum_{i=0}^n\binom{n}{i}a_ib_{n-i}

因此 F^(x)G^(x)\hat F(x)\hat G(x) 是序列 i=0n(ni)aibni\left\langle\sum_{i=0}^n\binom{n}{i}a_ib_{n-i}\right\rangle 的指数生成函数。乘法中出现的二项式系数 (ni)\binom{n}{i} 恰对应有标号对象合并时的标号分配方案数。

例题

nn 个点的带标号简单连通无向图的个数,对 10045358091004535809 取模。