卡特兰数

来源:互联网 发布:美孚一号 知乎 编辑:程序博客网 时间:2024/04/29 15:26

卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 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
另类递推式[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,...)

应用

矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n-1)种)

平衡括号

平衡括号:在一个合法的算术表达式中可以出现的括号都是平衡括号,更专业一点的说法应该是“所有的左括号和右括号可以建立一对一的对应关系,并且左括号在对应的右括号左侧”。像()(), (())(), (()())(()) 都是平衡括号,但是(()))(, ()())() 就不是平衡括号。

观察一下特点,判断所给的一个括号串是不是平衡很容易:设置一个计数器,初始值为 0,然后从左向右数,遇到左括号 +1,遇到右括号 -1,在过程中不出现负数,并且最终的计数器还是 0,那么就是平衡括号;除此之外就是非平衡括号。

现在的问题是,如果有 n 对括号,问平衡的情况有多少种?暂时可以数一下 n = 1, 2, 3, 4 时的情况:

n = 1: ()n = 2: ()(),   (())n = 3: ()()(),  ()(()), (())(), (()()), ((()))n = 4:()()()(), ()()(()), ()(())(), ()(()()), ()((())), (())()(), (())(()), (()())(), ((()))(), (()()()), (()(())), ((())()), ((()())), (((())))
则n对括号就有平衡括号h(n)种。

入栈出栈

问:n 个数入栈出栈,问情况有多少种?

比如全部入进去然后倒退出栈是 1 种;入一个出一个,全部都这样,是 1 种。入栈出栈的情况和n个数相不相同没有关系。因为可以视第一个入栈的为 1,第二个为 2,最后一个为 n。如果是 n 个相同的数的入栈出栈情况,假设数字都是括号,入栈是左括号,出栈是右括号,那么一种入栈出栈情况应该就对应平衡括号中的一种情况,所以,该问题和平衡括号是等价问题。

走方格

问:一个 n*n 的方格,从左下角走到右上角,只能向右和向上走,但是不能绕过左下角和右上角确定的对角线,问有多少种走法?

如果将向右走看做是入一下栈,向上走是出一下栈,不能绕道对角线以上,也就是一种合法的入栈出栈,从左下角开始到右上角,要入 n 次栈出 n 次栈,所以一种走法对应一种 n 个数的入栈出栈情况,于是,此问题和入栈出栈是等价问题;

二叉树的形状

问:n 个结点的二叉树的形状有多少种?

所谓的二叉树,就是有一个根结点,有棵左子树还有一棵右子树。n = 3: ()()(), ()(()), (())(), (()()), ((())) 时的括号匹配,me 们换个角度看这个表示:第一个成对的括号是树根,括号内部的子串和括号右边的子串依然是平衡括号串,把内部的看做是左子树,把右边的看成是右子树,比如(())()对应的是有一个左节点和一个右节点的二叉树,()()() 表示只有右子树的二叉树(右子树只有一个右结点);如果上面的对应成立(递归证明),那么二叉树的情况就和平衡括号是等价问题;

凸多边形三角划分

在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。比如当n=6时,f(6)=14。
分析
如果纯粹从f(4)=2,f(5)=5,f(6)=14,……,f(n)=n慢慢去归纳,恐怕很难找到问题的递推式,我们必须从一般情况出发去找规律。
因为凸多边形的任意一条边必定属于某一个三角形,所以我们以某一条边为基准,以这条边的两个顶点为起点P1和终点Pn(P即Point),将该凸多边形的顶点依序标记为P1、P2、……、Pn,再在该凸多边形中找任意一个不属于这两个点的顶点Pk(2<=k<=n-1),来构成一个三角形,用这个三角形把一个凸多边形划分成两个凸多边形,其中一个凸多边形,是由P1,P2,……,Pk构成的凸k边形(顶点数即是边数),另一个凸多边形,是由Pk,Pk+1,……,Pn构成的凸n-k+1边形。
此时,我们若把Pk视为确定一点,那么根据乘法原理,f(n)的问题就等价于——凸k多边形的划分方案数乘以凸n-k+1多边形的划分方案数,即选择Pk这个顶点的f(n)=f(k)×f(n-k+1)。而k可以选2到n-1,所以再根据加法原理,将k取不同值的划分方案相加,得到的总方案数为:f(n)=f(2)f(n-2+1)+f(3)f(n-3+1)+……+f(n-1)f(2)。看到此处,再看看卡特兰数的递推式,答案不言而喻,即为f(n)=h(n-2) (n=2,3,4,……)。
最后,令f(2)=1,f(3)=1。

其他相关题目

一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?h(n)
在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?h(n)
有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出)
解:5元钞票为A,10元钞票为B
n=1时,只有一种方法:AB;
n=2时,2种方法:AABB、ABAB;
n=3时,5种方法AAABBB、AABBAB、ABABAB、AABABB、ABAABB;
依次,2n个人排队入场时,有h(n)种方法;





0 0
原创粉丝点击