卡特兰数
卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。
中文名卡特兰数
外文名Catalan number
解释
出现在各种计数问题中出现的数列
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, ...
递推式子
一
令h(0)=1,h(1)=1
h(n)= h(0)h(n-1)+h(1)h(n-2) + ... + h(n-1)h(0) (n>=2)
二
h(n)=h(n-1)(4n-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,...)
应用
例题一
题目描述:
已知一颗二叉树有n个结点,问:该二叉树能组成多少种不同的形态?
分析:
设该二叉树左子树有i个结点,则右子树就有n-i-1个结点
则可以得出:
dp[n]=Σ(i=0;i<=n-1;i++){dp[i]*dp[n-i-1]}
就是递推式子一
例题二
题目描述
有n个A和n个B排成一排,从第一个位置开始到任意位置,B的个数不能超过A的个数,问:
这样的排列有多少种
分析:
可以尝试用↗来表示A,用↘来表示B,那么我们可以画一个图标,
最终是一个等腰直角三角形,你会惊讶地发现画完以后任何时候A都≥B
发现其递推式子就是卡特兰数(别问为什么,记住就行,下次就是模板套路了)
例题三
问题描述
一个序列A1×A2×A3×……×An,可以加括号改变该序列的运算顺序,问:有多少种不同的运算顺序?
分析:
类似例题一,
dp[n]表示长度为n时有多少种不同的运算顺序
dp[n]=Σ(i=0;i<=n-1;i++){dp[i]*dp[n-i-1]}
例题四
欧拉多边形分割问题
我们可以用n-3条互不相交的对角线将n边形分成n-2个互相没有重叠的三角形,输出有多少种不同的分法。
如N=6时,如下所示
分析
(1)我们从最简单情况开始:N=3,f(3)=1;
(2)当N=4,f(4)=2;
(3)N边时
我们从节点1开始考虑,要想分割成三角形区域,1不能和与它相邻的点连接,
所以1可以连接3,4,...,N-1;
假设1连接i,则分割成的两个区域分别为i凸多边形和N+2-i凸多边形,
一半是重复情况,所以最终的分割方法为:
类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
例题五
题目描述
出栈次序问题。一个栈(无穷大)的进栈序列为1、2、3、...、n,有多少个不同的出栈序列?
分析
对于每一个数来说,必须进栈一次、出栈一次。
我们把进栈设为状态‘1’,出栈设为状态‘0’。
n个数的所有状态对应n个1和n个0组成的2n个数。
由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b)
问题转化为例题二
类似:一位大城市的律师在他住所以北n个街区和以东n个街区处工作,每天她走2n个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?
类似:有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)