卡特蘭數Catalan number的應用

卡特蘭數(Catalan number)的應用

  卡特蘭數是一個特殊的數列,基於這個數列,可以找出很多有趣的問題,對於我們學計算機的而言,與這個數列打交道是不可避免了,舉一個很經典的例子。我之前在棧的壓入、彈出序列這篇文章中講到過這個給定入棧序列,判斷是否是合法的出棧序列。
  與該問題類似的問題有很多,如果我們把問題進一步深入,我們去研究給定n個字符的入棧合法的出棧序列的種數是多少,這個時候,卡特蘭數就會隨之浮現出來。事實上我們耐心去思考,就能得到卡特蘭數的遞推公式,但是我們這裏直接給結論。

使用場景

  給定n個元素入棧,我們一共可以得到的合法出棧序列的個數就是卡特蘭數第n項。,除此之外,這個神奇的數列還是以下諸多問題的解。

  • 10個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問有多少種排列方式?
  • 圓周上有標號爲1,2,3,4,……,2n的共計2n個點,這2n個點配對可連成n條弦,且這些弦兩兩不相交的方式數
    • 將一個凸N+2多邊形區域分成三角形區域的方法數
    • 圓桌周圍有 2n個人,他們兩兩握手,但沒有交叉的方案數
  • 遊樂園門票1元一張,每人限購一張。現在有10個小朋友排隊購票,其中5個小朋友每人只有1元的鈔票一張,另5個小朋友每人只有2元的鈔票一張,售票員沒有準備零錢。問:有多少種排隊方法,使售票員總能找的開零錢
  • 甲乙兩人比賽乒乓球,最後結果爲20∶20,問比賽過程中甲始終領先乙的計分情形的種數。
  • 飯後,姐姐洗碗,妹妹把姐姐洗過的碗一個一個放進碗櫥摞成一摞。一共有n個不同的碗,洗前也是摞成一摞的,也許因爲小妹貪玩而使碗拿進碗櫥不及時, 姐姐則把洗過的碗摞在旁邊,問:小妹摞起的碗有多少種可能的方式?
  • 一個汽車隊在狹窄的路面上行駛,不得超車,但可以進入一個死衚衕去加油,然後再插隊行駛,共有n輛汽車,問共有多少種不同的方式使得車隊開出城去?
  • 矩陣連乘/表達式加括號/n個括號的組合
  • n個節點組成不同構的二叉樹的個數
    • 2n+1個不同構無度爲1的二叉樹的個數,給上個問題的所有孩子節點補上節點
  • 表示所有在n×n格點中不越過對角線的單調路徑的個數。一個單調路徑從格點左下角出發,在格點右上角結束,每一步均爲向上或向右
  • 表示用n個長方形填充一個高度爲n的階梯狀圖形的方法個數
      我有充分的自信,以後肯定會遇到這些問題中的一個。這些問題的解全都是卡特蘭數,當然我的整理不可能覆蓋所有的應用,只是讓大家多見一些情形,然後碰到類似的情形學會轉換。

計算公式

  先了解了應用,接下來就是這個數列的求解了。這個數列研究了這麼多年,求解方式也是很多。這裏給出幾種常用的求解公式,大家選擇適合自己的記憶即可。使用組合這個比較好記,使用連乘這個比較好寫代碼。
卡特蘭數求解公式
  到最後我們再給出給出這個數列的前幾項:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862。需要注意這幾項是從0開始的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章