前言
在看了好多篇博客,翻阅了几本书后,终于对生成函数有了一点点理解,还请各位和我一样刚入门的同学一起静下心来仔细思考,最好在草稿纸上演算一下
本文面向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 个白球和个黑球中取 k k 个的方案数为(在个白球中取 i i 个并在个黑球中取 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
取任意值下等号左右两边都相等
建议看完这一段后理一下思路,再看看上下的例题结合理解一下
例题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
例题2
再用这种方法求一下斐波那契数列通项公式( 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
总结
由上我们可以总结一下用生成函数由递推公式推得通项公式的步骤:
- 设数列生成函数为 G(x)=∑+∞i=0aixi G ( x ) = ∑ i = 0 + ∞ a i x i
- 由递推式推得 G(x) G ( x ) 的数值表达式
- 将 G(x) G ( x ) 的数值表达式转换出形似 11−λx 1 1 − λ x 的式子并用一开始证明的式子进行转换
- 去除在无穷定义下无用项
- 将 xi x i 的系数提出即为数列的项 ai a i
留坑
生成函数还不能熟练应用,许多性质的前置技能未激活,需要循序渐进,在接下来的时间里慢慢补上