卡特兰数

卡特兰数

卡特兰数的推导公式是:
f(n)=∑k=1nf(k−1)f(n−k)f(n) = \sum_{k=1}^n{f(k-1)f(n-k)}f(n)=k=1nf(k1)f(nk)
f(0)=1f(0) = 1f(0)=1
f(1)=1f(1) = 1f(1)=1
它和斐波那契数列是很相似的都是将后面的问题分解为前面的问题。

进出栈问题

栈是一种先进后出(FILO,First In Last Out)的数据结构.如下图1,2,3,4顺序进栈,那么一种可能的进出栈顺序是:1In→2In→2Out→3In→4In→4Out→3Out→1Out1In→2In→2Out→3In→4In→4Out→3Out→1Out1In2In2Out3In4In4Out3Out1Out, 于是出栈序列为1,3,4,2。对于一个还有nnn个数的数组来说,假设第kkk个为最后出栈那么有f(k)f(k)f(k)在它前面出栈,以及f(n−k)f(n-k)f(nk)在它后面出栈,因此对于第k个数最后出栈它有f(k)f(n−k)f(k)f(n-k)f(k)f(nk)种方式,又因为所以数可能是最后一个出栈因此所有可能就是一个卡特兰数。

图1

二叉树构成问题

有n个结点,问总共能构成几种不同的二叉树。如果采用中序遍历的话,根结点第k个被访问到,则根结点的左子树有k-1个点、根结点的右指数有n-k个点。k的取值范围为1到n,因此也是一个卡特兰数。

突多边形的构成

对于一个凸多边形,假设它有n+2(n>=1)n+2(n>=1)n+2(n>=1)个节点,随机选取一条边作为基,然后它与第kkk个节点分别否可以连接并且将它们分为两部分,那么其中kkk个节点可以有f(n−k)f(n-k)f(nk)种情况,剩下的n−kn-knk个节点有f(n−k)f(n-k)f(nk)种情况。因此也是一个卡特兰数。

律师上班问题

一个n*n的格子,只能往上或者往右走,假设走到kkk,则前面有f(k)f(k)f(k),后面有f(n−k)f(n-k)f(nk),因为k可以从0到n所以一共有f(n)f(n)f(n)种。
图2

括号匹配问题(5元10元买汽水问题)(XY,其中X排在前面的个数大于等Y问题)这三个问题是等价的

一个有n个X和n个Y组成的字串,且所有的部分字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words:
XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY
将上例的X换成左括号,Y换成右括号,Cn表示所有包含n组括号的合法运算式的个数:
((())) ()(()) ()()() (())() (()())
这些问题都可以归并为进出栈问题来解答,假设有nnn个5元的人,先排号队1到n那么选取第k个人最后一个出栈那个前面有f(k)f(k)f(k)和后面的f(n−k)f(n-k)f(nk)种方法,而这个k又可以从1到n$中选取,因此有卡特兰数种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值