卡特兰数及应用

卡特兰数(Catalan Number)是一连串整数序列,其通项公式为
C a t a l a n ( n ) = C 2 n n n + 1 Catalan(n)=\frac{C_{2n}^{n}}{n+1} Catalan(n)=n+1C2nn

前几项为(从0开始):
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. Duck Word: 设一个字符串长度为2n,分别由n个x和y组成,求所有的前缀子串皆满足x的个数大于等于y的个数,带入公式计算,假设n=3:
    C a t a l a n ( 2 n ) = C 2 n n n + 1 = C 6 3 4 = 5 Catalan(2n)=\frac{C_{2n}^{n}}{n+1}=\frac{C_{6}^{3}}{4} =5 Catalan(2n)=n+1C2nn=4C63=5
    可以看出共有5种情况,以下设这五种序列
    XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY

  2. 将上述的X换成左括号,Y换成右括号,就可以将问题改成求有多少组包含n组括号的合法运算公式个数
    ((()))     ()(())()       ()()()     (())()      (()())

  3. n个节点组成的不同构二叉树个数

  4. 2n+1个节点组成的不同构满二叉树个数
    注意:这里的满二叉树定义为:只含有叶子节点以及度为0的节点的二叉树
    图片来自https://www.cnblogs.com/youxin/p/3293345.html
    以上均为满二叉树,只含有度为0和2的结点,不含有度为1的结点

  5. 通过连结顶点而将n + 2边的凸多边形分成三角形的方法个数在这里插入图片描述
    上图所示,六边形为Catalan(4),共有4中划分方法

  6. 表示n个元素的进出栈置换个数

  7. 表示所有在n × n格点中不越过对角线的单调路径的个数在这里插入图片描述
    上图n=4,结果为Catalan(2n)

递推公式:

C a t a l a n ( n ) = C a t a l a n ( n − 1 ) ∗ 4 ∗ n − 2 n + 1 Catalan(n)=Catalan(n-1)*\frac{4*n-2}{n+1} Catalan(n)=Catalan(n1)n+14n2
做题数据不大的时候可以BigInteger打表O(∩_∩)O

BigInteger[] a=new BigInteger[105];
a[0]=BigInteger.ONE;
for(int i=1;i<101;i++) {
	a[i]=a[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值