卡特兰数

网友投稿 278 2022-11-22

卡特兰数

卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列,关于卡特兰数的题目大多都有一个差不多的套路:对于一个规模为n的问题,先找一个元素固定下来,然后将剩下的n-1个元素拆分成两个子问题,最后通过乘法原理和加法原理结合起来,所以卡特兰数的递推式就是f(n) = f(0)*f(n-1) + f(1)*f(n-2) + f(2)*f(n-3)......+f(n-1)*f(0).将公式变形,可以得到f(n) = f(n-1)*(4*n-2) / (n+1).还有两个组合公式:f(n) = C(2n,n)/(n+1) = C(2n,n) - C(2n,n+1).它的前几项为1,2,5,14,42,132...... 例1:二叉树的计数 已知一颗二叉树有n个节点,问:该二叉树能组成多少种不同的形态? 分析:常规套路,先选一个点当根节点,用f(n)表示n个节点的二叉树不同的形态数,假设左子树有i个节点,右子树有n-i-1个节点,那么根据乘法原理,就有f(i)*f(n-i-1)种方案.把每个点为根的方案数加起来就是答案:f(n) = Σf(i)*f(n-i-1). 例2:AB排列问题 有n个A和n个B排成一排,从第1个位置开始到任何位置,B的个数不能超过A的个数,问:这样的排列有多少种? 分析:从公式入手.符合要求的排列数=总的排列数-不符合要求的排列数.因为要在2n个位置中选择n个位置放A,所以总的排列数为C(2n,n).再来看如何求不符合要求的排列数.首先肯定是要找不符合要求的排列有什么特征,一个不符合要求的排列的特征是:存在一个奇数位2*k+1,有k+1个B,k个A,根据这个还不能得到答案.将2*k+2到n*2位上的A,B互换一下,可以发现最后得到的排列一定是有n+1个B,n-1个A的,也就是说一旦一个排列经过这种操作后有n+1个B,那么这个排列就是不合法的,因为变换前的排列和变换后的排列是一一对应的,我们只需要求出变换后的排列有多少种,就能知道变换前的排列有多少种.即C(2n,n+1)种,答案为C(2n,n)-C(2n,n+1).正好就是卡特兰数. 例3:字符串(例2的加强版) 例4:乘法加括号:对于连乘a1*a2*a3*......*an,加了括号后就可改变它的运算顺序。问:有多少种不同的运算顺序. 分析:常规套路,先选一个乘号当根节点,构造二叉树,乘号左边就是它的左子树,乘号右边就是它的右子树,剩下的就转化为了例1. 例5:欧拉多边形分割问题:设有一个凸多边形,可以用n-3条不相交的对角线将n边形分成n-2个互相没有重叠的三角形,例如n=5,有5种方法. 分析:还是要先找一个元素给固定下来,选择1号点和n号点,再选择i号点,那么这3个点组成的三角形就会把n变形划分成两个多边形:k边形和n-k+1边形.这就是类卡特兰数了.最后的答案为f(n) = Σf(k)*f(n-k+1). 总结:卡特兰数问题的突破口就是公式,要么通过递推公式,要么通过组合公式.要会用计数问题中的一些常用技巧,比如取补集,转换找特征等等.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于UART、SPI、I2C通信接口解析
下一篇:spring中@autowired、@Qualifier、@Primary注解的使用说明
相关文章

 发表评论

暂时没有评论,来抢沙发吧~