卡特蘭數又稱卡塔蘭數,英文名catalan number,是
組合數學
中乙個常出現在各種計數問題中出現的
數列。以
比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名,其前幾項為 : 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, ...
令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(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
卡特蘭數的應用:
1矩陣鏈乘:p=a1*a2*a3*......an.改變括號的次序,共有多少種括號化的方案?
ans=h(n);
2、乙個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?
3、有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧)
4、在圓上選擇2n個點,將這些點成對連線起來,使得所得到的n條線段不相交的方法數。
5、給定n個節點,能構成多少種不同的
二叉樹?
卡特蘭數的求法,由於卡特蘭數比較大,因此我們要用陣列來存放卡特蘭數,定義ans二維陣列,ans[i][0]存放第i個卡特蘭數的長度.
#include#includeusing namespace std;
int ans[200][3000];
void ktl()//卡特蘭打表
while(carry)
for(int j=len;j>=1;j--)
while(!ans[i][len])
ans[i][0]=len; }}
int main()
cout<} return 0;
}
卡特蘭數及應用
卡特蘭數是組合資料中乙個常在各種計數問題中出現的數列,由比例時的數學家歐仁.查理.卡特蘭 1814 1894 命名。c0 1而c1 1,c2 2,c3 5,c4 14,c5 42,c6 132,c7 429,c8 1430,c9 4862 c10 16796 c11 58786 c12 208012...
卡特蘭數,高精度卡特蘭數
簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 1.cn表示長度2n的dyck word的個數。dyck word是乙個有n個x和n個y組成的字串。且全部的字首字串皆滿足x的個數大於等於y的個數。下面為長度為6的dyc...
卡特蘭數和超級卡特蘭數
這篇部落格主要是想講一下超級卡特蘭數 大施洛德數 順帶就想講一下卡特蘭數.卡特蘭數記為 c n c 1 1 forall n geq 2,c n sum c i c 前幾項大概是 1,1,2,5,14,42,132.直接遞推未免效率太低,我們考慮用生成函式優化.顯然有 c x c x 2 x 解得 ...