面試收集 卡特蘭數(Catalan數 應用

2022-04-10 09:57:20 字數 1873 閱讀 5696

引言:有高矮不同的12個人,現在要他們對應排成兩列,保證兩列分別有序,且對應位置總是第一列比第二列矮,請問有多少種排列方式?

這是蘑菇街筆試的時候乙個題目,當時陷入了列舉分類的死迴圈中,殊不知如果知道catalan數的概念,直接就計算出來了。catalan組合數學上的遞迴式定義如下,這個遞迴定義是尤拉在研究下面問題5時得出的乙個式子,是catalan數起源的一種說法。

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)=c(2n,n)-c(2n,n+1)=c(2n,n)/(n+1)

注:在參考四中另有一種定義h(n)=h(1)*h(n-1)+h(2)*h(n-2)+…h(n-1)*h(1)=c(2n-2,n-1)-c(2n-2,n)=c(2n-2,n-1)/n,這只是個如何確定n的問題,對分析題意影響不大,下面的分析基於第一種定義。

由上面的定義可知,有兩種情況是catalan數來算,一種是用組合的形式給出結論的,即最後能算出c(2n,n)-c(2n,n+1),如下面列舉的例子1,2,3,8,其實其它幾個例子也能轉化成這種形式,但是不直觀,其它幾個例子直觀上會有h(1)*h(n-1)+h(2)*h(n-2)+…h(n-1)*h(1)的形式。

catalan數有在很多場景會見到,常見的有:

1. 直角等邊三角形網路(直角邊長為n)的路徑問題(見參考1)—h(n-1)

思路:在2(n-1)個位置中找出哪(n-1)步朝上(c(2n-2,n-1)),並刪除超過對角線的情況c(2n-2,n),即h(n-1)=c(2n-2,n-1)-c(2n-2,n)

2.出棧入棧問題(見參考1),棧無窮大,n個數?—h(n)

思路:選定n個位置入棧,n個位置出棧,c(2n,n),去除出棧入棧順序不對的c(2n,n+1),因此為h(n)=c(2n,n)-c(2n,n+1)

3.2n個人買票找零問題(售票處無零錢,觀影者一半手持5塊,一半手持10塊,票價5塊)—h(n)

思路同2.

4.n矩陣相乘的括號問題h(n-1)

思路: 分析有如下形式

這是catalan數的形式,f(1)=1,f(2)=1,故f(n)=h(n-1)

5.凸n邊形分割成多少個三角形(見參考4)—h(n-1)

思路,具體思路見參考4,分析同4.

6.n個可以構造出多少種不同的二叉樹—h(n)

思路,選定乙個數作為根節點,因此有:

,這也是catalan數的特徵,f(0)=1,f(1)=1,f(2)=2,因此有f(n)=h(n)

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

思路:如圖,由於不相交,分割的時候若a1和a2k有連線,那麼左側有2(k-1)個點,右側有2(n-k),所以:

f(2)=1,f(4)=1,故f(2n)=h(n-1)

8.有高矮不同的12個人,現在要他們對應排成兩列,保證兩列分別有序,且對應位置總是第一列比第二列矮,請問有多少種排列方式?

此題在參考1中描述得非常準確

參考1:

參考2:

參考3:

參考4:

卡特蘭數 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...