卡特蘭(Catalan)數入門詳解

SSL KJ發表於2020-10-04


基本概念

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

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

為了區分組合數,這裡用fn表示卡特蘭數的第n項
從零開始,卡特蘭數的前幾項為 1 , 1 , 2 , 5 , 14 , 42 , 132 , 429 , 1430 , 4862 , 16796 , 58786 , 208012 , 742900 , 2674440 , 9694845 , 35357670 , 129644790 … 1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790… 1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790


定義

遞迴定義

f n = f 0 ∗ f n − 1 + f 1 ∗ f n − 2 + … + f n − 1 f 0 fn=f0∗fn−1+f1∗fn−2+…+fn−1f0 fn=f0fn1+f1fn2++fn1f0,其中 n ≥ 2 n≥2 n2

遞推關係

f n = 4 n − 2 n + 1 f n − 1 f_n=4n−2n+1fn−1 fn=4n2n+1fn1

通項公式

f n = 1 n + 1 C n 2 n fn=1n+1Cn2n fn=1n+1Cn2n

經化簡後可得

f n = C n 2 n − C n − 12 n fn=Cn2n−Cn−12n fn=Cn2nCn12n

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


實際問題

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

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

合法路徑個數為Cn2n−Cn−12n

直接求不好,考慮求有多少種不合法路徑
路徑總數為在2n次移動中選n次向上移動,即Cn2n

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

p1.png

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

由於所有的不合法路徑一定會與 y = x + 1 y=x+1 y=x+1有這麼一個交點
我們可以得出,所有不合法路徑對稱後都唯一對應著一條到 ( n − 1 , n + 1 ) (n−1,n+1) (n1,n+1)的路徑
且所有到 ( n − 1 , n + 1 ) (n−1,n+1) (n1,n+1)的一條路徑都唯一對應著一條不合法路徑(只需將其對稱回去即可)
所以不合法路徑總數是 C n − 12 n Cn−12n Cn12n

那麼合法的路徑總數為 C n 2 n − C n − 12 n Cn2n−Cn−12n Cn2nCn12n

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


01序列
你現在有n個0和n個1,問有多少個長度為2n的序列,使得序列的任意一個字首中1的個數都大於等於0的個數
例如n=2時
1100 , 1010 1100,1010 1100,1010兩種合法序列
1001 , 0101 , 0110 , 0011 1001,0101,0110,0011 1001,0101,0110,0011都是不合法的序列

合法的序列個數為 C n 2 n − C n − 12 n Cn2n−Cn−12n Cn2nCn12n

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

擴充
如果是 n 個 1 , m 個 0 n個1,m個0 n1,m0呢?
不過是最後的終點變為了 ( n , m ) (n,m) (n,m)罷了
如果是1的個數不能夠比m少k呢
我們只需將 y = x + 1 y=x+1 y=x+1這條線上下移動即可


括號匹配
你有n個左括號,n個右括號,問有多少個長度為2n的括號序列使得所有的括號都是合法的

合法的序列個數為 C n 2 n − C n − 12 n Cn2n−Cn−12n Cn2nCn12n

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


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

合法的序列個數為 C n 2 n − C n − 12 n Cn2n−Cn−12n Cn2nCn12n

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


312排列
一個長度為n的排列a,只要滿足 i < j < k i<j<k i<j<k a j < a k < a i aj<ak<ai aj<ak<ai就稱這個排列為312排列
求n的全排列中不是312排列的排列個數

答案也是卡特蘭數

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


不相交弦問題
在一個圓周上分佈著 2n個點,兩兩配對,並在這兩個點之間連一條弦,要求所得的2n條弦彼此不相交的配對方案數
當n=4時,一種合法的配對方案為如圖
p3.png

合法的序列個數為Cn2n−Cn−12n

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

p4.png

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


二叉樹的構成問題
有n個點,問用這n個點最終能構成多少二叉樹

答案仍然是卡特蘭數列

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

一個二叉樹分為根節點,左子樹,右子樹
其中左子樹和右子樹也是二叉樹,左右子樹節點個數加起來等於n−1
設i個點能構成fi個二叉樹
我們列舉左子樹有幾個點可得
f n = f 0 ∗ f n − 1 + f 1 ∗ f n − 2 + … + f n − 1 ∗ f 0 fn=f0∗fn−1+f1∗fn−2+…+fn−1∗f0 fn=f0fn1+f1fn2++fn1f0
這個和卡特蘭數列的遞迴定義是一模一樣的


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

答案還是卡特蘭數列

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

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

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

p5.png

p6.png

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


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

答案仍然是卡特蘭數列

我們考慮階梯的每個角

如圖
p8.png

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

p9.png

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


相關文章