我們以一道題為例來介紹卡特蘭數:
給定n109+'>n
個0'>0
和n'>n個1
'>1,它們將按照某種順序排成長度為2
n'>2n的序列,求它們能排列成的所有序列中,能夠滿足任意字首序列中0
'>0的個數都不少於1
'>1的個數的序列有多少個。
輸出的答案對109+
7'>109
+7取模。
7'>為了便於解決,我們可以把這個問題轉化成:
109+109+7'>給定乙個n*n的矩陣,每一步只能往右走或者往上走,求從左下角頂點走到右上角頂點所有方案中,往右走的步數不少於往上走的步數的方案的數量,並且對109+7取模。
7'>我們再將目標進行一步轉化:
109+109+7'>合法路徑數 = 總路徑數 - 非法路徑數
7'>其中總路徑數顯然為組合數c12
6,故接下去只需求非法路徑數即可。109
+7'>我們舉n=6的例項來看:109
+7'>如下圖:109
'>從(0,0)走到(6,6)的路徑所有路徑就是總路徑。109
+7'>顯然,所有黑線以下的路徑皆為合法路徑,如圖中綠線所示路徑就是一條合法路徑。109
+7'>而任何一條經過紅線的路徑一定是非法路徑,如圖中藍線所示路徑。109
+7'>那麼我們將該非法路徑第一次經過紅線後的部分關於紅線作對稱,如圖中黃線所示。109
+7'>不難發現,任何一條非法路徑進行如上的對稱操作後終點一定是(5,7)。109
+7'>進而又可以發現,從(0,0)到(5,7)的任何一條路徑進行如上對稱操作後一定是一條非法路徑。109
+7'>故從(0,0)到(5,7)的路徑與非法路徑構成雙射。109
+7'>那麼顯然,非法路徑數即是組合數c12
5。109+
7'>所以合法路徑數就是c126 - c125。109
+7'>而我們又可以發現,c2n
n - c2n
n-1 = c2n
n/(n+1)。109
+7'>這就是卡特蘭數。109
+7'>而上述該題正是卡特蘭數的乙個應用。
卡特蘭數:
卡特蘭數又稱卡塔蘭數,卡特蘭數是組合數學中乙個常出現在各種計數問題中的數列。以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名。原理:
設h(n)為catalan數的第n項,令h(0)=1,h(1)=1,catalan數滿足遞推式:卡特蘭數的常見應用: 一、出棧次序h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)
例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
另類遞推式:
h(n)=h(n-1)*(4*n-2)/(n+1);
遞推關係的解為:
h(n)=c(2n,n)/(n+1) (n=0,1,2,...)
遞推關係的另類解為:
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)
乙個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?二、括號化
矩陣連乘: p=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?(h(n)種)三、凸多邊形三角劃分
在乙個凸多邊形中,通過若干條互不相交的對角線,把這個多邊形劃分成了若干個三角形。任務是鍵盤上輸入凸多邊形的邊數n,求不同劃分的方案數f(n)。比如當n=6時,f(6)=14。四、給定節點組成二叉搜尋樹
給定n個五、n對括號正確匹配數目節點,能構成多少種不同的
二叉搜尋樹
?(能構成h(n)個)
給定n對括號,求括號正確配對的字串數。
組合數學 卡特蘭數總結
卡特蘭數 問題 n對括號有多少種合法的匹配方式?卡特蘭數的常見應用之一 結論 對於n對括號,合法的排列共有c n,2n c n 1,2n 基本思路 考慮n對括號,有n個 和n個 對於任意乙個 其前面必定有乙個 跟他對應,如果沒有則是非法序列。也就是說,對於 其前面的 的數量必須大於等於 的數量。假設...
神奇的組合數學 卡特蘭數
定義 令h 0 1 h 1 1 catalan數滿足遞推式。h n h 0 h n 1 h 1 h n 2 h n 1 h 0 n 2 通項公式 證明如下 摘自taocp的原練習題 數競黨很少用不嚴格證明的定理 1.括號對 合法的括號對對數答案為h n 2.二叉樹 合法的樹有答案為h n 3.分多邊...
數學 組合數學 Lucas定理 卡特蘭數
n n的方格,從左上到右下畫一條線。乙個機械人從左上走到右下,只能向右或向下走。並要求只能在這條線的上面或下面走,不能穿越這條線,有多少種不同的走法?由於方法數量可能很大,只需要輸出mod 10007的結果。卡特蘭數 lucas定理 此題就是乙個模板題 include include include...