卡特蘭數的初步學習


       前幾天做騰訊的在線筆試題遇到一道卡特蘭數的題目,想了好久才想起來怎么做。再仔細想想自己好像從來沒有系統地學習過卡特蘭數,於是就專門去研究了一下。

       一、關於卡特蘭數

       卡特蘭數是一種經典的組合數,經常出現在各種計算中,其前幾項為 : 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, ...

      二、卡特蘭數的一般公式

      卡特蘭數滿足以下性質:

      令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)-c(2n,n+1)(n=0,1,2,...)。這個公式還可以更簡單得化為 h(n)=C(2n,n)/(n+1)。后一個公式都可以通過前一個公式經過幾步簡單的演算得來,大家可以拿起筆試試,一兩分鍾就可以搞定。
      
      三、卡特蘭數的應用
      卡特蘭數經常出現在OI以及ACM中,在生活中也有廣泛的應用。下面舉幾個例子。
      1、 出棧次序:一個棧(無窮大)的進棧次序為1、2、3……n。不同的出棧次序有幾種。
            我們可以這樣想,假設k是最后一個出棧的數。比k早進棧且早出棧的有k-1個數,一共有h(k-1)種方案。比k晚進棧且早出棧的有n-k個數,一共有h(n-k)種方案。所以一共有h(k-1)*h(n-k)種方案。顯而易見,k取不同值時,產生的出棧序列是相互獨立的,所以結果可以累加。k的取值范圍為1至n,所以結果就為h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)。
            出棧入棧問題有許多的變種,比如n個人拿5元、n個人拿10元買物品,物品5元,老板沒零錢。問有幾種排隊方式。熟悉棧的同學很容易就能把這個問題轉換為棧。值得注意的是,由於每個拿5元的人排隊的次序不是固定的,所以最后求得的答案要*n!。拿10元的人同理,所以還要*n!。所以這種變種的最后答案為h(n)*n!*n!。
       
     2、 二叉樹構成問題。有n個結點,問總共能構成幾種不同的二叉樹。
            我們可以假設,如果采用中序遍歷的話,根結點第k個被訪問到,則根結點的左子樹有k-1個點、根結點的右指數有n-k個點。k的取值范圍為1到n。講到這里就很明顯看得出是卡特蘭數了。這道題出現在2015年騰訊實習生的在線筆試題中。有參加過的同學想必都有印象。
  
     3、 凸多邊形的三角形划分。一個凸的n邊形,用直線連接他的兩個頂點使之分成多個三角形,每條直線不能相交,問一共有多少種划分方案。
             這也是非常經典的一道題。我們可以這樣來看,選擇一個基邊,顯然這是多邊形划分完之后某個三角形的一條邊。圖中我們假設基邊是p1pn,我們就可以用p1、pn和另外一個點假設為pi做一個三角形,並將多邊形分成三部分,除了中間的三角形之外,一邊是i邊形,另一邊是n-i+1邊形。i的取值范圍是2到n-1。所以本題的解c(n)=c(2)*c(n-1)+c(3)*c(n-2)+...c(n-1)*c(2)。令t(i)=c(i+2)。則t(i)=t(0)*t(i-1)+t(1)*t(i-2)...+t(i-1)*t(0)。很明顯,這就是一個卡特蘭數了。
            
        4、 其他。諸如括號匹配問題、01序列問題、n邊形格子從左下角走到右上角不跨過對角線問題。這些都是卡特蘭數,其他問題也基本上是上面問題的變種。證明過程就不再贅述了。
 
        四、 卡特蘭數通項公式的證明。
        下面這篇文章圖文並茂、寫得很好,我沒有把握寫得比他更好。大家想看可以點鏈接。 http://blog.sina.com.cn/s/blog_6917f47301010cno.html
           
      

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM