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

pycr發表於2021-02-11
生成函式總結

前言

  • 生成函式是什麼啊?能吃嗎?
  • 生成函式(generating function),又稱母函式,是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。——oi-wiki
  • 太晦澀了,簡而言之,對於一個序列,其生成函式就是以這個序列為係數的多項式。
  • 舉個例子?:對於序列 \(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)\)。上升冪類似。

  • 舉上面的那個栗子?,將 \(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} \]

回到形式冪級數

  • 用一個題目來簡單說明一下:你有兩個蘋果?,三個梨子?,兩個桃子?。問:拿五個水果共有幾種方案?

  • 我們分別寫出 ??? 的生成函式:

    ? : \(1+x+x^2\)

    ? : \(1+x+x^2+x^3\)

    ? : \(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!} \]

封閉形式

  • 我們先反著來,先說展開

  • 前置芝士?:泰勒展開

  • 看到指數生成函式的階乘分母有沒有覺得很熟悉?

  • 我們想到泰勒級數也同樣具有作為分母的階乘,那麼我們可以考慮將某個函式泰勒展開。

  • 考慮在 \(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),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列: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) \]

卡特蘭數

簡介

  • 卡特蘭數,又稱卡塔蘭數,是組合數學中一種常出現於各種計數問題中的數列。以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名。1730年左右被蒙古族數學家明安圖 (1692-1763)使用於對三角函式冪級數的推導而首次發現,1774年被發表在《割圜密率捷法》。——百度百科
  • 完全不懂

  • 簡而言之,卡特蘭數也是組合數學中十分重要的內容,其有多種計算公式:

    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日

相關文章