卡特兰数

卡特兰数

卡特兰数的推导公式是:
f ( n ) = ∑ k = 1 n f ( 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 ) = 1 f(0) = 1 f(0)=1
f ( 1 ) = 1 f(1) = 1 f(1)=1
它和斐波那契数列是很相似的都是将后面的问题分解为前面的问题。

进出栈问题

栈是一种先进后出(FILO,First In Last Out)的数据结构.如下图1,2,3,4顺序进栈,那么一种可能的进出栈顺序是: 1 I n → 2 I n → 2 O u t → 3 I n → 4 I n → 4 O u t → 3 O u t → 1 O u t 1In→2In→2Out→3In→4In→4Out→3Out→1Out 1In2In2Out3In4In4Out3Out1Out, 于是出栈序列为1,3,4,2。对于一个还有 n n n个数的数组来说,假设第 k k k个为最后出栈那么有 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)个节点,随机选取一条边作为基,然后它与第 k k k个节点分别否可以连接并且将它们分为两部分,那么其中 k k k个节点可以有 f ( n − k ) f(n-k) f(nk)种情况,剩下的 n − k n-k nk个节点有 f ( n − k ) f(n-k) f(nk)种情况。因此也是一个卡特兰数。

律师上班问题

一个n*n的格子,只能往上或者往右走,假设走到 k k k,则前面有 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组括号的合法运算式的个数:
((())) ()(()) ()()() (())() (()())
这些问题都可以归并为进出栈问题来解答,假设有 n n n个5元的人,先排号队1到n那么选取第k个人最后一个出栈那个前面有 f ( k ) f(k) f(k)和后面的 f ( n − k ) f(n-k) f(nk)种方法,而这个k又可以从1到n$中选取,因此有卡特兰数种。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值