淺談生成函式
生成函式
\[F(x) = \sum_{n}a_nk_n(x) \]生成函式(generating function),又稱母函式,是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。
生成函式有許多不同的種類,但大多可以表示為單一的形式:
其中 \(k_n(x)\) 被稱為核函式,不同的核函式會匯出不同的生成函式,分成3類
普通生成函式:\(k_n(x)=x^n\) (OGF)
指數生成函式:\(k_n(x)=\dfrac {x^n} {n!}\) (EGF)
狄利克雷生成函式:\(k_n(x)=\dfrac {1} {n^x}\) (DGF)
另外,對於生成函式 \(F(x)\)
容易發現其中的 \(x\) 對於原式中的結果並沒有什麼影響,我們想要的應該是固定項前面的係數
普通生成函式
形式:
\[F(x) = \sum_{n}a_n x^n \]\(a\) 既可以是有窮序列,也可以是無窮序列
若干例子:
序列 \(a=\langle 1,2,3\rangle\) 的OGF:\(1+2x+3x^2\)
序列 \(a=\langle 1,1,1,\dots,1\rangle\) 的OGF:\(\displaystyle\sum_{n} x^n\)
序列 \(a=\langle 1,2,4,8,16,\dots\rangle\)
序列 \(a=\langle 1,3,5,7,9,\dots\rangle\) 的OGF:\(\displaystyle \sum_n (2n+1)x^n\)
基本運算
考慮兩個序列 \(a,b\) 的普通生成函式,分別為 \(F(x),G(x)\),那麼有
\[F(x)\pm G(x)=\sum_n (a_n\pm b_n)x^n \]因此 \(F(x)\pm G(x)\) 是序列 \(\\langle a_n\pm b_n \rangle\)
考慮乘法運算,也就是卷積:
\[F(x)G(x)=\sum_n x^n \sum_{i=0}^n a_ib_{n-i} \]封閉形式
這是OGF比較好玩的一個東西,就是說每次寫成一個多項式真的很難受,但是如果能夠把這個形式冪級數寫成其它的形式可能就會好很多
對於上述例二,容易發現:
\[xF(x)+1=F(x) \]很容易想到移項後可以得到:\(F(x)=\dfrac {1}{1-x}\)
可能會有點疑惑,這個東西怎麼還能是負數?
實際上發現,如果要讓前面的形式冪級數在 \(\infty\) 處收斂,x的範圍應在 \(\in (-1,1)\)
但是還是不需要去理它,因為我們生成函式的本質不在於這個 \(x\) 的取值,或者說對於這個封閉形式,只是一種方便推過去和推回來的過程罷了,並不是對原式的具體闡述
有若干種物品 ,每種物品只有1件,求取 \(n\) 件物品的總方案數。
每種物品的生成函式是 \(1\times x^0+1\times x^1\)
那麼若干個物品乘起來就是 \((x+1)^n\)
然後用二項式定理展開一下就可以得到:
\(\displaystyle (x+1)^n=\sum_{i=0}^n \binom {n} {i}x^i\)
如果學過組合數學就會發現這個確實很對
當然也有比較噁心的
有若干種物品 ,每種物品可以取任意件,求取 \(n\) 件物品的總方案數
和上個題一樣,每個物品的生成函式是:\(\displaystyle\sum_{i=0}^n x^i\) 很快就能發現,又等於 \(\dfrac 1 {1-x}\)
這樣的話 \(m\) 件物品的生成函式就是
\[\begin{aligned} \dfrac {1} {(1-x)^m}=&(1-x)^m\\ =&\sum_{i=0}^{\infty} \dfrac {-m \times (-m-1) \dots (-m-i+1)} {i!}(-x)^i\\ =&\sum_{i=0}^{\infty} \dfrac {(-1)^i \times m \times (m+1)\dots (m+i-1)} {i!}(-1)^ix^i\\ =&\sum_{i=0}^{\infty} \dfrac {(m+i-1)!} {i!(m-1)!}x^i\\ =&\sum_{i=0}^{\infty} \binom {m + i - 1} {m - 1}x^i \end{aligned} \]同時可以用隔板法理解,答案是相同的
來個重頭戲:斐波那契數列:
前置知識:
\(\displaystyle\dfrac {1} {1-kx}=\sum_{i=0}k^ix^i\)
設 \(F(x)\) 表示斐波那契數列的生成函式
首先第一步拆分,容易得到:
\[\begin{aligned} A =& 1+1x+2 x^2 + 3x^3+5x^4+8x^5\\ xA =& ~~~~~~~~~ x+ 1x^2+2x^3+3x^4+5x^5\\ x^2A=&~~~~~~~~~~~~~~~~1x^2+1x^3+2x^4+3x^5 \end{aligned} \]容易發現下面兩個相加就只和第一個差出來一個數1
\(A-xA-x^2A=1\)
整理一下:\(A=\dfrac {1}{1-x-x^2}\)
然後發現這和上面補充的前置知識太相似了,如果能做到和前面的那個完全一樣就好了
然後就是很多套路性的轉化了
第一個因式分解,\(1-x-x^2=(1-ix)(1-jx)\)
解得 \(i=\dfrac {1+\sqrt 5} {2}~~j =\dfrac {1-\sqrt 5} {2}\)
但是這時候還是兩個 \(\dfrac {1} {1-kx}\) 的卷積,容易發現既然根式都出來了,上面的1也順路拆了算了
令 \(ai+bj=1\),得到 \(a=\dfrac {1} {{\sqrt 5}}i~~b=-\dfrac {1} {\sqrt 5}j\)
帶回原來的式子裡,裂項以後拆成一個巨無霸式子:
\(A=\dfrac {i} {\sqrt 5}\dfrac {1}{1-ix}-\dfrac{j}{\sqrt 5}\dfrac{1}{1-jx}\)
寫的更加簡便一點:
\(\displaystyle A = \dfrac {M} {1-ax}+\dfrac {N} {1-bx}=\sum_{k=0}(Ma^k + Nb^k)x^k\)
同時 \(M=\dfrac {\sqrt 5 i} {5},N=-\dfrac {\sqrt 5 j} {5},a=i,b=j\)
然後就是前面的基本多項式運算了
\(\displaystyle F(x)=\sum_{k=0}((\dfrac {\sqrt 5 i} {5}) \times (\dfrac {1+\sqrt 5} 2)^k-\dfrac {\sqrt 5 j} {5}\times (\dfrac {1-\sqrt 5} {2})^k)x^k\)
經過一點點化簡就能得到:
\[ \frac{x}{1-x-x^2}=\sum_{n\ge 0}x^n \frac{1}{\sqrt{5}}\left( \left(\frac{1+\sqrt{5}}{2}\right)^n-\left(\frac{1-\sqrt{5}}{2}\right)^n \right) \]到這裡其實要說的也就差不多了