普通生成函数(OGF)
一般用于无标号计数的代数推导。
令形式幂级数
F=∑n=0anxn,则
F 被称为原序列
(a0,a1,a2,…) 的
普通生成函数。
我们可以在一个生成函数
F 和一个序列
(a0,a1,a2,…) 间建立双射关系,这样有利于把序列转成函数来推导。
基本运算
加法:
(A+B)n=An+Bn
标量乘法:
(cA)n=cAn
卷积乘法:
(AB)n=∑i=0nAiBn−i
封闭形式
封闭形式可以理解为把一个函数化为一个等效的数来参与运算。
普通生成函数的常见封闭形式有:
-
∑n=0xn=1−x1
证明:
令
S=∑n=0xn,
则
xS=∑n=1xn
二式相减,得
(1−x)S=1,从而
S=1−x1
-
∑n=kxn=1−xxk
证明:
令
S=∑n=kxn,
则
xS=∑n=k+1xn
二式相减,得
(1−x)S=xk,从而
S=1−xxk
-
∑m=0,n=k+mdxn=1−xdxk
证明:
令
S=∑m=0,n=k+mdxn,
则
xdS=∑m=1,n=k+mdxn
二式相减,得
(1−xd)S=xk,从而
S=1−xdxk
-
∑n=0(1−G)n=G1,其中
G 是一个关于
x 的多项式。
证明:
-
∑n=0(nm)xn=(1+x)m
证明:
其实就是二项式定理。
-
∑n=0(n+1)xn=(1−x)21
证明:
令
F(x)=∑n=0xn=1−x1
求导,得
F′(x)=∑n=0(n+1)xn=(1−x1)′=(−(1−x)21)⋅(−1)=(1−x)21
运用除法法则也可得出相同结果。
-
∑n=0nxn=(1−x)2x
证明:
由
6 中
F′(x)−F(x) 可得
∑n=0nxn=(1−x)21−1−x1=(1−x)2x
-
∑n=0(mn+m)xn=(1−x)m+11
证明:
由
1,当
m=0 时,原式显然成立,故接下来讨论
m≥1 的情况。
考虑数学归纳法,设当前已知
F(x)=∑n=0(m−1n+m−1)xn=(1−x)m1
则
F′(x)=((1−x)m1)′=(−m⋅(1−x)m+11)⋅(−1)=m⋅(1−x)m+11
又
F′(x)=∑n=1(m−1n+m−1)nxn−1
由
(m−1n+m−1)=(mn+m−1)⋅nm,得
F′(x)=∑n=1(mn+m−1)mxn−1=m∑n=0(mn+m)xn
故
∑n=0(mn+m)xn=m1F′(x)=(1−x)m+11
-
∑n=1n1xn=−ln(1−x)
证明:
考虑泰勒展开,即令
F(x)=−ln(1−x),则
F(x)=∑n=0n!F(n)(0)xn=∑n=0n!(n−1)!=∑n=0n1xn
特征方程
例如斐波那契数列
Fib=(0,1,1,2,3,5,…),设其生成函数为
F(x),则
F(x)=x+xF(x)+x2F(x)
解得
F(x)=1−x−x2x
这种形式不便于展开,考虑拆成两项相加形式。
设
1−x−x2x=1−bxa+1−dxc,解得
⎩⎨⎧a=55b=21+5c=−55d=21−5
代回去,得到
F(x)=55(1−21+5x1−1−21−5x1)
展开成形式幂级数,得
F(x)=55∑n=0((21+5)n−(21−5)n)xn
故
Fibn=[xn]F(x)=55((21+5)n−(21−5)n)
指数生成函数(EGF)
一般用于有标号计数的代数推导。
令形式幂级数
F=∑n=0ann!xn,则
F 被称为原序列
(a0,a1,a2,…) 的
指数生成函数。
基本运算
加法:
(A+B)i=Ai+Bi
标量乘法:
(cA)i=cAi
卷积乘法:
(AB)i=∑i=0n(in)AiBn−i
EGF 转 OGF:
Gi=n!1Fi
OGF 转 EGF:
Fi=n!Gi
其中,EGF 与 OGF 的互相转化只是为了将 EGF 的卷积转成普通卷积,方便 NTT 优化。
注意到 EGF 的卷积自带组合数,所以 EGF 能解决有标号问题。相当于如果把一个 EGF 看成一个集合,那么若干 EGF 相乘就相当于把
1∼n 划分到这些集合中,再乘上对应的系数。
封闭形式
-
∑n=0n!xn=ex
证明:
考虑泰勒展开,即令
F(x)=ex,则
F(x)=∑n=0n!F(n)(0)xn=∑n=0n!1xn=∑n=0n!xn
-
∑n=0ann!xn=eax
证明:
同
1,把
xn 换成
(ax)n 即可。
-
∑(nmodd)=kann!xn=d1∑i=0d−1ωd−ikeωdiax
证明:
由单位根反演
[n∣d]=d1∑i=0d−1ωdin,得
[(nmodd)=k]=[(n−k)∣d]=d1∑i=0d−1ωdi(n−k)
故
∑(nmodd)=kann!xn=∑n=0[(nmodd)=k]ann!xn=∑n=0ann!xn⋅d1∑i=0d−1ωdi(n−k)
=d1∑i=0d−1∑n=0ωdi(n−k)ann!xn=d1∑i=0d−1ωd−ikeωdiax
一些运算的组合意义
-
把
n 个有标号的点划分进
m 个有标号的集合:
-
把
n 个有标号的点划分进
m 个无标号的集合:
G=m!Fm
-
把
n 个有标号的点划分进若干个有标号的集合:
G=1−F1
证明:
枚举集合数
i,则
G=∑i=0Fi=1−F1
-
把
n 个有标号的点划分进若干个无标号的集合:
G=exp(F)
证明:
枚举集合数
i,则
G=∑i=0i!Fi=exp(F)
ln(F) 的意义:若
F=exp(G),则
G=ln(F)
从组合意义上来讲,相当于是知道划分后的 EGF,倒推一个集合的 EGF。
想做题了?