【学习笔记】多项式 4:生成函数

Page Views Count

生成函数 GF#

定义#

定义一个数列 {an} 的生成函数(或母函数)F(x) 为:

F(x)=i0aixi

这是个无限项的形式幂级数,然而我们实际上只关心有限项。

x 并没有实际意义,只是占位符。这种情况在最初的多项式卷积中就已经见到过了。

将一般的卷积写成生成函数的好处在于方便进一步推导。

简单数列的生成函数#

  • {1,1,1,1,1,}

F(x)=i0xi=xF(x)+1=11x

  • {0,1,2,4,8,}

F(x)=i02ixi=2xF(x)+1=112x

  • {1,0,1,0,1,}

F(x)=i0x2i=11x2

  • {0,1,0,1,0,}

F(x)=i0x2i+1=x1x2

斐波那契数列生成函数#

对于 n2,有:

fn=fn1+fn2

于是可以写成:

F(x)=xF(x)+x2F(x)

然而边界值不能确定,只需要补足 [x1]F(x)=1 即可,于是:

F(x)=xF(x)+x2F(x)+x

整理一下变成:

F(x)=x1xx2

x1xx2=A1ax+B1bx

根据上面的举例,可以知道左右两个分式都能写成等比的生成函数,于是:

[xn]F(x)=15[(1+52)n(152)n]

这个就是斐波那契数列的通项公式了。

普通生成函数 OGF#

用于无标号计数。

形式#

F(x)=i0aixi

ai=ki 时,封闭形式:

F(x)=11kx

一个简单的例子#

有红黄蓝三种球各 m 个,从中共选出 n 个,求方案数。

构造生成函数 G(x)=1+x+x2++xm,三种球的选择实际上就是乘积贡献到指数和的位置,也就是卷积,于是可以写成:

fn=i,j,kgi×gj×gk[i+j+k=n]

生成函数的形式就是:

F=GGG=G3

范德蒙德卷积#

(n+mk)=i=0k(ni)(mki)

左侧是 [xk](1+x)n+m,右侧是 [xi](1+x)n×[xki](1+x)m

这样一看好像很显然了。

一道题#

CodeForces-438E The Child and Binary Tree *3100

gi 为该权值是否在集合中,fi 为权值和为 i 的方案数,写出转移式子:

fn=i=0ngij=0nifj×fnij

就是三个函数卷一下,但是重要的地方在于初始值 f0=1,于是生成函数应该写成:

F=F2G+1

解一下:

F=1±14G2G

分子有理化:

F=2114G

G=0 时加号有意义,因此是:

F=21+14G

卡特兰数生成函数#

卡特兰数的一个递推式:

Cn=i=0n1Ci×Cni1

也就是:

C=xC2+1

解完和上一题差不多,是:

C=21+14x

据说再解就出通项了。

指数生成函数 EGF#

用于有标号计数。

形式#

F(x)=i0aixii!

ai=1 的特殊情况:

F(x)=i0xii!=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)=i0Fi(x)i!

除以一个 i! 是因为连通块没有顺序区别,而 F(x) 卷积是有顺序区别的。

这个东西和 ex 的泰勒展开很像,也就是:

G(x)=expF(x)

G(x)=i02(i2)xi 是已知的,lnG(x)=F(x) 回来即可。

多项式 exp 与多项式 ln 的组合意义#

通过上面的题实际上已经得出了,一个整体方案数生成函数的 exp 就是任意一个独立整体方案数生成函数(例如上面的连通图与无限制),而 ln 的组合意义就是由 exp 反向得到的。

参考资料#

  • OI Wiki

  • 课件 - APJifengc

  • 课件 - kai586123

作者:SoyTony

出处:https://www.cnblogs.com/SoyTony/p/Learning_Notes_about_Polynomial_4.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   SoyTony  阅读(210)  评论(5编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示