曾經有人問過我:「斐波那契數列的生成函式長啥樣?」
。。。所以這東西我還是寫一發吧
它有什麼用?它沒啥用。。。
1.齊次線性遞推數列
定義:給定常數k,
a1,a
2,..
.,ak
,h0,
h1,.
..,h
k−1 ,構造如下數列: hn
={hn
a1hn
−1+a
2hn−
2+..
.+ak
hn−k
n≥k稱作齊次線性遞推數列。
多項式 f(
x)=h
0+h1
x+h2
x2+.
..被稱作這個數列的一般生成函式。
說到齊次線性遞推數列,最經典的就是斐波那契數列。
定義不用給了吧……
斐波那契數列的生成函式是這個樣子的: f(
x)=1
+x+2
x2+3
x3+5
x4+8
x5+.
..
如何用一些有限項的多項式來表示這個級數?
我們構造這樣乙個函式: a(
x)=1
−x−x
2 易驗證: f(
x)a(
x)=1
即: f(
x)=1
1−x−
x2
這是為什麼呢?
原因很簡單,對於∀n
≥2, [n
](f(
x)a(
x))=
[n]f
(x)−
[n−1
]f(x
)−[n
−2]f
(x)=
0 其中[
n]f(
x)代表f(
x)的n
次項係數
這個結論有一些很好玩的結果,比如代入x=
0.01
,有:
10.9899
=1.010203050813213455...
我們還可以知道,如果把斐波那契數列寫成這樣: 1
11112
1113
11115
111118
11111
13
111111
21
… 然後把每一位從上到下加起來,將會出現長度為89的迴圈節,因為
10.89
是個有理數……
我們可以把這個推廣到一般形式:
對於遞推式 hn
=a1h
n−1+
a2hn
−2+.
..+a
khn−
k 的生成函式 f(
x)=h
0+h1
x+h2
x2+.
..
建構函式: h(
x)=h
0+h1
x+h2
x2+.
..+h
k−1x
k−1
a(x)
=1−a
1x−a
2x2−
...−
akxk
則: f(
x)a(
x)=h
(x)a
(x)m
odxk
f(x)=h(
x)a(
x)mo
dxka
(x)
可以看出這個形式十分的優雅,不過我並不知道這個優雅的形式與數列本質有什麼關聯……
這東西有啥用?
給出乙個
k 階線性遞推方程,求第n項,
n,k≤
105暴力o(
nk) ,矩乘k3
logk
,全掛了……
fft可以o(
nlog
n)。
叫我毒瘤。
2.非齊次線性遞推數列
定義:給定常數k,
a1,a
2,..
.,ak
,h0,
h1,.
..,h
k−1 ,構造如下數列: hn
={hn
a1hn
−1+a
2hn−
2+..
.+ak
hn−k
+g(n
)n≥k
稱作非齊次線性遞推數列。 其中g
(n) 是關於
n 的函式,可以是常函式
要求用一些有限項多項式來表示級數: f(
x)=h
0+h1
x+h2
x2+.
..和之前一樣,構造多項式: h(
x)=h
0+h1
x+h2
x2+.
..+h
k−1x
k−1
a(x)
=1−a
1x−a
2x2−
...−
akxk
g(x)=g(
0)+g
(1)x
+g(2
)x2+
...
則: f(x
)a(x
)=h(
x)a(
x)mo
dxk+
(g(x
)−g(
x)mo
dxk)
f(x)=[h
(x)a
(x)−
g(x)
]mod
xk+g
(x)a
(x)
所以如果g(
x)能被有限項多項式表示的話就做完了。。。 若g
(n)=
1 ,則g(
x)=1
+x+x
2+..
.=11
−x 若
g(n)
=n,則g(
x)=x
+2x2
+3x3
...=
x(1−
x)2
若g(n
)=n2
,則g(
x)=x
+4x2
+9x3
...=
x(x+
1)(1
−x)3
以此類推,如果
g 函式是個多項式的話還是可以表示出來的
3.卡特蘭數列
定義: hn
={1h
0hn−
1+h1
hn−2
+...
+hn−
1h0n
=0n≥
1 求f
(x)=
h0+h
1x+h
2x2+
...
容易發現這個遞推式本身就是乙個卷積,所以我們直接把這個多項式自乘一下 f2
(x)=
h1+h
2x+h
3x2+
...=
f(x)
−1x
解得 f(x
)=1−
1−4x
√2x
即為卡特蘭數列的生成函式。
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)=h
0(0)
+h0(
1)x+
h0(2
)x2+
...=
1−1−
4x√2
x 則f
k(x)
=hk+
1(x)
=(1−
1−4x
√2x)
k+1
一些常見的二元生成函式
形式化的 g x,y sum sum frac x iy j sum x xy i frac 則稱 g x,y 為二元組 x,y 在組合數意義下的乙個二元生成函式 具體用途 處理一些比較詭異的組合數上的連續求和 一般是通過將 y 帶換成 x k x 也相應變形的方法來處理 g x x k sum s...
常見的一些 Hash 函式
hash的主要原理就是把大範圍對映到小範圍 所以,你輸入的實際值的個數必須和小範圍相當或者比它更小。不然衝突就會很多。不同的應用對hash函式有著不同的要求 比如,用於加密的hash函式主要考慮它和單項函式的差距,而用於查詢的hash函式主要考慮它對映到小範圍的衝突率。下面介紹一些常用的用於查詢ha...
一些常見的移位函式
微控制器 crol 字元迴圈左移 cror 字元迴圈右移 irol 整數迴圈左移 iror 整數迴圈右移 lrol 長整數迴圈左移 lror 長整數迴圈右移一些暫存器置位 define gpioc crl unsigned int gpioc base 0x00 define rcc apb2enr...