卡特兰数

定义

f(0)=1,f(1)=1
f(n)=Σf(i)f(ni1),n>=2,nZ
前几项:1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900…

常见形式

1.二叉树的计数

已知一颗二叉树有n个节点,问该二叉树有多少种形态?

除去根节点,左子树和右子树共有n-1个节点,左子树和右子树的方案又是相同的问题。令n个节点的二叉树形态总数为f(n),设左子树有i个节点,则右子树有n-i-1个节点,那么:
f(n)=Σf(i)f(ni1)
即卡特兰数第n项。

2.AB排列问题

有一个由n个A和n个B组成的2*n的序列,满足从第一个位置开始到任何位置,B的个数都不超过A的个数。

将A视为+1,B视为-1,那么这个序列就像一个一上一下的函数图像:
这里写图片描述
从0出发,由于有n个A和n个B,所以最后肯定会走回0,又因为B的个数都不超过A的个数,所以不可能走到0以下(ps:下文把走两次称作1步)。
令走n步的方案数为f(n),设第二次走到0的点为i(第一次走到0的点是0,但是i可以是0),那么就可以将走n步分为两部分:先走到i,然后在i选A(+1)(因为走到i时为0,那么i必须选A(+1)),走n-i-1步,最后选B(-1)到达n。那么:
f(n)=Σf(i)f(ni1)
即卡特兰数第n项(这是巧妙地转化!)。

还可以用另外一种方法看待这个问题。2*n的序列中有n个A和n个B,那么序列的总方案(即使不满足)为 Cn2n ,而不满足的方案实际上为 Cn12n ,为什么呢?
Cn12n 表示的是2*n的序列放n-1个A(n+1个B)的方案数,由于只放了n-1个A,那么肯定是不满足的:
这里写图片描述
由于放了n-1个A和n+1个B,最后肯定会到0以下,我们把最后一次选B的位置改为选A(因为是最后一个选B的位置,所以之前肯定已经到0以下了),所得到的路径就对应了一个不满足的序列。但是有些时候不一定必须把最后一次选B的位置改为选A,之前也可以啊?的确可以,不过如果选之前的位置,最后肯定还会有选B的位置,这就和其他方案撞上了,所以不需考虑。
那么也就是说 f(n)=Σf(i)f(ni1)=Cn2nCn12n=Cn2nn+1 ,这就是卡特兰数的通项公式。

通项公式

f(n)=Cn2nn+1=(2n)!n!(n+1)!
所以我们就可以用求组合数的方法求解f(n)了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值