生成函数即母函数,是组合数学中尤其是计数方面的一个重要理论和工具。
普通型生成函数 (OGF)
对于一个数列 fn,定义它的普通型生成函数为 F(x)。则:
F(x)=n≥0∑fnxn
fn=[xn]F(x)
基本运算
H(x)=F(x)±G(x)
(n≥0∑fnxn)±(n≥0∑gnxn)=n≥0∑(fn±gn)xn
H(x)=c×F(x)
c×(n≥0∑fnxn)=n≥0∑(cfn)xn
H(x)=F(x)G(x)
(n≥0∑fnxn)(n≥0∑gnxn)=n≥0∑(i=0∑nfign−i)xn
H(x)=F(x−m)
n≥m∑fn−mxn=n≥0∑fnxn+m
H(x)=F(x+m)
n≥0∑fn+mxn=xm∑n≥0fnxn−∑i=0m−1fixi
H(x)=F′(x)
(n≥0∑fnxn)′=n≥0∑((n+1)fn+1)xn
H(x)=∫F(x)dx
∫(n≥0∑fnxn)dx=n>0∑nfn−1xn+C
H(x)=F(cx)
n≥0∑fn(cx)n=n≥0∑(cnfn)xn
常见 OGF
常见的 OGF 通常可以用一个更加简单的式子代替,这个式子被称为其闭形式。
xm
n≥0∑[n=0]xnn≥0∑[n=m]xn=1=xm
(1+x)m
n≥0∑xnn≥0∑(n+1)xnn≥0∑(−1)nxnn≥0∑(nm)xnn≥0∑(nn+m−1)xn=1−x1=(1−x)21=1+x1=(1+x)m=(1−x)−m
e 相关
n>0∑n1xnn>0∑n−(−1)nxnn≥0∑n!1xn=ln1−x1=ln(1+x)=ex
一些 OGF
Fibonacci
fn=⎩⎨⎧nfn−1+fn−2n≤1n>1
F(x)=n≥0∑fnxn=x+n>0∑(fn+fn−1)xn+1=x+xF(x)+x2F(x)
F(x)=1−x−x2x=(1−21−5x)(1−21+5x)x=5(1−21+5x1−1−21−5x1)
F(x)fn=n≥0∑fnxn=5(21+5)n−(21−5)n
前缀和
sn=i=0∑nfi
S(x)=n≥0∑snxn=n≥0∑(i=0∑nfi)xn=i≥0∑(fin≥i∑xn)=i≥0∑(fi1−xxi)=1−x1i≥0∑fixi=1−x1F(x)
Catalan
cn=⎩⎨⎧1∑i=0n−1cicn−i−1n=0n>0
C(x)=n≥0∑cnxn=1+n≥1∑(i=0∑n−1cicn−i−1)xn=1+xm≥0∑(i=0∑mcicm−i)xm=1+xC2(x)
C(x)=2x1−1−4x
1−4x=(1−4x)21=n≥0∑(n21)(−4x)n=1+n>0∑n!(21)n(−4x)n=1+n>0∑2nn!(−1)n−1(1×3×⋯×(2n−3))(−4x)n=1+n>0∑2nn!(2×4×⋯×(2n−2))(−1)n−1(2n−2)!(−4x)n=1+n>0∑22n−1n!(n−1)!(−1)n−1(2n−2)!(−4x)n=1−2n>0∑n!(n−1)!(2n−2)!xn
C(x)=2x1−1−4x=2x1−(1−2∑n>0n!(n−1)!(2n−2)!xn)=n≥0∑(n+1)!n!(2n)!xn=n≥0∑n+1(n2n)xn
应用
OGF 可以用来解决一些无标号组合计数问题。
用 an 表示选 n 件 A 物品的方案数,用 bn 表示选 n 件 B 物品的方案数,用 cn 表示一共选 n 件 A 或 B 物品的方案数,则有 cn=∑i=0naibn−i。
那么,换个写法就是:
C(x)=A(x)B(x)
把每条限制用一个生成函数表示,然后把这十个 OGF 相乘即可。
每一个正整数 m 都对应着一个生成函数 Fm(x)=∑n≥0xnm=1−xm1。
所以有:
F(x)=n>0∏1−xn1
根据五边形数定理:
n>0∏(1−xn)=m≥0∑(−1)mx2k(3k±1)=1−x−x2+x5+x7−x12−x15+⋯
又有 F(x)∏n>0(1−xn)=1:
F(x)−xF(x)−x2F(x)+x5F(x)+x7F(x)−x12F(x)−x15F(x)+⋯=1
F(x)=1+xF(x)+x2F(x)−x5F(x)−x7F(x)+x12F(x)+x15F(x)−⋯
则有:
fn=[n=0]+fn−1+fn−2−fn−5−fn−7+fn−12+fn−15−⋯
由于五边形数 2k(3k±1) 只有 O(n) 个,因此可以 O(nn) 解决此问题。
指数型生成函数 (EGF)
对于一个数列 fn,定义它的指数型生成函数为 F(x)。则:
F(x)=n≥0∑n!fnxn
OGF 可以用来解决一些无标号组合计数问题,相对地 EGF 可以用来解决一些有标号排列计数问题。原理是在有标号的情况下,每次先除掉 n! 使其变成无标号,所有 EGF 相乘之后再乘上 n! 即可变成有标号,本质上是一个多重组合数。
基本运算
H(x)=F(x)G(x)
(n≥0∑n!fnxn)(n≥0∑n!gnxn)=n≥0∑(i=0∑nn!fign−i)xn=n≥0∑n!∑i=0nfign−ixn
常见 EGF
e 相关
n≥0∑n!1xnn≥0∑[nmod2=0]n!1xnn≥0∑[nmod2=1]n!1xn=ex=2ex+e−x=2ex−e−x
一些 EGF
排列
n≥0∑n!n!xn=1−x1
圆排列
n>0∑n!(n−1)!xn=n>0∑n1xn=ln1−x1
注意到 eln1−x1=1−x1,发现排列和圆排列之间有关联。
集合 EGF
若一个集合 A 是由若干个集合 B 组合而成的,那么 A(x)=eB(x),其中 A(x),B(x) 分别为 A,B 的 EGF。
排列(置换)正是由若干个圆排列(轮换)组合而成的,因此有上面的关联。
错位排列
错位排列实际上就是去掉大小为 1 的圆排列后再进行组合。
eln1−x1−x=1−xe−x
有标号无向连通图(无重边无自环)
有标号无向图:
n≥0∑2(2n)xn
有标号无向图可以看成有标号无向连通图组合而成的,因此后者的 EGF 为:
ln(n≥0∑2(2n)xn)
参考资料
评论
暂无已公开评论。