说实话这东西至少得学一天……
普通型生成函数 OGF
数列
f(x)=ax
的普通型生成函数为
g(x)=∑∞i=0aixi
。
一般来说,
f(x)
是有特殊性质的。它会得到一些特殊的生成函数。在收敛意义下(假设函数会收敛),生成函数有以下计算公式:
∑∞i=0xi=11−x
,即
f(x)=1
的生成函数为
g(x)=11−x
。
∑ni=0Cinxi=(1+x)n
,即
f(x)=Cxn
的生成函数。这其实是二项式定理。
∑∞i=0Cin+i−1xi=1(1−x)n
,即
f(x)=Cxn+x−1
的生成函数。(广义二项式定理)
∑∞i=0(i+1)xi=1(1−x)2
,即
f(x)=x+1
的生成函数。这是上式的特殊情况。
在第一个式子中,将
x
代为其它式子,有:
∑∞i=0xki=11−xk
,即
f(x)=x%k?0:1
的生成函数。
∑∞i=mxi=xm1−x
,即
f(x)=[x≥m]
的生成函数。
∑∞i=0aixi=11−ax
,即
f(x)=ax
的生成函数。
还有一些显然的式子,如:
∑ni=0xi=1−xn+11−x
,即
f(x)=1(x≤n)
的生成函数。
将以上形式进行组合,还可以得到多种生成函数。得到生成函数后,从右反推到左得到原函数。
生成函数的意义在于将复杂的组合问题转化为简单的计算问题。普通型生成函数做组合问题,而指数型生成函数做排列问题。
练习题:求选n个水果的方案数。苹果和香蕉有无限个,但苹果必须成对拿,而香蕉必须五个一组地拿;橘子只有4个,梨只有一个。
设
f(n)
表示选
n
个水果的方案数。将每种水果的生成函数乘起来,有
g(x)=∑i=0∞x2i∑i=0∞x5i∑i=04xi∑i=01xi
=11−x211−x51−x51−x(1+x)
=1(1−x)2
由开篇第四个式子,得
f(x)=x+1
。
求斐波那契数列通项
斐波那契数列的生成函数为
g(x)=x+x2+2x3+3x4+5x5+8x6+...
由数列性质容易推知
x2g(x)+xg(x)+x=g(x)
整理得
g(x)=x1−x−x2
我们需要将生成函数还原。设
g(x)=a1−cx+b1−dx
化简解得参数,于是得到递推式。具体请读者计算。
指数型生成函数 EGF
函数
f(x)=ax
的指数型生成函数为
h(x)=∑∞i=0aixii!
。
新的公式是
∑∞i=0xii!=ex
。同样可以通过代换
x
得到很多公式变形。以下为典型变形:
∑∞i=0x2i(2i)!=ex+e−x2
;
∑∞i=0x2i+1(2i+1)!=ex−e−x2
。
数列{0,1,0,-1,0,1,0,-1….}的指数型生成函数为sin(x),数列{1,0,-1,0,1,0,-1,0….}的指数型生成函数为cos(x)。
练习题:求选n个水果的方案数。苹果、香蕉、橙子、梨都有无限个,但苹果要选奇数个,香蕉要选偶数个。每个水果都不同。
因为是排列问题,所以用指数型生成函数。
h(x)=ex−e−x2ex+e−x2(ex)2
=e4x−14
=∑∞i=14ixii!4
=∑i=1∞4i−1xii!
于是
f(x)=4x−1
。