卡特蘭(Catalan)數入門詳解

也許更好的閱讀體驗

基本概念

介紹

學卡特蘭數我覺得可能比組合數要難一點,因爲組合數可以很明確的告訴你那個公式是在幹什麼,而卡特蘭數卻像是在用大量例子來解釋什麼時卡特蘭數
這裏,我對卡特蘭數做一點自己的理解
卡特蘭數是一個在組合數學裏經常出現的一個數列,它並沒有一個具體的意義,卻是一個十分常見的數學規律

對卡特蘭數的初步理解:有一些操作,這些操作有着一定的限制,如一種操作數不能超過另外一種操作數,或者兩種操作不能有交集等,這些操作的合法操作順序的數量

爲了區分組合數,這裏用fnf_n表示卡特蘭數的第nn
從零開始,卡特蘭數的前幾項爲1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,1296447901, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790\ldots

定義

遞歸定義

fn=f0fn1+f1fn2++fn1f0f_n=f_0*f_{n-1}+f_1*f{n-2}+\ldots+f_{n-1}f_{0},其中n2n\geq 2

遞推關係

fn=4n2n+1fn1f_n=\frac{4n-2}{n+1}f_{n-1}

通項公式

fn=1n+1C2nnf_n=\frac{1}{n+1}C_{2n}^{n}

經化簡後可得

fn=C2nnC2nn1f_n=C_{2n}^{n}-C_{2n}^{n-1}

只要我們在解決問題時得到了上面的一個關係,那麼你就已經解決了這個問題,因爲他們都是卡特蘭數列


實際問題

先用一個最經典的問題來幫助理解卡特蘭數
去掉了所有的掩飾,將問題直接寫出來就是

例題1

在一個w×hw\times h的網格上,你最開始在(0,0)\left(0,0\right)上,你每個單位時間可以向上走一格,或者向右走一格,在任意一個時刻,你往右走的次數都不能少於往上走的次數,問走到(n,m),0n\left(n,m\right),0\leq n有多少種不同的合法路徑。

合法路徑個數爲C2nnC2nn1C_{2n}^{n}-C_{2n}^{n-1}

直接求不好,考慮求有多少種不合法路徑
路徑總數爲在2n2n次移動中選nn次向上移動,即C2nnC_{2n}^{n}

畫一下圖,我們把y=x+1y=x+1這條線畫出來,發現所有的合法路徑都是不能碰到這條線的,碰到即說明是一條不合法路徑
先隨便畫一條碰到這條線的不合法路徑,所有的不合法路徑都會與這條線有至少一個交點,我們把第一個交點設爲(a,a)\left(a,a\right)
如圖

p1.png

我們把(a,a)\left(a,a\right)之後的路徑全部按照y=x+1y=x+1這條線對稱過去
這樣,最後的終點就會變成(n1,n+1)\left(n-1,n+1\right)
p2.png

由於所有的不合法路徑一定會與y=x+1y=x+1有這麼一個交點
我們可以得出,所有不合法路徑對稱後都唯一對應着一條到(n1,n+1)\left(n-1,n+1\right)的路徑
且所有到(n1,n+1)\left(n-1,n+1\right)的一條路徑都唯一對應着一條不合法路徑(只需將其對稱回去即可)
所以不合法路徑總數是C2nn1C_{2n}^{n-1}

那麼合法的路徑總數爲C2nnC2nn1C_{2n}^{n}-C_{2n}^{n-1}

這是一個非常好用且重要的一個方法,其它的問題也可以用該方法解決
找到不合法路徑唯一對應的到另一個點的路徑
網格計數


方法

先將方法寫在前面吧
相信大家都聽過燒開水這個數學小故事吧
和學習數學一樣,轉化是基本思路,將一個問題轉化爲另外一個已經解決了的問題是最重要的


01序列

你現在有nn00nn11,問有多少個長度爲2n2n的序列,使得序列的任意一個前綴中11的個數都大於等於00的個數
例如n=2n=2
1100,10101100,1010兩種合法序列
1001,0101,0110,00111001,0101,0110,0011都是不合法的序列

合法的序列個數爲C2nnC2nn1C_{2n}^{n}-C_{2n}^{n-1}

我們把出現一個11看做向右走一格,出現一個11看做向上走一格,那麼這個問題就和上面的例題11一模一樣了

拓展
如果是nn1,m1,m00呢?
不過是最後的終點變爲了(n,m)\left(n,m\right)罷了
如果是11的個數不能夠比mmkk
我們只需將y=x+1y=x+1這條線上下移動即可


括號匹配

你有nn個左括號,nn個右括號,問有多少個長度爲2n2n的括號序列使得所有的括號都是合法的

合法的序列個數爲C2nnC2nn1C_{2n}^{n}-C_{2n}^{n-1}

要使所有的括號合法,實際上就是在每一個前綴中左括號的數量都不少於右括號的數量
將左括號看做11,右括號看做00,這題又和上面那題一模一樣了


進出棧問題

有一個棧,我們有2n2n次操作,nn次進棧,nn次出棧,問有多少中合法的進出棧序列

合法的序列個數爲C2nnC2nn1C_{2n}^{n}-C_{2n}^{n-1}

要使序列合法,在任何一個前綴中進棧次數都不能少於出棧次數\ldots
後面就不用我說了吧,和上面的問題又是一模一樣的了


312排列

一個長度爲nn的排列aa,只要滿足i<j<ki<j<kaj<ak<aia_j<a_k<a_i就稱這個排列爲312312排列
nn的全排列中不是312312排列的排列個數

答案也是卡特蘭數

我們考慮312312排列有什麼樣的特徵
如果考慮一個排列能否被1,2,3,,n1,n1,2,3,\ldots,n-1,n排列用進棧出棧來表示
那麼312312排列就是所有不能被表示出來的排列
那麼這個問題就被轉化成進出棧問題了


不相交弦問題

在一個圓周上分佈着 2n2n個點,兩兩配對,並在這兩個點之間連一條弦,要求所得的2n2n條弦彼此不相交的配對方案數
n=4n=4時,一種合法的配對方案爲如圖

p3.png

合法的序列個數爲C2nnC2nn1C_{2n}^{n}-C_{2n}^{n-1}

這個問題沒有上面的問題那麼顯然,我們規定一個點爲初始點,然後規定一個方向爲正方向
如規定最上面那個點爲初始點,逆時針方向爲正方向
然後我們把一個匹配第一次遇到的點(稱爲起點)旁邊寫一個左括號((,一個匹配第二次遇到的點(稱爲終點)旁邊寫一個右括號))
如圖

p4.png

看出來嗎,在規定了這樣的一個順序後,在任意一個前綴中起點的個數都不能少於終點的個數
於是這又是一個卡特蘭數列了


二叉樹的構成問題

nn個點,問用這nn個點最終能構成多少二叉樹

答案仍然是卡特蘭數列

這個問題不是用上面的方法,是用遞歸定義的卡特蘭數

一個二叉樹分爲根節點,左子樹,右子樹
其中左子樹和右子樹也是二叉樹,左右子樹節點個數加起來等於n1n-1
ii個點能構成fif_i個二叉樹
我們枚舉左子樹有幾個點可得
fn=f0fn1+f1fn2++fn1f0f_n=f_0*f_{n-1}+f_{1}*f_{n-2}+\ldots+f_{n-1}*f_{0}
這個和卡特蘭數列的遞歸定義是一模一樣的


凸多邊形的三角劃分

一個凸的nn邊形,用直線連接他的兩個頂點使之分成多個三角形,每條直線不能相交,問一共有多少種劃分方案

答案還是卡特蘭數列

我們在凸多邊形中隨便挑兩個頂點連一條邊,這個凸多邊形就會被分成兩個小凸多邊形,由於每條直線不能相交,接下來我們就只要求這兩個小凸多邊形的劃分方案然後乘起來即可

和二叉樹的構成問題一樣,我們枚舉大凸多邊形被分成的兩個小凸多邊形的大小即可


階梯的矩形劃分

一個階梯可以被若干個矩形拼出來
圖示是兩種劃分方式

p5.png
p6.png

像下圖是不合法的劃分方式
p7.png

問,一個nn階矩形有多少種矩形劃分

答案仍然是卡特蘭數列

我們考慮階梯的每個角

如圖
p8.png

每個角一定是屬於不同的矩形的,我們考慮和左下角屬於一個矩形的是哪個角
這個矩形將這個梯形又分成兩個小梯形,如圖

p9.png

於是我們又可以寫出遞推式了
和卡特蘭數列的遞歸式是一樣的

卡特蘭數就講這麼多吧

如有哪裏講得不是很明白或是有錯誤,歡迎指正
如您喜歡的話不妨點個贊收藏一下吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章