Catalan数

卡特兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012......
Catalan数满足以下性质:
令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(n)=h(n-1)*(4*n-2)/(n+1)
当然,上面的递推公式太繁琐了,于是数学家们求出了递推关系的解的通项公式:
h(n)=C(2n,n)-C(2n,n-1)(n=0,1,2,...)
可以化简为 h(n)=C(2n,n)/(n+1) (n=0,1,2,...)

应用:

  1. 矩阵连乘,求括号化的方案有几种?
  2. 出栈次序,求一个进栈序列1~n有几种不同的出栈序列?
    假设序数k是最后一个出栈的数,比k早进栈早出栈的有k-1个数,共有h(k-1)中方案;比k晚进栈早出栈的有n-k个数,共有h(n-k)中方案。由于比k先进栈和比k后进栈的情况是相互独立的,所以可用乘法定理,共有h(n-k)*h(k-1)中,求和便得到卡特兰递推式。

另类分析:
对于每个数来说,必须进栈一次,出栈一次。设进栈状态为1,出栈状态为0,n个数的所有状态对应n个1和n个0组成的2n位二进制数。故序列的总数目=从左到右扫描由n个1和n个0组成的2n位二进制数,1的累计数大于等于0的累计数的方案种数。在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求:不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个 1和n-m-1个0。如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。
显然,不符合要求的方案数为c(2n,n+1)。由此得出输出序列的总数目=c(2n,n)-c(2n,n+1)=c(2n,n)/(n+1)=h(n)

类似问题: 买零找零
有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)

  1. 凸多边形三角划分
    在凸n边形上任选一个顶点k,则该点处可分割成凸k边形和凸n-k+1边形,故凸n边形的划分数f(n)为求和f(k)*f(n-k+1) (2<=k<=n-1),即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...) 向右平移2个单位。
    Catalan数_第1张图片
    image.png
  1. 给定n个节点,能构成多少种不同的二叉搜索树?
    假设采用中序遍历,根节点第k个被访问到,则根节点的左子树有k-1个节点,根节点的右子树有n-k个节点。k的取值为1到n.
  2. n对括号正确匹配数目
    给定n对括号,求括号正确匹配的形式有多少种?
    0对括号:[空序列] 1种可能
    1对括号:() 1种可能
    2对括号:()() (()) 2种可能
    3对括号:((())) ()(()) ()()() (())() (()()) 5种可能

你可能感兴趣的:(Catalan数)