普通生成函数

Why so vegetable?


OGF

普通生成函数,也叫OGF,用函数生成数列,一个函数 F 的麦克劳林展式的各系数对应一个数列 f,如x+1 对应于 (1,1,0,,0,)11x 对应于 (1,1,,1,)


一些简单的运算:

  • 两个函数的线性组合对应于两个序列的线性组合,即 aF(x)+bG(x)=(afn+bgn)xn

  • 乘以 xm 对应于右移一个序列 m 项,xmF(x)=fnmxn

  • 向左移一个序列 m 项,F(x)f0f1xf2x2...xm=fn+mxn

  • 序列的前缀和为 11xf(x)。证明的话展开即可。


一些有用的序列:

  • 二项式序列 ((n0),(n1),(n2),...)(1+x)n 生成。

  • 调和级数 (0,1,12,13,...)ln(1x) 生成。

  • F(x)+()F(x) 用于提取偶数(奇数)项。


用生成函数进行递推:先找递推式,两边用 F 代换,解出 F 的生成函数即可。

比如斐波那契数列,fi=fi1+fi2。(f0=0f1=1

找出关系 fi=fi1+fi2+[i=1]

F(x)=fixi=(fi1+fi2+[i=1])xi=xF(x)+x2F(x)+x

所以 F(x)=x1xx2。使用 Bostan-Mori 应该就可以了。亦可多项式除法。

在解关于 F(x) 的方程时,如果很难解,可以考虑用多项式的牛顿迭代法。

再比如 catalan 数列 fn=fkfnk1,f0=1,f1=1

n1n<0 的情况,原式成立。n=0 时不成立。

我们改写一下这个式子,使之不依赖两个给定的初值:fkfnk1+[n=0]

F(x)=fixi=(fkfik1+[i=0])xi

F(x)=fkxkfi1kxik+1=F(x)xF(x)+1

用求根公式解出 F(x)=1+()14x2x

这里应该取负号(?)

例题


有两个组合对象构成的集合 AB,定义 CAB 的并集,那么有C(x)=A(x)+B(x)。定义 DAB 的笛卡尔积,定义有序对 d=(a,b) 的大小 |d|=|a|+|b|,那么有 D(x)=A(x)B(x)

现在有一个组合对象构成的集合 A,定义 SEQAA 中元素排成的序列(n 元笛卡尔积)组成的集合,一个序列的大小定义为各元素大小之和,如 A={0,1}SEQ 表示 01 串。则 SEQA=1+A1+A2+...=11A(x)

例子是背包问题。我们在 link 中已经探讨过了。


EGF

指数生成函数,也叫 EGF,一个函数 F 的麦克劳林展式的各系数对应一个数列 f,其中 F(x)=n=0+fnxnn!。叫指数生成函数的原因是 ex 对应序列 (1,1,1,)


一些简单的运算

  • 两个函数的线性组合对应于两个序列的线性组合,即 aF(x)+bG(x)=(afi+bgi)xii!

  • 一次积分对应于右移序列一项,即 F(x)dx=n=1+fn1xnn!

  • 一次求导对应左移序列一项,即 F(x)=n=0fn+1xnn!

  • H(x)=F(x)G(x),即 hi=i=0+i!j=0ifjgijj!(ij)!=i=0+j=0ifjgij(ij)所以要么你就带着 1i! 卷积,要么改一下这个函数直接 FFT


现在来考虑 EGF 的组合意义。有一个带标号组合对象构成的集合 A,定义 SEQA 是A中元素任意拼接的序列组成的集合(拼接时考虑顺序)。

SEQA(x)=1+A+A22!+...=eA

这个有很大的应用面,比如求如一个带标号的简单无向图是若干个连通分量拼接成的方案数。令 G 是简单无向图的EGF,C 是简单连通图的EGF,则 G=i=0+2(n2)aii!G(0)=1),且 eC=G,则 C=lnG

但是最后答案要乘 i!,因为这是 EGF。

又如集合划分问题。发现方案数的 EGF 就是 eex1。这就是 Bell 数。

还有第二类斯特林数,S(n,m) 表示将 n 个不同的元素划分成 m 个集合的方案数。

posted @   Saintex  阅读(159)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示