- Infinite sum: 1+x+x2+⋯+xn+…
- Closed form: 1−x1
例:自然數數列 1,2,3,4,5,…
列出生成函數 A(x)=1+2x+3x2+4x3+…
法一,轉換為一連串的closed form:
=1+x+x2+x3+…+x+x2+x3+…+x2+x3+…+…. □(1−x1)(1−xx)(1−xx2)法二,兩邊微分:
=(1+x+x2+x3+x4+…)′1+2x+3x2+4x3+…;另一邊:
(1−x1)′=(1−x)21. □Solving Linear Recurrence by Generating Function#
數列 {an} 之生成函數乃其Formal power series:
i=0∑naixi=a0+a1x+a2x2+⋯+anxn+…
例:給予一數列之遞迴關係 an=8an−1+10n,a0=6,求數列之一般式。
推導:
A(x)=a0+a1x+…=a0+i=1∑∞(8ai−1+10i)xi=a0+8i=1∑∞ai−1xi+i=1∑∞10ixi.前式的 ai−1xi 可以寫為 x⋅ai−1xi−1,可提出 x;後式的 10ixi 則可寫為 (10x)i,而變成無窮等比級數:
A(x)=…=6+8xA(x)+1−10x10x.等式兩邊消除了所有的無窮級數,而兩邊都有 A(x)。只消移項整理即可得 A(x):
(1−8x)A(x)=6+1−10x10x,A(x)=(1−8x)(1−10x)6−50x(1)=1−8x1+1−10x5.接著,即可依照closed form來將其還原為一般項,
1−8x1=1+8x+(8x)2+…,1−10x5=5+5⋅10x+5⋅(10x)2+…而分別可以還原回一般式 8n 與 5⋅10n。因此,便可以得一般項 an=8n+5⋅10n。■
重點
- 在推導時重複出現原式,可以移項整理,消去麻煩的式子
- x的一次分式是很有價值的。有他就可以構成無窮等比(closed form)。因此遇到可以拆分的二次分式(形如()()1)的話要多留意一下。
Manipulating Generating Function#
給兩個生成函式 A(x),B(x) 分別對應到數列 a0,a1,a2,…,an 跟 b0,b1,b2,…,bn。
一、乘以 x 會達成「位移」(shifting)的效果:
xA(x)↔0,a0,a1,…,an−1,…二、生成函式的加法:
A(x)+B(x)↔a0+b0, a1+b1, a2+b2,…三、生成函數的乘法:
A(x)⋅B(x)↔a0b0, a0b1+a1b0, a0b2+a1b1+a2b0,…我們可以說,兩個生成函數相乘,即得他們對應數列(此處為 {an} 與 {bn})的卷積(convolution)。
提示:A(x)⋅B(x)=(a0+a1x+a2x2+…)(b0+b1x+b2x2+…)
例:計算費氏數列 fn=fn−1+fn−2;f0=0,f1=1的一般項。
F(x)=i=0∑∞fixi=f0+f1x+i=2∑∞fixi=x+i=2∑∞(fi−1+fi−2)xi=x+i=2∑∞fi−1xi+i=2∑∞fi−2xi=x+xi=2∑∞fi−1xi−1+x2i=2∑∞fi−2xi−2此時,兩個無窮級數事實上都可以轉換為生成函數 F(x)。
- 前式:∑i=2∞fi−1xi−1=∑i=1∞fixi=F(x)−f0=F(x);
- 後式:∑i=2∞fi−2xi−2=∑i=0∞fixi=F(x)。
F(x)=…=x+xF(x)+x2F(x)移項之後得 F(x)=1−x−x2x=x2+x−1−x,有兩個方法可解。
法一,用公式法分解二次式,然後再拆解分式:
F(x)=(x−2−1+5)(x−2−1−5)−x=x+21−5c1+x+21+5c2. □法二,將式子拆解為兩個乘法項,前後個別求一般式,然後解卷積:
F(x)=(x−2−1+5)(x−2−1−5)−x=x−2−1+5−x⋅x+21+51=1−−1+52x−1+52x⋅1+1+52x1.而這個方法比起法一來說更加麻煩。□