在看了好多篇博客,翻阅了几本书后,终于对生成函数有了一点点理解,还请各位和我一样刚入门的同学一起静下心来仔细思考,最好在草稿纸上演算一下
本文面向oier,并没有运用严格的数学语言
对于序列 {ai} { a i } ,它对应的生成函数为
相应的,一个生成函数与一个序列之间应该是唯一对应的,即已知一个序列 {ai} { a i } 可以得到与其对应的唯一的生成函数 G(x) G ( x ) ,而已知一个生成函数 G(x) G ( x ) 可以得到对应的唯一的序列 {ai} { a i }
而我们可以利用这个生成函数中多项式的性质解决一些问题,一般是比较复杂的组合问题
在此之前先介绍一个式子:
11−x=1+x+x2+x3+… 1 1 − x = 1 + x + x 2 + x 3 + …
即 11−x=∑+∞i=0xi 1 1 − x = ∑ i = 0 + ∞ x i
证明:
将分母乘过去:
1=(1−x)∑+∞i=0xi=∑+∞i=0xi−x∑+∞i=0xi=∑+∞i=0xi−∑+∞i=1xi=x0=1 1 = ( 1 − x ) ∑ i = 0 + ∞ x i = ∑ i = 0 + ∞ x i − x ∑ i = 0 + ∞ x i = ∑ i = 0 + ∞ x i − ∑ i = 1 + ∞ x i = x 0 = 1
这个式子在后面会有很大的用处:
我们先用生成函数证明一个定理: ∑ki=0CinCk−im=Ckn+m ∑ i = 0 k C n i C m k − i = C n + m k
这明显可以用定义证明:在 n n 个白球和 m m 个黑球中取 k k 个的方案数为(在 n n 个白球中取 i i 个并在 m m 个黑球中取 k−i k − i 个的方案数)对于 i∈[0,k] i ∈ [ 0 , k ] 的和
但这里用生成函数进行证明:
对于序列 {Cin} { C n i } 的生成函数为 G1(x)=C0n+C1nx+C2nx2+… G 1 ( x ) = C n 0 + C n 1 x + C n 2 x 2 + …
我们知道 (1+x)n ( 1 + x ) n 的式子展开后对应的 xi x i 项的系数为 Cin C n i (这一部分看Pascal三角后理解会更透彻一些)
即这个序列的生成函数等价于 G1(x)=(1+x)n G 1 ( x ) = ( 1 + x ) n ,同样对于序列 {Cim} { C m i } 的生成函数为 G2(x)=(1+x)m G 2 ( x ) = ( 1 + x ) m
原定理中等号左边可视作卷积形式,将等号左边视作一个整体,其生成函数为 G1(x)⋅G2(x)=(1+x)n⋅(1+x)m=(1+x)n+m G 1 ( x ) ⋅ G 2 ( x ) = ( 1 + x ) n ⋅ ( 1 + x ) m = ( 1 + x ) n + m
也就是说等号右边的生成函数为 G3=(1+x)n+m G 3 = ( 1 + x ) n + m
将这个生成函数展开: G3=(1+x)n+m=C0n+m+C1n+mx+C2n+mx2+… G 3 = ( 1 + x ) n + m = C n + m 0 + C n + m 1 x + C n + m 2 x 2 + …
将其中各项系数提出来即为原序列: {Ckn+m} { C n + m k }
即可得证
整理下思路,我们的目的是证明这个式子等号两边相等,则我们可以将 x=1,2,3,… x = 1 , 2 , 3 , … 带进去得到序列 {ai} { a i }
求出式子左边形成数列 {ai} { a i } 和右边形成数列 {bi} { b i } 的生成函数 G1 G 1 与 G2 G 2 ,看是否相等,由于数列与生成函数之间唯一对应,所以只要生成函数相等则原数列相等,即在 x x 取任意值下等号左右两边都相等
建议看完这一段后理一下思路,再看看上下的例题结合理解一下
我们来解决另外一个问题:给定递推式 an=2an−1+1 a n = 2 a n − 1 + 1 求通项公式 an a n ( a1=1 a 1 = 1 )
这个问题在我之前写的一篇博客上有解法:点我
接下来考虑生成函数的解法
设这个序列的生成函数
G(x)=a1x+a2x2+…=∑+∞i=0aixi G ( x ) = a 1 x + a 2 x 2 + … = ∑ i = 0 + ∞ a i x i
转化(其中注意 a0=0 a 0 = 0 )
G(x)=a1x+a2x2+… G ( x ) = a 1 x + a 2 x 2 + …
=(2a0+1)x+(2a1+1)x2+… = ( 2 a 0 + 1 ) x + ( 2 a 1 + 1 ) x 2 + …
=(2a0x+2a1x2+…)+(x+x2+…) = ( 2 a 0 x + 2 a 1 x 2 + … ) + ( x + x 2 + … )
=2x(a1x+a2x2+…)+(x+x2+…) = 2 x ( a 1 x + a 2 x 2 + … ) + ( x + x 2 + … )
记得之前证的式子: 1+x+x2+x3+…=11−x 1 + x + x 2 + x 3 + … = 1 1 − x
即
G(x)=2xG(x)+11−x G ( x ) = 2 x G ( x ) + 1 1 − x
G(x)=1(1−x)(1−2x)=11−2x−11−x G ( x ) = 1 ( 1 − x ) ( 1 − 2 x ) = 1 1 − 2 x − 1 1 − x
即 G(x)=11−2x−11−x=(1+2x+22x2+…)−(1+x+x2+…) G ( x ) = 1 1 − 2 x − 1 1 − x = ( 1 + 2 x + 2 2 x 2 + … ) − ( 1 + x + x 2 + … )
算出每一项系数: an=2n−1 a n = 2 n − 1 ,而这个系数所组成的序列即为所求原序列
得通项公式: an=2n−1 a n = 2 n − 1
再用这种方法求一下斐波那契数列通项公式( an=an−1+an−2,a1=a2=1 a n = a n − 1 + a n − 2 , a 1 = a 2 = 1 )
设生成函数 G(x) G ( x )
根据递推式得 G(x)−x2−x=x[G(x)−x]+x2G(x) G ( x ) − x 2 − x = x [ G ( x ) − x ] + x 2 G ( x ) (如果看不懂的话想想 a1=a2=1 a 1 = a 2 = 1 )
继续变形:
G(x)=x1−x−x2 G ( x ) = x 1 − x − x 2
=15√[11−1+5√2x−11−1−5√2x] = 1 5 [ 1 1 − 1 + 5 2 x − 1 1 − 1 − 5 2 x ]
为方便表示,设 α=1−1+5√2,β=1−1−5√2x α = 1 − 1 + 5 2 , β = 1 − 1 − 5 2 x :
=15√[(α−β)x+(α2−β2)x2+…] = 1 5 [ ( α − β ) x + ( α 2 − β 2 ) x 2 + … ]
算出每一项系数即最终通项: an=αn−βn5√ a n = α n − β n 5
注意到这个式子是在无穷定义下得到的通项公式,所以其中的 n n 应该具有 +∞ + ∞ 的性质
所以这个式子中由于 |β|=∣∣1−1−5√2∣∣≤1 | β | = | 1 − 1 − 5 2 | ≤ 1 ,即 βn=0 β n = 0
最终得到通项公式: an=αn5√=5√5(1+5√2)n a n = α n 5 = 5 5 ( 1 + 5 2 ) n
由上我们可以总结一下用生成函数由递推公式推得通项公式的步骤:
生成函数还不能熟练应用,许多性质的前置技能未激活,需要循序渐进,在接下来的时间里慢慢补上