卡特兰数(Catalan number)

1、简单介绍

卡特兰数是组合数学中一个常出现于各种计数问题中的数列。其前几项为(从第0项开始):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845…
卡特兰数满足以下递推关系:

  1. Cn+1 = C0Cn + C1Cn-1 + ··· + CnC0
  2. (n - 3)Cn = n / 2 (C3Cn-1 + C4Cn-2 + C5Cn-3 + ··· + Cn-2C4 + Cn-1C3)

2、原理

设h(n)为catalan数的第n项,令h(0)=1,h(1)=1,catalan数满足递推式 [3] :
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
另类递推式:
h(n)=h(n-1)×(4n-2)/(n+1)
h(n+1)=h(n) × (4n + 2) / (n + 2)
递推关系的解为:
h(n)=C(2n,n)/(n+1) (n=0,1,2,…)
递推关系的另类解为:
h(n)=C(2n,n) - C(2n,n-1) (n=0,1,2,…)

3、卡特兰数应用

## 1、进出栈问题
问题描述:对于一个序列1,2,3,···,n有多少种不同的出栈序列
  	对于这类问题,假设k是最后一个出栈的元素,
  	比k早进栈且早出栈的有k - 1个数,那么一共有h(k - 1)种方案,
  	比k晚进栈且早出栈的有n - k 个数,一共有h(n - k)种方案,
	所以一共就是h(k - 1)h(n - k)种方案,
	k的取值为1到n,当k取不同值时,产生的出栈序列是相互独立的,所以结果可以累加,
	即h(n)= h(0)h(n-1)+h(1)h(n-2) + … + h(n-1)h(0)。
	
## 2、二叉树问题
问题描述:n个结点可以构成多少种不同的二叉树
	假设采用中序遍历,根节点是第k个被访问到,
	那么根的左子树共有k - 1个结点,右子树共有n - k个结点,
	k可以取1 - n,则转变成了进出站问题
	
## 3、凸多边形问题
问题描述:一个凸的n边形,用直线连接他的两个顶点使之分成多个三角形,
         每条直线不能相交,一共有多少种划分方案
    将凸多边形的顶点依次标记为p1、p2、··· pn,
    首先选择一条基边,显示这是多边形划分完之后的某个三角形的一条边,假设为p1、pn边
    用p1、pn和另外一个顶点pk做一个三角形,并将该n边形分成三部分,
    中间的是k边形,另一边为n - k + 1边形,i的取值范围为2 ~ n - 1,此时将pk视为确定的一点,
    根据乘法原理,f(n)的问题就等价于凸k边形的划分方案乘以凸n - k + 1多边形的划分方案数,
    即选择pk的这个顶点f(n) = f(k) × f(n - k + 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,...
    最后令f(2) = 1,f(3) = 1

4、卡特兰数证明

在这里插入图片描述
如图所以,将向右走看做是一个入栈的操作,向上走是一个出栈的操作,显然,在任意一个前缀中,入栈的次数是大于等于出栈的次数,这样的序列才是一个合法序列,即从(0,0)点走到(n,n)点的路径,且路线不能越过绿色的那条线
从2n个点中选择n个点,即为入栈的一个操作
所以方案数 = C(2n,n) - 不合法的方案数
那么问题就来到如何去求解不合法的方案数了
我们知道,任意一条不合法路线到达(n,n)点,即图中黄色所示,都会越过红色的线,那么将第一次不合法的点的之后的部分对红线做一个轴对称,可以发现,任意一条不合法的路线最终都会到达(n - 1,n + 1)这个点,所以不合法的方案书即为从2n个点从选择n - 1个点即C(2n,n - 1)
所以合法方案数 = C(2n,n) - C(2n,n - 1)
化简得C(2n,n) / n + 1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值