浅谈生成函数

生成函数

生成函数(generating function),又称母函数,是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。
生成函数有许多不同的种类,但大多可以表示为单一的形式

F(x)=nankn(x)

其中 kn(x) 被称为核函数,不同的核函数会导出不同的生成函数,分成3类

普通生成函数:kn(x)=xnOGF
指数生成函数:kn(x)=xnn!EGF
狄利克雷生成函数:kn(x)=1nxDGF

另外,对于生成函数 F(x),我们用 [kn(x)]F(x) 来表示它的第 n 项的核函数对应的系数,也就是 an

容易发现其中的 x 对于原式中的结果并没有什么影响,我们想要的应该是固定项前面的系数

普通生成函数

形式:

F(x)=nanxn

a 既可以是有穷序列,也可以是无穷序列

若干例子:
序列 a=1,2,3 的OGF:1+2x+3x2
序列 a=1,1,1,,1 的OGF:nxn
序列 a=1,2,4,8,16, 的OGF:n2nxn
序列 a=1,3,5,7,9, 的OGF:n(2n+1)xn

基本运算

考虑两个序列 a,b 的普通生成函数,分别为 F(x),G(x),那么有

F(x)±G(x)=n(an±bn)xn

因此 F(x)±G(x) 是序列 langlean±bn

考虑乘法运算,也就是卷积:

F(x)G(x)=nxni=0naibni

封闭形式

这是OGF比较好玩的一个东西,就是说每次写成一个多项式真的很难受,但是如果能够把这个形式幂级数写成其它的形式可能就会好很多

对于上述例二,容易发现:

xF(x)+1=F(x)

很容易想到移项后可以得到:F(x)=11x
可能会有点疑惑,这个东西怎么还能是负数?
实际上发现,如果要让前面的形式幂级数在 处收敛,x的范围应在 (1,1)
但是还是不需要去理它,因为我们生成函数的本质不在于这个 x 的取值,或者说对于这个封闭形式,只是一种方便推过去和推回来的过程罢了,并不是对原式的具体阐述

有若干种物品 ,每种物品只有1件,求取 n 件物品的总方案数。

每种物品的生成函数是 1×x0+1×x1
那么若干个物品乘起来就是 (x+1)n
然后用二项式定理展开一下就可以得到:

(x+1)n=i=0n(ni)xi

如果学过组合数学就会发现这个确实很对

当然也有比较恶心的

有若干种物品 ,每种物品可以取任意件,求取 n 件物品的总方案数

和上个题一样,每个物品的生成函数是:i=0nxi 很快就能发现,又等于 11x

这样的话 m 件物品的生成函数就是

1(1x)m=(1x)m=i=0m×(m1)(mi+1)i!(x)i=i=0(1)i×m×(m+1)(m+i1)i!(1)ixi=i=0(m+i1)!i!(m1)!xi=i=0(m+i1m1)xi

同时可以用隔板法理解,答案是相同的

来个重头戏:斐波那契数列:

前置知识:

11kx=i=0kixi

F(x) 表示斐波那契数列的生成函数

首先第一步拆分,容易得到:

A=1+1x+2x2+3x3+5x4+8x5xA=         x+1x2+2x3+3x4+5x5x2A=                1x2+1x3+2x4+3x5

容易发现下面两个相加就只和第一个差出来一个数1

AxAx2A=1

整理一下:A=11xx2

然后发现这和上面补充的前置知识太相似了,如果能做到和前面的那个完全一样就好了

然后就是很多套路性的转化了

第一个因式分解,1xx2=(1ix)(1jx)

解得 i=1+52  j=152

但是这时候还是两个 11kx 的卷积,容易发现既然根式都出来了,上面的1也顺路拆了算了

ai+bj=1,得到 a=15i  b=15j
带回原来的式子里,裂项以后拆成一个巨无霸式子:

A=i511ixj511jx

写的更加简便一点:

A=M1ax+N1bx=k=0(Mak+Nbk)xk

同时 M=5i5,N=5j5,a=i,b=j
然后就是前面的基本多项式运算了

F(x)=k=0((5i5)×(1+52)k5j5×(152)k)xk

经过一点点化简就能得到:

x1xx2=n0xn15((1+52)n(152)n)

到这里其实要说的也就差不多了

本文作者:RevolutionBP

本文链接:https://www.cnblogs.com/RevolutionBP/p/16307338.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   RevolutionBP  阅读(516)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑