Wikipedia上的Catalan numbers:
In combinatorial mathematics, the Catalan numbers form a sequence of natural numbers that occur in various counting problems, often involving recursively defined objects. They are named for the Belgian mathematician Eugène Charles Catalan (1814–1894).
The nth Catalan number is given directly in terms of binomial coefficients by
The first Catalan numbers (sequence A000108 in OEIS) for n = 0, 1, 2, 3, … are
- 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.括号化问题。
矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(Cn-1 种)
多重幂计数问题: 设给定n个变量x1,x2…,xn。将这些变量依序作底和各层幂,可得n重幂如下
这里将上述n 重幂看作是不确定的,当在其中加入适当的括号后,才能成为一个确定的n重幂。不同的加括号方式导致不同的n重幂。例如,当n=4 时,全部4重幂有5个。http://blog.csdn.net/fisher_jiang/archive/2008/05/26/2483290.aspx
2.出栈次序问题。
一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列? 可参考《栈的计数》问题的算法分析 之算法三。
类似:有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)
3.将多边行划分为三角形问题。
在一个n个顶点的凸多边形中,插入对角线(对角线两两不相交)将多边形划分为三角形。
总共需要n-3条弦,将多边形切成n-2个小三角形。
设凸多边形n个顶点顺序为p[1],p[2],……,p[n],
它有n条边: <p[1]p[2]>, <p[2]p[3]>,……, <p[n-1]p[n]>, <p[n]p[1]>。
按顶点编号顺序,将其中的n-1条边写成下面这个序列:
<p[1]p[2]> <p[2]p[3]> <p[3]p[4]>…… <p[n-1]p[n]>,
则多边形的三角划分和这个序列的全括号化存在着一一对应的关系。
以五边形为例:
选定多边形的一条边 <p[1]p[n]>为基边,无论怎样分区域,基边总能在分成的三角形区域中的一个中。
该三角形区域又将凸多边形区域分成三个部分
令函数f(n)来表示n+1个顶点的多边形划分出的小三角数量,并规定f(1)=1,
根据划分点的选取过程可以看出,递推关系满足下列式子
f(n)=f(1)*f(n-1)+f(2)*f(n-2)+……+f(n-1)*f(1),这里n>=2
用递归的法子模拟上述过程,就能够输出全部的划分。
f(n)=C(2n-2,n-1)/n
类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数(有2n个人围着圆桌就坐,手臂不相及的握手的方法数是Catalan数Cn)
4.节点数为n的二叉树的个数为Cn,此问题等价于已知一棵树(n个节点)的前序遍历的顺序是1,2,3,4,。。。n, 中序遍历的个数。