一些常見數列的生成函數推導

曾經有人問過我:“斐波那契數列的生成函數長啥樣?”
。。。所以這東西我還是寫一發吧
它有什麼用?它沒啥用。。。

1.齊次線性遞推數列

定義:給定常數k,a1,a2,...,ak,h0,h1,...,hk1 ,構造如下數列:
hn={hna1hn1+a2hn2+...+akhnkn<knk
稱作齊次線性遞推數列。
多項式
F(x)=h0+h1x+h2x2+...
被稱作這個數列的一般生成函數。

說到齊次線性遞推數列,最經典的就是斐波那契數列。
定義不用給了吧……

斐波那契數列的生成函數是這個樣子的:
F(x)=1+x+2x2+3x3+5x4+8x5+...

如何用一些有限項的多項式來表示這個級數?

我們構造這樣一個函數:
A(x)=1xx2
易驗證:
F(x)A(x)=1
即:
F(x)=11xx2

這是爲什麼呢?
原因很簡單,對於n2
[n](F(x)A(x))=[n]F(x)[n1]F(x)[n2]F(x)=0
其中[n]F(x) 代表F(x)n 次項係數

這個結論有一些很好玩的結果,比如代入x=0.01 ,有:
10.9899=1.010203050813213455...
我們還可以知道,如果把斐波那契數列寫成這樣:
1
11
112
1113
11115
111118
1111113
11111121

然後把每一位從上到下加起來,將會出現長度爲89的循環節,因爲10.89 是個有理數……

我們可以把這個推廣到一般形式:

對於遞推式
hn=a1hn1+a2hn2+...+akhnk
的生成函數
F(x)=h0+h1x+h2x2+...

構造函數:
H(x)=h0+h1x+h2x2+...+hk1xk1
A(x)=1a1xa2x2...akxk
則:
F(x)A(x)=H(x)A(x) mod xk
F(x)=H(x)A(x) mod xkA(x)

可以看出這個形式十分的優雅,不過我並不知道這個優雅的形式與數列本質有什麼關聯……

這東西有啥用?
給出一個k 階線性遞推方程,求第n 項,n,k105
暴力O(nk) ,矩乘k3logk ,全掛了……
FFT可以O(nlogn)
叫我毒瘤。

2.非齊次線性遞推數列

定義:給定常數k,a1,a2,...,ak,h0,h1,...,hk1 ,構造如下數列:
hn={hna1hn1+a2hn2+...+akhnk+g(n)n<knk
稱作非齊次線性遞推數列。
其中g(n) 是關於n 的函數,可以是常函數

要求用一些有限項多項式來表示級數:
F(x)=h0+h1x+h2x2+...

和之前一樣,構造多項式:
H(x)=h0+h1x+h2x2+...+hk1xk1
A(x)=1a1xa2x2...akxk
G(x)=g(0)+g(1)x+g(2)x2+...
則:
F(x)A(x)=H(x)A(x) mod xk+(G(x)G(x) mod xk)
F(x)=[H(x)A(x)G(x)] mod xk+G(x)A(x)

所以如果G(x) 能被有限項多項式表示的話就做完了。。。
g(n)=1 ,則G(x)=1+x+x2+...=11x
g(n)=n ,則G(x)=x+2x2+3x3...=x(1x)2
g(n)=n2 ,則G(x)=x+4x2+9x3...=x(x+1)(1x)3
以此類推,如果g 函數是個多項式的話還是可以表示出來的

3.卡特蘭數列

定義:
hn={1h0hn1+h1hn2+...+hn1h0n=0n1

F(x)=h0+h1x+h2x2+...

容易發現這個遞推式本身就是一個卷積,所以我們直接把這個多項式自乘一下
F2(x)=h1+h2x+h3x2+...=F(x)1x
解得
F(x)=114x2x
即爲卡特蘭數列的生成函數。

4.。。。我並不知道這數列叫啥名字,暫且稱作廣義卡特蘭數列吧。。。
我們都知道卡特蘭數列的第n 項代表n 個元素的入棧出棧序列數,即從原點走到(n,n) 不跨越y=x 的方案數
那麼,定義廣義卡特蘭數列hk(n) 表示n+k 個元素入棧出棧後棧中剩餘k 個元素的入棧出棧序列數,即從原點走到(n+k,n) 不跨越y=x 的方案數
求生成函數:
Fk(x)=hk(0)+hk(1)x+hk(2)x2+...

考慮棧中剩餘的這k 個元素,第i 個元素放進去之後就不動了,然後經歷了一些入棧彈棧,然後塞入第i+1 個元素
換句話說我們可以把第i 個元素看做棧底,然後進行了一堆入棧出棧操作,然後棧空了,然後塞進第i+1 個元素……
如果中間這些走了個過場的元素數量爲s ,那麼方案數是多少?
h0(s) ,即卡特蘭數列第s
於是問題就簡單了,我們把n 個元素的序列分成k+1 段,如果一段有s 個元素,方案數是h0(s) ,求方案數

會生成函數的看到這裏已經懂了吧。

構造函數H(x)=h0(0)+h0(1)x+h0(2)x2+...=114x2x
Fk(x)=Hk+1(x)=(114x2x)k+1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章