Catalan 數
真的不知道怎麼開頭。
學習 Catalan
數先從其定義入手。
\(f_i\) 是卡特蘭數第 \(i\) 項,令 \(f_0 = 1\)
遞迴式: \(f_i = \sum_{j = 0}^{i - 1} f_j \times f_{i - j - 1}\)
遞推式:$f_{i+1} = f_i \times \frac{2 \times (2i + 1)}{i+2} $
化簡可以得到:\(f_i = C_{2i}^{i} - C_{2i}^{n - 1}\)
根據遞迴式,可以知道卡特蘭數在描述:當我們可以對一個問題進行劃分,得到兩個子問題, 並且兩個子問題互不影響。
經典例題:凸多邊形的三角劃分
我們用若干條線連線 \(n\) 邊形的兩個頂點,線和線之間不可以相交,最後劃分成若干個三角形,問劃分方案的數量。
我們在初中就學習了這個東西。但本質上就是劃分,先來一刀,劃分成兩個小的凸多邊形。列舉劃分後左邊有多少個頂點,再把兩個小凸多邊形的方案數乘起來。
得到遞迴式:\(f_i = \sum_{j = 0}^{i - 1} f_j \times f_{i - j - 1}\)
一模一樣。
二叉樹的方案數
\(n\) 個點的二叉樹有多少種。區分左兒子和右兒子,即把左右兒子直接交換也算新的。
二叉樹也是非常經典的劃分成兩塊的問題。所有還是列舉左兒子節點數,直接列出遞迴式。
\(f_i = \sum_{j = 0}^{i - 1} f_j \times f_{i - j - 1}\)
一模一樣。
上述問題都是根據遞迴式來的。
我們接下來講一下:\(f_i = C_{2i}^{i} - C_{2i}^{i - 1}\)
二維平面路徑問題
在一個二維平面座標系上從 \((0,0)\) 到 \((n,n)\),每次只可以先上走一步,或向右走一步,問有多少條路線。有唯一要求,走過的點必須在直線 \(y =x\) 下,即在任意時刻向上走的次數必須小於等於向右走的次數。
去掉唯一條件,就是用 \(n\) 個向上,\(n\) 個向右,問這 \(2n\) 個操作的所有排列。我們易得,在全是向上走的序列中,選 \(n\) 個出來變成向右。
考慮不合法路徑,對任意一個不合法路徑沿著直線 \(y = x + 1\) 映象,所有不和法路徑都到了這條線,且只有不和法路徑到了這條線。映象後終點變成了 \((n - 1,n+1)\) ,我們可以將不合法路徑按上述方法一一對映成從 \((0,0)\) 到 \((n - 1,n + 1)\) 的路徑,一共還是有 \(2n\) 個操作,只不過是選 \(n - 1\) 個當向右。
最後得到式子:\(f_i = C_{2i}^{i} - C_{2i}^{i - 1}\)
不相交弦問題
一個圓周上有 \(2n\) 個點,用弦將任意兩個連結起來,使得任意兩條線不相交。
我們將線改寫成一個起點,一個終點。欽定起點和順時針遇到的第一個終點連成一條線。我們可以做到一個一一對映。
還是從可以相交的角度考慮,易得共有 \(C_{2i}^{i}\) 種方案。
不合法的情況一定是一個終點沒得連,就是前面的起點全被匹配了,所以還是和上述的 二維平面路徑問題
一樣,即任意時刻起點的數量一定大於終點的數量。
最後得到:\(f_i = C_{2i}^{i} - C_{2i}^{i - 1}\)
More
卡特蘭數在到處都存在:括號序列的數量,進棧出棧,312 排列…理解到其本質就是對問題的劃分,選取發生事件方案進行一一對映。其實就很簡單了。