卡特兰数

卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列。

卡特兰数前几项为 :

C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=16796

输入一个整数n,计算h(n)。

令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)=11+11=2

h(3)=h(0)h(2)+h(1)h(1)+h(2)h(0)=12+11+21=5

递推关系的解为:

卡特兰数的应用:

1,出栈种类

int f[100];//f[i]表示i个数的出栈序列有多少个

//将n个数一次标号为1,2,3,...n 假设第k个数最后出栈,即最后输出的n个数中最后一个为k

//k前面有k-1个数先出栈有f[k-1]种情况,k后面有n-k个元素,有f[n-k]种情况

2,括号匹配

3,矩阵链乘

4,n个节点构成二叉树有几种情形

5,圆上的不相交线段数量

6,凸多边形三角剖分

7,找零钱

posted on 2021-11-10 22:41  naiji  阅读(246)  评论(0)    收藏  举报