卡特蘭數及應用

卡特蘭數(Catalan Number)是一連串整數序列,其通項公式爲
Catalan(n)=C2nnn+1 Catalan(n)=\frac{C_{2n}^{n}}{n+1}

前幾項爲(從0開始):
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. Duck Word: 設一個字符串長度爲2n,分別由n個x和y組成,求所有的前綴子串皆滿足x的個數大於等於y的個數,帶入公式計算,假設n=3:
    Catalan(2n)=C2nnn+1=C634=5 Catalan(2n)=\frac{C_{2n}^{n}}{n+1}=\frac{C_{6}^{3}}{4} =5
    可以看出共有5種情況,以下設這五種序列
    XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY

  2. 將上述的X換成左括號,Y換成右括號,就可以將問題改成求有多少組包含n組括號的合法運算公式個數
    ((()))     ()(())()       ()()()     (())()      (()())

  3. n個節點組成的不同構二叉樹個數

  4. 2n+1個節點組成的不同構滿二叉樹個數
    注意:這裏的滿二叉樹定義爲:只含有葉子節點以及度爲0的節點的二叉樹
    圖片來自https://www.cnblogs.com/youxin/p/3293345.html
    以上均爲滿二叉樹,只含有度爲0和2的結點,不含有度爲1的結點

  5. 通過連結頂點而將n + 2邊的凸多邊形分成三角形的方法個數在這裏插入圖片描述
    上圖所示,六邊形爲Catalan(4),共有4中劃分方法

  6. 表示n個元素的進出棧置換個數

  7. 表示所有在n × n格點中不越過對角線的單調路徑的個數在這裏插入圖片描述
    上圖n=4,結果爲Catalan(2n)

遞推公式:

Catalan(n)=Catalan(n1)4n2n+1Catalan(n)=Catalan(n-1)*\frac{4*n-2}{n+1}
做題數據不大的時候可以BigInteger打表O(∩_∩)O

BigInteger[] a=new BigInteger[105];
a[0]=BigInteger.ONE;
for(int i=1;i<101;i++) {
	a[i]=a[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章