定義
1.卡特蘭數是一種數列,以比利時的數學家歐仁·查理·卡塔蘭命名。
2.卡特蘭數列:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012……
公式
- 令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) 【1】
例如:
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 - 項與項之間遞推式
h(n)=h(n - 1)(4·n - 2)/(n + 1)(n≥1) 【2】 - 組合公式
h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】
公式理解
將遞推公式【1】轉化成給定N個節點,能構成多少種形狀不同的二叉樹問題。
將二叉樹分為左子樹和右子樹以及根節點,已知根節點需要1個節點數,令i(i<N)個節點構成左子樹,得到N - i - 1個節點構成右子樹。這時可將由i個節點的左子樹遞歸看成由i個節點構成的樹的問題,同樣N-i-1個節點的右子樹仍可遞歸看成N-i-1個節點構成的樹。
h(i)·h(N - i - 1)即第i(0≤i≤N-1)種情形,又因為i的取值范圍為[0,N-1],所以得:
h(n)= h(0)h(n - 1) + h(1)h(n-2) + ... + h(n - 1)h(0) (n≥2)【1】。
當N=3時的二叉樹種類:
將遞推公式【3】轉化為01排列問題,有n對01排成一個序列,從左往右統計該序列0和1的個數,1的個數小于等于0的個數即視為合法序列。
將n個0放入2n個位置上有C(2n,n)個組合情況為全排列情形,再減去不合法序列即為卡特蘭數。
例如:
001101為一合法序列
011010為不合法序列(異常位為3)
經分析得知不合法序列的異常位總會出現在奇數位。
假設異常位為2i+1(0≤i<n),由此可知[0,2i+1]序列有i個0,i+1個1,在[2i+1,2n]序列有n-i個0,n-i-1個1,將[2i+1,2n]序列中的1置換為0,0置換為1,如(011010==>011101)由此可知2n的序列中有n-1個0,n+1個1,將n-1個0放入2n個位置上則有C(2n,n-1)個組合情況,該排列即為不合法情形。
所以可得:h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】
例題:
1. n對括號匹配問題:
題目:
給出n對括號,問有多少種正確排列方式?
問題分析
當n為3時代表有3對括號,用0代表'(',用1代表')'
比如010011對應著
()(())
000111對應著
((()))
反之若101010對應著(不符合的情形)
)()()(
問題轉換為,這樣的滿足條件的01序列有多少個。
2. 高矮排列問題:
題目:
12個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?
問題分析:
我們先把這12個人從矮到高放入隊列(0-1-2-3-4-5-6-7-8-9-10-11),然后依照出隊的次序選擇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
反之若101010101010就對應著(不符合的情形)
第一排:1 3 5 7 9 11
第二排:0 2 4 6 8 10
問題轉換為,這樣的滿足條件的01序列有多少個。
...0
.
.
.
0
。。