演算法 卡特蘭Catalan數

2021-08-08 13:04:43 字數 1735 閱讀 6111

catalan數是組合數學中乙個常在各種計數問題中出現的數列。一般項公式為

cn的另乙個表達形式為

一般來說,我們程式設計時使用遞推關係會更方便計算

或即:c(n) = c(1)*c(n-1) + c(2)*c(n-2) + … + c(n-1)c(1).

它的前幾項為: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796。可以先通過前幾項判斷問題是否屬於卡特蘭數。

這裡有一本書介紹了66個相異的可由卡塔蘭數表達的組合結構。 (英文pdf)

1.矩陣連乘問題

矩陣連乘 p=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?

2.子串問題

乙個有n個x和n個y組成的字串,且所有的部分字串皆滿足x的個數大於等於y的個數。以下為長度為6的dyck words:

***yyy xyxxyy xyxyxy xxyyxy xxyxyy

3.括號匹配問題

將上例的x換成左括號,y換成右括號,cn表示所有包含n組括號的合法表示式的個數(面試題參看演算法篇第7題):

((())) ()(()) ()()() (())() (()())

4.多邊形問題

將多邊形劃分為三角形問題。將乙個凸多邊形區域分成三角形區域(劃分線不交叉)的方法數?

5.相交點問題

在圓上選擇2n個點,將這些點成對連線起來使得所得到的n條線段不相交的方法數?

6.出棧次序問題

乙個棧(無窮大)的進棧序列為1、2、3、…、n,有多少個不同的出棧序列?

7.有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)

8.路徑問題

在n*n的格仔中,只在下三角行走,每次橫或豎走一格,有多少中走法?

9.乙個有n個1和n個-1組成的字串,且前k個數的和均不小於0,那這種字串的總數為多少?

10.二叉樹問題

給頂節點組成二叉樹的問題。

給定n個節點,能構成多少種形狀不同的二叉樹?

(一定是二叉樹!先取乙個點作為頂點,然後左邊依次可以取0至n-1個相對應的,右邊是n-1到0個,兩兩配對相乘,就是h(0)*h(n-1) + h(2)*h(n-2) + …… + h(n-1)h(0)=h(n)) (能構成h(n)個)

11.有n+1個葉子的滿二叉樹的個數?

12.用n個長方形填充乙個高度為n的階梯狀圖形的方法個數?

13 12個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?

卡特蘭數 Catalan

問題 程式設計之美 第4.3節中提到了 買票找零 問題,查閱了下資料,此問題和卡特蘭數 cn有關,其定義如下 卡特蘭數真是乙個神奇的數字,很多組合問題的數量都和它有關係,例如 yyy xyxxyy xyxyxy xxyyxy xxyxyy ab c d a bc d ab cd a bc d a b...

catalan(卡特蘭)數

一 h n h 0 h n 1 h 1 h n 2 h n 1 h 0 其中n 2 h 0 h 1 1 h n 4n 2 n 1 h n 1 n 1 h 0 1 h n c 2n,n 一般情況 要取模 下的求法 簡單的catalan模板題 這個題要取1e9 7的模,直接按照公式h n 4n 2 n ...

Catalan數(卡特蘭數)

卡特蘭數 規定h 0 1,而h 1 1,h 2 2,h 3 5,h 4 14,h 5 42,h 6 132,h 7 429,h 8 1430,h 9 4862,h 10 16796,h 11 58786,h 12 208012,h 13 742900,h 14 2674440,h 15 969484...