
生成函数 GF#
定义一个数列 {an} 的生成函数(或母函数)F(x) 为:
F(x)=∑i≥0aixi
这是个无限项的形式幂级数,然而我们实际上只关心有限项。
x 并没有实际意义,只是占位符。这种情况在最初的多项式卷积中就已经见到过了。
将一般的卷积写成生成函数的好处在于方便进一步推导。
简单数列的生成函数#
- {1,1,1,1,1,⋯}
F(x)=∑i≥0xi=xF(x)+1=11−x
- {0,1,2,4,8,⋯}
F(x)=∑i≥02ixi=2xF(x)+1=11−2x
- {1,0,1,0,1,⋯}
F(x)=∑i≥0x2i=11−x2
- {0,1,0,1,0,⋯}
F(x)=∑i≥0x2i+1=x1−x2
斐波那契数列生成函数#
对于 n≥2,有:
fn=fn−1+fn−2
于是可以写成:
F(x)=xF(x)+x2F(x)
然而边界值不能确定,只需要补足 [x1]F(x)=1 即可,于是:
F(x)=xF(x)+x2F(x)+x
整理一下变成:
F(x)=x1−x−x2
设 x1−x−x2=A1−ax+B1−bx
根据上面的举例,可以知道左右两个分式都能写成等比的生成函数,于是:
[xn]F(x)=1√5[(1+√52)n−(1−√52)n]
这个就是斐波那契数列的通项公式了。
普通生成函数 OGF#
用于无标号计数。
F(x)=∑i≥0aixi
当 ai=ki 时,封闭形式:
F(x)=11−kx
一个简单的例子#
有红黄蓝三种球各 m 个,从中共选出 n 个,求方案数。
构造生成函数 G(x)=1+x+x2+⋯+xm,三种球的选择实际上就是乘积贡献到指数和的位置,也就是卷积,于是可以写成:
fn=∑i,j,kgi×gj×gk[i+j+k=n]
生成函数的形式就是:
F=G∗G∗G=G3
范德蒙德卷积#
(n+mk)=k∑i=0(ni)(mk−i)
左侧是 [xk](1+x)n+m,右侧是 [xi](1+x)n×[xk−i](1+x)m
这样一看好像很显然了。
一道题#
CodeForces-438E The Child and Binary Tree *3100
设 gi 为该权值是否在集合中,fi 为权值和为 i 的方案数,写出转移式子:
fn=n∑i=0gin−i∑j=0fj×fn−i−j
就是三个函数卷一下,但是重要的地方在于初始值 f0=1,于是生成函数应该写成:
F=F2G+1
解一下:
F=1±√1−4G2G
分子有理化:
F=21∓√1−4G
G=0 时加号有意义,因此是:
F=21+√1−4G
卡特兰数生成函数#
卡特兰数的一个递推式:
Cn=n−1∑i=0Ci×Cn−i−1
也就是:
C=xC2+1
解完和上一题差不多,是:
C=21+√1−4x
据说再解就出通项了。
指数生成函数 EGF#
用于有标号计数。
F(x)=∑i≥0aixii!
ai=1 的特殊情况:
F(x)=∑i≥0xii!=ex
因此 ai=ki 时:
F(x)=ekx
一个简单的例子#
还是红黄蓝三种球,只不过这次是要出一个排列。
fn=∑i,j,k(ni,j,k)gi×gj×gk[i+j+k=n]
拆开组合数很神奇的是:
fnn!=∑i,j,kgii!×gjj!×gkk![i+j+k=n]
长得很像,同样也是:
F=G3
一道题#
Luogu-P4841 集训队作业 2013 城市规划
常规容斥做法不多赘述。
设 F(x) 为无向连通图个数的生成函数,那么 F(x) 卷多次得到:
G(x)=∑i≥0Fi(x)i!
除以一个 i! 是因为连通块没有顺序区别,而 F(x) 卷积是有顺序区别的。
这个东西和 ex 的泰勒展开很像,也就是:
G(x)=expF(x)
而 G(x)=∑i≥02(i2)xi 是已知的,lnG(x)=F(x) 回来即可。
多项式 exp 与多项式 ln 的组合意义#
通过上面的题实际上已经得出了,一个整体方案数生成函数的 exp 就是任意一个独立整体方案数生成函数(例如上面的连通图与无限制),而 ln 的组合意义就是由 exp 反向得到的。
参考资料#
-
OI Wiki
-
课件 - APJifengc
-
课件 - kai586123
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效