定义
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
。。