1. 程式人生 > >Catalan數——卡特蘭數

Catalan數——卡特蘭數

一、Catalan數的定義

  令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(n) = C(2n,n)/(n+1),n=0,1,2,3,... (其中C(2n,n)表示2n個物品中取n個的組合數)

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

  問題分析:
  我們先把這12個人從低到高排列,然後,選擇6個人排在第一排,那麼剩下的6個肯定是在第二排.
  用0表示對應的人在第一排,用1表示對應的人在第二排,那麼含有6個0,6個1的序列,就對應一種方案.
  比如000000111111就對應著
  第一排:0 1 2 3 4 5
  第二排:6 7 8 9 10 11
  010101010101就對應著
  第一排:0 2 4 6 8 10
  第二排:1 3 5 7 9 11
  問題轉換為,這樣的滿足條件的01序列有多少個。

  觀察規律我們發現1的出現前邊必須有一個相應的0對應,所以從左到右的所有序列中0的個數要一直大於1的個數。那這種數列有多少種排列方式呢?

  那麼我們從左往右掃描,第一次出現1的個數等於0的個數是第k位,那麼在此之前,0的個數是大於1的個數的。在此之後,0的個數也是大於1的個數的。所以第k位0和1的個數第一次相等的排列有他們這兩部分的個數相稱的結果。那麼所有的k有多少種,則把它們相加起來,就是最後的排列數。這是一個遞迴的問題。

  即   h(n)=h(0)×h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0)

  如果把0看成入棧操作,1看成出棧操作,就是說給定6個元素,合法的入棧出棧序列有多少個。

  在<<計算機程式設計藝術>>,第三版,Donald E.Knuth著,蘇運霖譯,第一卷,508頁,給出了證明:
  問題大意是用S表示入棧,X表示出棧,那麼合法的序列有多少個(S的個數為n)
  顯然有c(2n, n)個含S,X各n個的序列,剩下的是計算不允許的序列數(它包含正確個數的S和X,但是違背其它條件)。
  在任何不允許的序列中,定出使得X的個數超過S的個數的第一個X的位置。然後在導致幷包括這個X的部分序列中,以S代替所有的X並以X代表所有的S。結果是一個有(n+1)個S和(n-1)個X的序列。反過來,對一垢一種型別的每個序列,我們都能逆轉這個過程,而且找出導致它的前一種型別的不允許序列。例如XXSXSSSXXSSS必然來自SSXSXXXXXSSS。這個對應說明,不允許的序列的個數是c(2n, n-1),因此h(n )= c(2n, n) - c(2n, n-1)。

三、遞推公式

 另類遞推式:

  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, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

 

四、相關問題

1、給定n個數,有多少種出棧序列?

(  問題的形象描述:

    飯後,姐姐洗碗,妹妹把姐姐洗過的碗一個一個放進碗櫥摞成一摞。一共有n個不同的碗,洗前也是摞成一摞的,也許因為小妹貪玩而使碗拿進碗櫥不及時,姐姐則把洗過的碗摞在旁邊,問:小妹摞起的碗有多少種可能的方式?

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

    P=A1A2A3……An,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?)
2、n個節點的二叉樹有多少種構型?

3、有n+1個葉子的滿二叉樹的個數?

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

神奇的卡特蘭數
5、將一個凸n+2邊形區域分成三角形區域的方法數?

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

7、n個長方形填充一個高度為n的階梯狀圖形的方法個數?

神奇的卡特蘭數

 

上面一些問題有些是同構的,但有些卻實在看不出聯絡來,他們的答案卻都為卡特蘭數。