卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。
卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790,
令h(0)=1,h(1)=1,catalan数满足递推式[1]:
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)另类递推式[2]:h(n)=h(n-1)*(4*n-2)/(n+1);
递推关系的解为:h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 递推关系的另类解为:h(n)=c(2n,n)-c(2n,n+1)(n=0,1,2,...)模型为
0 简单的测试: 找到 一个模型的前几项等于卡特兰数1,1,2,5,14
1 (这个是充分条件)卡特兰数的应用可归结为一句话:n个a和n个b组成一个排列,保证它的前缀中a的个数大于b的个数 或者
2 (这个是充要条件)归结为这个组合排列问题可以进行分段,用卡特兰数表示h(n)=∑h(i-1)h(n-i)
注意:第一个元素一般是固定的;进行分段时,使用第一个元素对整个序列进行划分。或者
3 (这个是充要条件)转换为h(n)=c(2n,n)-c(2n,n+1)(n=0,1,2,...)
4 等价于在方格中计算路径数
实质上都是递推等式的应用
括号化
矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种) 建模:2n个括号即n对括号,第一个左括号是不变的,那么与之相匹配的括号在位置2i。则把整体的分成两段:在第一队括号内的有i-1对括号,在在第一个括号外的有n-i对括号。则h(n)=∑h(i-1)h(n-i),i从1到n
出栈次序
一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?建模:此处百度百科里面说的较为含糊。
假设第一个元素的出栈序号为i,那么出栈分成两段:前i-1个数和后n-i个数
第一个元素出栈,说明栈为空;第一个元素的出栈序号为i,说明有在此之前i-1个元素出栈,在此之后有n-i个元素出栈。
凸多边形三角划分
在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。现在的任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。比如当n=6时,f(6)=14。类似问题
一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路? 在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
给定节点组成二叉树
给定N个节点,能构成多少种不同的二叉树?[7] (能构成h(N)个) (这个公式的下标是从h(0)=1开始的)
1 就是给定n个元素,依次通过一个栈,求可能的出栈序列的个数。
下面我们来看一种图形化的方法证明这个等式,很容易理解的。
我们把对n个元素的n次进栈和n次出栈理解为在一个n * n的方格中向右走n次(代表进栈),向上走n次(代表出栈)。由于出栈次数不能大于进栈次数,我们可以得到这样一个方格:
每次沿着实线走,所以,只要求出从方格左下角到右上角路径的个数即可。
我们把表格补全,考虑每一条不合法的路径,如
在这条路径上,必然有一个地方连续两次向上,即从图上蓝点处开始,而且这个点必然在如图所示的绿线上。我们以这个点为起点,把到左上角整条路经取反,也就是对称上去,得到一条新路径,但是超出了表格。我们知道,这条路径包括n + 1次向上和n – 1次向下,也就是在一个(n + 1) * (n - 1)的方格中。由此我们知道,一条不合法路径必然对应一个(n + 1) * (n - 1)方格中的路径。同样地,对于(n + 1) * (n - 1)方格中任意一条路径,以这条路径与绿线的第一个交点为起点到方格的右上方全部取反,即可得到一个在n * n方格中的不合法路径。
我们通过这样的方法确定了每条不合法路径与一个(n + 1) * (n - 1)方格中路径的一一对应关系,因此,方格中不合法路径总数为C(2n, n - 1),而所有路径总数为C(2n, n),两式相减即为原组合等式。
大部分参考自:http://baike.baidu.com/view/2499752.htm
http://blog.163.com/wangenze_black@126/blog/static/110710515200962110481040/