Preface
前排提示:本文數學公式較多,加載\(\LaTeX\)需要一定時間,可能會導致瀏覽器暫時卡頓,請耐心等待數學公式正常顯示.
\(\mathrm{Update}\):生成函數內容已經結束,由於生成函數和多項式算法的關系更大,所以本文暫時停更,先更新多項式算法.
生成函數
形式冪級數
對於形如:
這樣的多項式我們稱之為形式冪級數.
形式冪級數是一個抽象的數學概念,我們從來不指定\(x\)的值,因為其沒有確切意義,也不關心求和的收斂與發散問題,只關心形式冪級數的系數,也就是\(a_i\)的值.
普通型生成函數
定義
對於一個數列\(\{f_i\}\),我們定義它的普通型生成函數(\(\mathrm{Ordinary\ Generating\ Function}\),簡稱\(\mathrm{OGF}\))為一個形式冪級數:
其中\(f_n\)又稱為\(x^n\)在\(F(x)\)中的系數,取系數的符號記作:\(f_n=[x^n]F(x)\).
四則運算
生成函數可以進行四則運算和微積分,我們需要了解運算法則.
首先,生成函數的加減法運算與多項式的加法運算相同:
於是我們可以得知生成函數具有線性性,也就是說如下兩條運算法則成立:
其實,生成函數的乘法運算和多項式的乘法運算的定義也是一樣的,我們可以考慮\(f_n x^n\)與\(g_m x^m\)乘積的系數回累加到\(x^{n+m}\)上,所以可以這樣定義乘法:
我們也稱\(\{h_i\}=\{\sum_{j=0}^i f_j\times g_{i-j}\}\)為數列\(\{f_i\}\)和\(\{g_i\}\)的卷積
平行位移
我們可以對一個生成函數乘上\(x\)的若干次冪,達到系數平行位移的效果.
微積分
生成函數的微積分就是多項式的微積分:
不定積分會帶一個常數\(\mathrm{C}\),這是常識了,一般我們就看\(\int F(0)\mathrm{d}x\)是不是我們所期望的數字,再來決定\(\mathrm{C}\)就可以了,通常來說是\(0\).
常見數列的普通型生成函數
由於在形式冪級數中我們不在乎\(x\)的取值,所以我們一般都可以把形式冪級數表示成跟簡單的形式,然后再用於生成函數的有關計算.
就比如說,我們要求數列\(\{f_i\}=\{1,1,1,\cdots\}\)的生成函數:
讓\(n\rightarrow \infty\)就好,這里用到了等比數列求和公式. 此時,如果我們令\(x\in (-1,1)\),那么就有:
利用平移技巧,我們可以得知:
利用整體換元,我們還可以知道:
令\(c=-1\),還可以得到數列\(\{f_i\}=\{1,-1,1,-1,\cdots\}\)的生成函數:
下面我們來看幾個復雜一點的生成函數:
\(1.\) \(\{f_i\}=\{\binom{k-1}{0},\binom{k}{1},\binom{k+1}{2},\cdots\}\),\(F(x)=\frac{1}{(1-x)^k}\)
證明:
可以考慮
用隔板法就可以求出\([x^n]F(x)=\binom{n+k-1}{k-1}\),故得證.
令\(k=2\),還可以得知\(\{f_i\}=\{1,2,3,\cdots\}\)的生成函數\(F(x)=\frac{1}{(1-x)^2}\).
\(2.\) \(\{f_i\}=\{\binom{n}{0},\binom{n}{1},\binom{n}{2},\cdots\}\),\(F(x)=(1+x)^n\)
證明:直接用廣義二項式定理展開右邊就好.
\(3.\) \(\{f_i\}=\{0,1,\frac{1}{2},\frac{1}{3},\cdots\}\),\(F(x)=\ln \frac{1}{1-x}\)
證明:
兩邊同時求一個不定積分:
因為\(F(0)=0\),所以可以得出\(\mathrm{C}=0\).
\(4.\) \(\{f_i\}=\{-0,1,-\frac{1}{2},\frac{1}{3},\cdots\}\),\(F(x)=\ln (1+x)\)
證明:
兩邊同時求一個不定積分:
因為\(F(0)=0\),所以可以得出\(\mathrm{C}=0\).
總結
下表給出常見數列的普通型生成函數和常見的生成函數變換技巧.
\(\mathrm{Sequence}\) | \(\mathrm{Ordinary\ Generating\ Function}\) |
---|---|
\(\langle1,1,1,\cdots\rangle\) | \(F(x)=\frac{1}{1-x}\) |
\(\langle1,2,3,\cdots\rangle\) | \(F(x)=\frac{1}{(1-x)^2}\) |
\(\langle1,-1,1,\cdots\rangle\) | \(F(x)=\frac{1}{1+x}\) |
\(\left\langle\binom{k-1}{0},\binom{k}{1},\binom{k+1}{2},\cdots\right\rangle\) | \(F(x)=\frac{1}{(1-x)^k}\) |
\(\left\langle\binom{n}{0},\binom{n}{1},\binom{n}{2},\cdots\right\rangle\) | \(F(x)=(1+x)^n\) |
\(\langle c^0,c^1,c^2,\cdots\rangle\) | \(F(x)=\frac{1}{1-cx}\) |
\(\langle0,0,1,1,\cdots\rangle\) | \(F(x)=\frac{x^2}{1-x}\) |
\(\langle1,0,1,0,1,\cdots\rangle\) | \(F(x)=\frac{1}{1-x^2}\) |
\(\left\langle0,1,\frac{1}{2},\frac{1}{3},\cdots\right\rangle\) | \(F(x)=\ln \frac{1}{1-x}\) |
\(\left\langle-0,1,-\frac{1}{2},\frac{1}{3},\cdots\right\rangle\) | \(F(x)=\ln \frac{1}{1+x}\) |
指數型生成函數
定義
對於一個數列\(\{f_i\}\),我們定義它的指數型生成函數(\(\mathrm{Exponential\ Generating\ Function}\),簡稱\(\mathrm{EGF}\))為一個形式冪級數:
也就是說,我們使用符號\(\hat{F}(x)\)表示函數的時候,就默認是指數型生成函數,而\(F(x)\)默認是普通型生成函數.
相信大家都已經注意到了指數型生成函數與普通型生成函數的區別,我們在級數求和的每一項處都除掉了\(i!\),其實意義就是除掉的組合對象的標號。
為什么要除掉標號?就比如說\(F(x)\)代表全排列的普通型生成函數時,就很難寫出其收斂形式,不便於運算. 而如果用\(\hat{F}(x)\)表示全排列的指數型生成函數,那么很容易得出\(\hat{F}(x)=\frac{1}{1-x}\). 在定義指數型生成函數的運算之后,我們就可以方便的用收斂形式進行運算,得到結果輸出時,再把標號乘上去即可. 這里也就解釋了為什么指數型生成函數都是用於計算帶標號組合對象的.
四則運算
指數型生成函數也可以進行四則運算,其定義如下:
兩個指數型生成函數的卷積我們需要特別注意一下,因為指數型生成函數對應的都是有標號組合對象,所以卷積需要通過二項式系數卷積的形式來重新分配標號. 巧合的是,卷積的結果仍為指數型生成函數.
微積分
根據指數型生成函數的定義式,我們很快可以寫出指數型生成函數進行微積分的結果:
容易發現,微積分對應了數列左移\(/\)右移后的指數型生成函數,不過這時候組合意義就消失了.
洛必達法則和泰勒多項式
在指數型生成函數的收斂形式求解中,我們可能要使用更多的高數知識,這里列出最重要的兩個供大家回顧.
\(1.\) 洛必達法則
若函數\(f\)和\(g\)滿足以下條件:
且在\(x\)在某去心領域\(\overset{\circ}{\mathrm{U}}(x_0)\)兩函數均可導,\(g'(x)\not = 0\),則有:
\(2.\) 泰勒多項式
對於函數\(f\),設它在點\(x_0\)存在直到\(n\)階的導數,則我們由這些導數構造一個\(n\)次多項式:
稱為\(f\)在\(x_0\)處(帶有佩亞諾余項型)的泰勒多項式,\(\mathrm{T}_n(x)\)的各項系數稱為泰勒系數.
泰勒公式:
其中泰勒多項式\(\mathrm{T}_n(x)\)為所有\(n\)次及更低次多項式中在\(x_0\)點附近對原函數的最佳近似,在\(x\rightarrow x_0\)時,\(\mathcal{O}((x-x_0)^n)\)為比\((x-x_0)^n\)更高階的無窮小.
\(x_0=0\)時的泰勒公式也稱為麥克勞林公式:
常見的泰勒公式例子:
原函數 | 泰勒展開 |
---|---|
\(e^x\) | \(1+\frac{x}{1!}+\frac{x^2}{2!}+\cdots +\frac{x^n}{n!}+\cdots\) |
\(\sin (x)\) | \(x-\frac{x^3}{3!}+\frac{x^5}{5!}+\cdots+(-1)^n\frac{x^{2n+1}}{(2n+1)!}+\cdots\) |
\(\cos (x)\) | \(1-\frac{x^2}{2!}+\frac{x^4}{4!}-\cdots+(-1)^n\frac{x^{2n}}{(2n)!}+\cdots\) |
\(\ln (1+x)\) | \(x-\frac{x^2}{2}+\frac{x^3}{3}-\cdots+(-1)^{n+1}\frac{x^n}{n}+\cdots\) |
\(\frac{1}{1+x}\) | \(1-x+x^2-x^3+\cdots+(-1)^n x^n+\cdots\) |
\((1+x)^a\) | \(1+ax+\frac{a^{\underline 2}}{2!}x^2+\cdots+\frac{a^{\underline {n}}}{n!}x^n+\cdots\) |
常見數列的指數型生成函數
首先是排列數的指數型生成函數,\(\{f_i\}=\{0!,1!,2!,\cdots\}\),\(\hat{F}(x)=\frac{1}{1-x}\),這個就是直接把標號除掉了.
然后我們可以考慮其他常見數列的指數型生成函數:
\(1.\) \(\{f_i\}=\{1,1,1,\cdots\}\),\(\hat F(x)=e^x\)
證明:將\(e^x\)在原點泰勒展開即可.
\(2.\) \(\{f_i\}=\{1,c,c^2,\cdots\}\),\(\hat F(x)=e^{cx}\)
證明:把\(1.\)式中的\(x\)代入\(cx\)即可.
\(3.\) \(\{f_i\}=\{\overbrace{0,0,\cdots,0}^{k-1\ \mathrm{times}},k^{\underline{k}},(k+1)^{\underline{k}},\cdots\}\),\(\hat F(x)=e^x x^k\).
證明:
\(4.\) 環排列的指數型生成函數:\(\hat F(x)=\ln \frac{1}{1-x}\).
證明:
\(n\)個數組成環排列的方案數為\((n-1)!\),代入\(\mathrm{EGF}\)的定義式后可以化簡為\(\{f_i\}=\{0,1,\frac{1}{2},\frac{1}{3},\cdots\}\)的\(\mathrm{OGF}\). 也可以看作全排列的\(\mathrm{EGF}\)右移一位,只要積分一下即可,結果是一樣的.
總結
下表給出常見數列的指數型生成函數和常見的生成函數變換技巧.
\(\mathrm{Sequence}\) | \(\mathrm{Exponential\ Generating\ Function}\) |
---|---|
\(\langle0!,1!,2!,\cdots\rangle\) | \(\hat F(x)=\frac{1}{1-x}\) |
\(\langle1,1,1,\cdots\rangle\) | \(\hat F(x)=e^x\) |
\(\langle1,c,c^2,\cdots\rangle\) | \(\hat F(x)=e^{cx}\) |
\(\left\langle\overbrace{0,0,\cdots,0}^{k-1\ \mathrm{times}},k^{\underline{k}},(k+1)^{\underline{k}},\cdots\right\rangle\) | \(\hat F(x)=e^x x^k\) |
\(\left\langle 0,0!,1!,2!,\cdots\right\rangle\) | \(\hat F(x)=\ln \frac{1}{1-x}\) |
\(\left\langle 1!,2!,3!,4!,\cdots\right\rangle\) | \(\hat F(x)=\frac{1}{(1-x)^2}\) |
生成函數的運用
生成函數的直接運用其實就是解析數列,有時候可以求通項,當然還有計數什么的,不過這個就要根據具體題目而論了.
斐波那契數列
斐波那契數列\(\{f_i\}\)的定義是這樣的:
設其普通型生成函數為\(F(x)\),可以根據平行位移的技巧寫出等式:
可以把\(F(x)\)看作主元解方程,得到\(F(x)=\frac{x}{1-x-x^2}\),這就是斐波那契數列的生成函數.
根據常識,常系數線性遞推方程的解是等比數列,現在我們要求通項,也就是說要把生成函數轉化成等比數列生成函數的樣子.
斐波那契數列的解一定是兩個等比數列的復合,我們不妨設這兩個等比數列的生成函數為\(A(x)=\frac{\alpha}{1-\varphi_1 x}\),\(B(x)=\frac{\beta}{1-\varphi_2x}\).
首先應該有\((1-\varphi_1x)(1-\varphi_2x)=1-x-x^2\),那么解得\(\varphi_1=\frac{\sqrt 5+1}{2}\),\(\varphi_2=\frac{\sqrt 5 -1}{2}\).
然后就有\(\alpha (1-\varphi_2x)+\beta(1-\varphi_1x)=x\),展開聯立方程組:
解得\(\alpha=\frac{1}{\sqrt 5}\),\(\beta=-\frac{1}{\sqrt 5}\).
卡特蘭數列
卡特蘭數列\(\{c_i\}\)的定義是這樣的:
設其普通型生成函數為\(C(x)\),我們同樣可以嘗試列出方程.
考慮到其定義式有點像自己和自己的卷積,我們可以看看\(C^2(x)\)長什么樣:
那么就可以列出方程了:
解得:
這玩意的生成函數有兩個,不可能!! 我們肯定要嘗試代入特殊值舍掉其中之一. 由於\(x\not= 0\)時不確定級數是否收斂,我們也無法驗證答案是否正確,那么肯定是要嘗試代入\(x=0\)的.
考慮到\(x\)作為分母不能等\(0\),那么我們就讓\(x\rightarrow0\)試試看. 顯然有:
所以取正號肯定是不可能的了,不確定的話可以把負號代入試試看,需要用洛必達法則求一下極限:
求通項公式的話,可以把\(\sqrt{1-4x}\) 廣義二項式定理展開一下:
然后代回生成函數:
Bell數列
\(\mathrm{Bell}\)數列第\(n\)項的定義是把\(1\sim n\)的正整數分配到若干個集合中的方案數,因此可以看作是第二類斯特林數的和.
可以考慮寫出\(\mathrm{Bell}\)數列的遞推式:
可以看出,等式最右邊的一項是\(\{1\}\)和\(\{w_i\}\)二項卷積\(n-1\)次項的系數,等式的左邊是\(n\)次項系數,可以用積分平移一下,列出關於生成函數的方程:
兩邊同時求導,得到一個微分方程:
等式左右兩側同時求不定積分:
那么我們就可以得到初等函數解了:\(\hat W(x)=e^{e^x+\mathrm{C}}\).
由於\(\hat W(0)=w_0=1\),可以確定常數\(\mathrm{C}=-1\),那么\(\hat W(x)=e^{e^x-1}\).
錯位排列
在考慮錯位排列的生成函數之前,我們需要先考慮一下指數型生成函數的組合意義.
不妨看這個例子:全排列的指數型生成函數\(\hat F(x)=\frac{1}{1-x}\),環排列的指數型生成函數是\(\hat G=\ln \frac{1}{1-x}\),有\(\hat F=e^{\hat G(x)}\),這是巧合嗎?
我們可以看看\(e^x\)這個函數的\(\mathrm{Taylor}\)展開:
我們知道,每一個排列都可以被分解為確定個數的置換環. 對於\(\{1,2,\cdots ,n\}\)的自然數,構造一個置換環的方案數恰為\([x^n]\hat G(x)\times n!\). 由於自然數有標號,所以\(\{1,2,\cdots ,n\}\)的自然數構造\(i\)個置換環的方案數恰為\([x^n]\hat G^i(x)\times n!\),當然這里的乘法拼接就是\(\mathrm{EGF}\)的二項卷積了.
所以\(e^{\hat G(x)}\)的組合意義就是枚舉排列的置換環個數\(i\),並用對應方案數的生成函數進行二項卷積,除掉\(i!\)后的累加和. 為什么除掉\(i!\),是因為置換環之間是沒有標號的. 這不正好就是全排列的\(\mathrm{EGF}\)嗎?
無獨有偶,我們可以把\(e^x-1\)看作把自然數放到一個集合中方案數的\(\mathrm{EGF}\),那么\(e^{e^x-1}\)就是把自然數放到若干集合中方案數的\(\mathrm{EGF}\),恰好符合\(\mathrm{Bell}\)數的定義.
因此,我們可以歸納出\(\exp\)函數在生成函數運算上的組合意義:設有標號組合對象\(A\)的指數型生成函數為\(\hat A(x)\),\([x^n]\hat A(x)\times n!\)表示組合\(n\)個元素的方案數,那么\(\hat B(x)=e^{\hat A(x)}\)就是把元素划分為若干無標號不交並,每一個子集內當作組合對象\(A\)來處理,所對應的\(\mathrm{EGF}\).
那么這樣的話錯位排列的生成函數就很好考慮了:錯位排列等價於不存在置換環大小為\(1\)的排列,因此其也可以划分為若干置換環,只不過大小不能為\(1\). 根據上面的討論,我們把\(\ln \frac{1}{1-x}\)減掉\(x\),也就是減掉大小為\(1\)置換環的方案數對應的系數,那么再\(\mathrm{exp}\)一下就是錯排的方案數\(\mathrm{EGF}\)了.
你要是願意的話,可以\(\mathrm{Taylor}\)展開驗證一下前幾項,結果與我們熟知的錯排數列完全相同.
簡單無向連通圖計數
首先\(n\)個點的有標號簡單無向圖的方案數是\(2^{{n\choose 2}}\),那么設\(\hat F(x)\)為有標號簡單無向圖的生成函數:
假設有標號簡單無向連通圖的\(\mathrm{EGF}\)就是\(\hat G(x)\),那么顯然有\(\hat F(x)=e^{\hat G(x)}\),然后可以得到\(\hat G(x)=\ln \hat F(x)\).
Epilogue
正在施工...