1. 程式人生 > >總結:生成函式(斐波那契通項公式推導)

總結:生成函式(斐波那契通項公式推導)

生成函式總結
# 前言 > * ~~生成函式是什麼啊?能吃嗎?~~ > * 生成函式(generating function),又稱母函式,是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。——oi-wiki > * ~~太晦澀了~~,簡而言之,對於一個序列,其生成函式就是以這個序列為係數的多項式。 > * 舉個栗子:chestnut::對於序列 $A=<0,1,2,3,4,5,\ldots>$ ,其普通生成函式為 $\sum_{i=0}^{+\infty}A_ix^i=\sum_{i=0}^{+\infty}ix^i$,而對於序列 $B=<1,2,3,4,5,\ldots>$,其普通生成函式為 $\sum_{i=0}^{+\infty}(i+1)x^i$。 > * 所以這玩意兒有什麼用?~~用處可大了~~,至少在我目前看來,生成函式就有兩種作用: > 1. 能夠計算一個序列的第 $n$ 項的係數,可以用來求通項公式。 > 2. 廣泛運用於組合數學。 # 形式冪級數 > * 在生成函式的定義裡面有一個詞叫做形式冪級數。~~能吃嗎?~~ ## 先講講什麼是冪級數叭 > * 冪級數是指級數的每一項均為與級數項序號 $n$ 相對應的以常數倍的 $(x−a)$ 的 $n\:(n\in \N)$ 次方。 * 比如 $$ A(x)=\sum_{i\geq 0}a_i(x-x_0)^i $$ 它與多項式不同的一點在於多項式只有有限項的係數是非零的。 ## 接著講形式冪級數 * 其意思就是:對於我們生成的這個多項式來說,其中的變數 $x$ 只是作為一個符號而已,只是一個形式,它的取值並不重要,我們關心的只是它所攜帶的資訊而已。~~好慘一變數……~~ * 就比如在最簡單的生成函式方案統計問題中,**其指數就是我們要求的方案,而其係數就是答案。**後面講生成函式的時候會細講。 # 生成函式 > * 生成函式可以分為很多種,但是用的最廣泛的還是**普通生成函式**和**指數生成函式**。 ## 普通生成函式 > * $Ordinary\:Generating\:Function,OGF$ :普通生成函式。定義為形式冪級數: > $$ > F(x)=\sum_{n\geq0}a_nx^n > $$ ### 封閉形式 * 每次計算都要寫一長串的多項式或者寫一個 $\sum$,~~太麻煩了~~,有沒有更好的方法? * 自然是有的,我們發現:對於序列 $<1,1,1,\ldots>$ 的普通生成函式 $F(x)=\sum_{n\geq 0}x^n$ ,有 $$ F(x)\cdot x+1=F(x) $$ * 解得 $F(x)=\frac{1}{1-x}$,所以我們可以用這個來代替原來瑣碎的 $\sum$ 並簡化運算。 * ~~真是天衣無縫又十分扯淡~~ * 這種方法用的非常多,尤其是在求通項公式的時候,比如求斐波那契和卡特蘭數的通項公式時就會用到。 ### 二項式定理 > * 但是我們將一個多項式變成封閉形式之後就無法得到第 $n$ 項的係數了啊。但是沒有關係,我們可以用二項式定理將其展開。 * $Generalized\:Binomial\:Theorem:$ 廣義二項式定理: $$ (x+y)^\alpha=\sum_{k=0}^\infty \left(\begin{matrix}\alpha\\k\end{matrix}\right)x^{\alpha-k}y^k $$ 其中 $\left(\begin{matrix}\alpha\\k\end{matrix}\right)$ 為廣義二項式係數~~(其實就是實數域下的組合數)~~ $$ \left(\begin{matrix}\alpha\\k\end{matrix}\right)=\frac{\alpha^{\underline k}}{k!}=\frac{\alpha(\alpha-1)\ldots(\alpha-k+1)}{k!},\alpha\in\R,k\in\N $$ $\alpha^{\underline k}$ 表示 $\alpha$ 的 $k$ 次下降冪,即 $\alpha(\alpha-1)\ldots(\alpha-k+1)$。上升冪類似。 * 舉上面的那個栗子:chestnut:,將 $F(x)=\frac{1}{1-x}$ 展開: $$ \begin{aligned} F(X)&=(1-x)^{-1}\\ &=\sum_{k\geq 0}\left(\begin{matrix}-1\\k\end{matrix}\right)(-x)^k\\ &=\sum_{k\geq 0}\left(\begin{matrix}-1\\k\end{matrix}\right)(-1)^kx^k\\ \end{aligned} $$ 那麼 $n$ 項的係數為 $$ \left(\begin{matrix}-1\\n\end{matrix}\right)(-1)^n $$ 將廣義二項式係數展開,上下約分得 $(-1)^n$ ,所以第 $n$ 項的係數為 $1$。 * $Tips:\left(\begin{matrix}m\\n\end{matrix}\right)(-1)^n=\left(\begin{matrix}n-m-1\\n\end{matrix}\right)$,將廣義二項式係數展開之後把 $-1$ 代進去得上升冪再轉下降冪即可。 $$ \begin{aligned} \left(\begin{matrix}m\\n\end{matrix}\right)(-1)^n&=\frac{m(m-1)\ldots (m-n+1)}{n!}(-1)^n\\ &=\frac{-m(-m-1)\ldots (n-m-1)}{n!}\\ &=\frac{(n-m-1)^{\underline n}}{n!}\\ &=\left(\begin{matrix}n-m-1\\n\end{matrix}\right) \end{aligned} $$ ### 回到形式冪級數 * 用一個題目來簡單說明一下:你有兩個蘋果:apple:,三個梨子:pear:,兩個桃子:peach:。問:拿五個水果共有幾種方案? * 我們分別寫出 :apple::pear::peach: 的生成函式: :apple: : $1+x+x^2$ :pear: : $1+x+x^2+x^3$ :peach: : $1+x+x^2$ * 其中 $x$ 的指數表示這種水果拿多少個,我們將其乘起來之後,五次項(表示選五個)的係數即為問題的答案: $$ (1+x+x^2)(1+x+x^2+x^3)(1+x+x^2)=1+3x+6x^2+8x^3+8x^4+6x^5+3x^6+x^7 $$ 所以答案為 $6$。 ## 指數生成函式 > * $Exponential\:Generating\:Function,EGF$ :指數生成函式。定義為形式冪級數: > $$ > \hat F(x)=\sum_{n\geq 0} a_n\frac{x^n}{n!} > $$ ### 封閉形式 * ~~我們先反著來,先說展開~~ * 前置芝士:cheese::[泰勒展開](https://www.cnblogs.com/pycr/p/14387624.html) * 看到指數生成函式的階乘分母有沒有覺得很熟悉? * 我們想到泰勒級數也同樣具有作為分母的階乘,那麼我們可以考慮將某個函式泰勒展開。 * 考慮在 $x_0=0$ 處用多項式去模擬 $e^x$,將 $e^x$ 取一階導數、二階導數、三階導數……然後將 $x_0=0$ 代入可得 $$ e^x=\sum_{n\geq 0}\frac{1}{n!}x^n $$ 為什麼去模擬 $e$ ?~~因為這玩意兒太好算了~~ * 所以我們將這個式子反過來就得到了序列 $<1,1,1,1,\ldots>$ 的指數生成函式的封閉形式。 * 類似的,還有 $$ \begin{aligned} xe^x&=\sum_{n\geq 0}\frac{n}{n!}x^n\\ e^{Cx}&=\sum_{n\geq 0}\frac{C^n}{n!}x^n\\ \ln (1-x)&=-\sum_{n\geq 1}\frac{1}{n}x^n\\ \end{aligned} $$ ### 一個小小的問題 > * 為什麼指數生成函式需要除以一個階乘呢?這個階乘有什麼用? * 因為指數生成函式就類似於多重集的排列數,從一個多重集中**依次**選擇 $N$ 個元素的方案數為 $\frac{N!}{a_1!a_2!\ldots a_n!}$ ($a_i$ 表示每一個元素有多少個),有沒有覺得很像?~~沒有~~。其實除以的這個階乘就相當於方案數中的分母。所以最後得到係數之後是需要乘上 $N!$ 的。 * 等等,這個乘是什麼意思,是額外再乘一個 $N!$ 嗎? * ~~顯然不是~~,它是自動生成的。~~怎麼越來越玄乎了?~~ * 我們可以將這個階乘想象成是 $x$ 的一部分(不要看做是係數),就是有 $x$ 就必須要有階乘,那麼我們將兩個指數生成函式相乘之後,第 $n$ 項可能就是 $\frac{1}{i!j!}x^n$,這個時候我們發現沒有 $n!$,所以我們乘上 $\frac{n!}{n!}$ 得到 $\frac{n!}{i!j!}\cdot \frac{x^n}{n!}$,前面才是我們最終得到的係數,是已經乘了的結果。 * 補充一點,因為平時計算最後結果時都是先化成封閉形式再展開。展開時分母可能會有 $n!$,所以這時我們只要取前面的係數就可以了。~~果然自動。~~ # 一些通項公式的推導 ## 斐波那契數列 > * 斐波那契數列(Fibonacci sequence),又稱[黃金分割](https://baike.baidu.com/item/黃金分割/115896)數列,因數學家萊昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“[兔子數列](https://baike.baidu.com/item/兔子數列/6849441)”,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:*F*(0)=0,*F*(1)=1, *F*(n)=*F*(n - 1)+*F*(n - 2)(*n* ≥ 2,*n* ∈ N*)——百度百科 * 斐波那契數列真是再熟悉不過的數列了,~~因為它比較簡單~~,其每一項都等於前兩項之和。所以其通項公式也比較容易得到。 * 我們設 $F(x)=f_0+f_1x+f_2x^2+\ldots$ 為斐波那契數列的生成函式。則 $$ \begin{aligned} F(x)&=\sum_{i\geq 0}f_ix^i\\ &=f_0+f_1x+\sum_{i\geq 2}f_ix^i\\ &=x+\sum_{i\geq 2}(f_{i-2}+f_{i-1})x^i\\ &=x+x^2\sum_{i\geq 2}f_{i-2}x^{i-2}+x\sum_{i\geq 2}f_{i-1}x^{i-1}\\ &=x+x^2F(x)+xF(x) \end{aligned} $$ 解得 $F(x)=\frac{x}{1-x-x^2}$ 。考慮到這是封閉形式,我們嘗試用待定係數法將其化為廣義二項式的形式並將其展開。 設: $$ \frac{x}{1-x-x^2}=\frac{A}{1-ax}+\frac{B}{1-bx} $$ 通分然後用待定係數法: $$ \begin{aligned} \frac{x}{1-x-x^2}&=\frac{A-Abx+B-Bax}{(1-ax-bx+abx^2)}\\\:\\ \therefore &\begin{cases} A+B=0\\ -Ab-Ba=1\\ -a-b=-1\\ ab=-1 \end{cases} \end{aligned} $$ 解得: $$ \begin{cases} A=\frac{1}{\sqrt 5}\\ B=-\frac{1}{\sqrt 5}\\ a=\frac{1+\sqrt 5}{2}\\ b=\frac{1-\sqrt 5}{2} \end{cases} $$ 那麼: $$ \begin{aligned} F(x)&=\frac{1}{\sqrt 5}\left(\left(1-\frac{1+\sqrt 5}{2}x\right)^{-1}-\left(1-\frac{1-\sqrt 5}{2}x\right)^{-1}\right)\\ &=\frac{1}{\sqrt 5}\left(\sum_{n\geq 0}\left(\frac{1+\sqrt 5}{2}x\right)^n-\sum_{n\geq 0}\left(\frac{1-\sqrt 5}{2}x\right)^n\right)\\ &=\sum_{n\geq 0}\frac{1}{\sqrt 5}\left(\left(\frac{1+\sqrt 5}{2}\right)^n-\left(\frac{1-\sqrt 5}{2}\right)^n\right)x^n \end{aligned} $$ 所以我們就得到了斐波那契數列的通項公式: $$ \frac{1}{\sqrt 5}\left(\left(\frac{1+\sqrt 5}{2}\right)^n-\left(\frac{1-\sqrt 5}{2}\right)^n\right) $$ ## 卡特蘭數 ### 簡介 > * 卡特蘭數,又稱卡塔蘭數,是[組合數學](https://baike.baidu.com/item/組合數學/821134)中一種常出現於各種[計數](https://baike.baidu.com/item/計數/9276342)問題中的[數列](https://baike.baidu.com/item/數列/731531)。以[比利時](https://baike.baidu.com/item/比利時/421128)的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來[命名](https://baike.baidu.com/item/命名/754576)。1730年左右被蒙古族數學家[明安圖](https://baike.baidu.com/item/明安圖/24682) (1692-1763)使用於對三角函式冪級數的推導而首次發現,1774年被髮表在《[割圜密率捷法](https://baike.baidu.com/item/割圜密率捷法/14592102)》。——百度百科 * ~~完全不懂~~ * 簡而言之,卡特蘭數也是組合數學中十分重要的內容,其有多種計算公式: 1. 遞推公式 $1$ :$C_n=\sum_{i=0}^{n-1}C_iC_{n-1-i}$ 2. 遞推公式 $2$ :$C_n=\frac{C_{n-1}\times (4\times n-2)}{n+1}$ 3. 組合公式 $1$ :$f(n)=\frac{C_{2n}^n}{n+1}$ 4. 組合公式 $2$ :$f(n)=C_{2n}^n-C_{2n}^{n-1}$ * 以下一些問題的答案都是卡特蘭數: 1. $n$ 個節點的二叉樹的形態個數。 2. 設進棧的序列為 $<1,2,3,\ldots,n>$ ,有多少種不同的出棧序列。 3. $n$ 級階梯的化分數。 4. $n$ 個 $0$ 和 $1$ 組成的長度為 $2n$ 且字首和非負的 $01$ 序列的個數。 5. $n+2$ 邊形三角劃分方案數。 6. 網格圖中從 $(0,0)$ 走到 $(n,n)$ 且不越過對角線的方案數。 * 對④的一些理解:受網格圖中容斥原理的啟發,我們假設一開始在原點,$1$ 代表向右上方走一步,$0$ 代表向右下方走一步,那麼最終都會走到 $(2n,0)$。如果不考慮字首和非負這一條件的話,那麼方案數就為 $C_{2n}^n$。這時加上字首和這一條件,我們發現,在該網格圖中,縱座標就代表著字首和,那麼合法的方案一定不會經過直線 $y=-1$ 。換句話說,我們將 $(2n,0)$ 沿著 $y=-1$ 翻折得到對稱點 $(2n,-2)$,那麼從 $(0,0)$ 到 $(2n,-2)$ 的每條路線就對應著原圖中的一條不合法的路線,這樣的路線一共有 $C_{2n}^{n-1}$ 條,即有 $(n-1)$ 個 $1$ 的序列數,減去即可。所以答案即為 $C_{2n}^n-C_{2n}^{n-1}$,為卡特蘭數組合公式 $2$。 * 為什麼⑤是卡特蘭數?其遞推公式明明為 $C_n=\sum_{i\geq 2}^{n-1}C_iC_{n-i+1}$。我們考慮作以下變換: $$ \begin{aligned} C_n&=\sum_{i\geq 2}^{n-1}C_iC_{n-i+1}\\ &=\sum_{i\geq 0}^{n-3}C_{i+2}C_{n-i-1} \end{aligned} $$ 將整個數列向左平移兩個位置 $$ \begin{aligned} C_{n-2}&=\sum_{i\geq 0}^{n-3}C_iC_{n-i-3}\\ \therefore C_m&=\sum_{i\geq 0}^{m-1}C_iC_{m-1-i}\quad(m=n-2) \end{aligned} $$ * 其實有一種更為直觀的理解:在求和的時候,$i$ 的取值範圍為 $2\sim n-1$,而 $n-i+1$ 則為 $n-1\sim 2$,標準的卡特蘭數。 ### 求通項公式 * 知道卡特蘭數的遞推公式之後就好辦了。 * 設 $F(x)=C_0+C_1x+C_2x^2+\ldots$ 為卡特蘭數的生成函式。則 $$ \begin{aligned} F(x)&=\sum_{i\geq 0}C_ix^i\\ &=1+x\sum_{i\geq 1}\sum_{j=0}^{i-1}C_jx^j\cdot C_{i-1-j}x^{i-1-j}\\ &=1+x\sum_{i\geq 0}\sum_{j=0}^{i}C_jx^j\cdot C_{i-j}x^{i-j}\\ &=1+xF^2(x)\\ \end{aligned} $$ 解得 $F(x)=\frac{1\pm\sqrt{1-4x}}{2x}$,因為 $F(0)=C_0=1$,且 $$ \begin{aligned} \lim_{x\to 0} \frac{1+\sqrt{1-4x}}{2x}&=\infty\\ \lim_{x\to 0} \frac{1-\sqrt{1-4x}}{2x}&=0 \end{aligned} $$ (具體參考洛必達法則) 所以 $F(x)=\frac{1-\sqrt{1-4x}}{2x}$ 。 * ~~這才推了一點點~~ * 考慮將 $\sqrt{1-4x}$ 廣義二項式展開 $$ \begin{aligned} (1-4x)^\frac{1}{2}&=\sum_{n\geq 0}\left(\begin{matrix}\frac{1}{2}\\n\end{matrix}\right)(-4x)^n\\ &=1+\sum_{n\geq 1}\frac{\left(\frac{1}{2}\right)^{\underline n}}{n!}(-4x)^n \end{aligned} $$ 而 $$ \begin{aligned} \left(\frac{1}{2}\right)^{\underline n}&=\frac{1}{2}\frac{-1}{2}\frac{-3}{2}\cdots \frac{-(2n-3)}{2}\\ &=\frac{(-1)^{n-1}(2n-3)!!}{2^n}\\ &=\frac{(-1)^{n-1}(2n-2)!}{2^n(2n-2)!!}\\ &=\frac{(-1)^{n-1}(2n-2)!}{2^{2n-1}(n-1)!} \end{aligned} $$ 所以 $$ \begin{aligned} (1-4x)^\frac{1}{2}&=1+\sum_{n\geq 1}\frac{(-1)^{n-1}(2n-2)!}{2^{2n-1}(n-1)!n!}(-4x)^n\\ &=1-\sum_{n\geq 1}\frac{(2n-2)!}{(n-1)!n!}2x^n \end{aligned} $$ 帶回原式得到 $$ \begin{aligned} F(x)&=\frac{1}{2x}\sum_{n\geq 1}\frac{(2n-2)!}{(n-1)!n!}2x^n\\ &=\sum_{n\geq 1}\frac{(2n-2)!}{(n-1)!n!}x^{n-1}\\ &=\sum_{n\geq 0}\frac{2n!}{n!(n+1)!}x^n \end{aligned} $$ 所以卡特蘭數的通項公式為 $$ \frac{2n!}{n!(n+1)!}=\frac{2n!}{n!n!}\cdot\frac{1}{n+1}=\frac{C_{2n}^n}{n+1} $$ 為組合公式 $1$

——2021年2月11日