卡特兰数的理解
来源:互联网 发布:javascript 书 推荐 编辑:程序博客网 时间:2024/04/29 21:39
今日,老师在课堂上讲了卡特兰数的递推,说实话,除了有时候ACM题中用到以外,我平时并没有怎么去想它的递推公式如何得来。今天总算明白了。
递推公式:f(n)=Ch(n+1)=C(2n,n)/(n+1) (n=1,2,3,...)
其等价于C(2n,n)-C(2n,n+1),思想就是将其中的某个1变为0,即出现减去后面的非法情况。
另类递归式:
h(n)=((4*n-2)/(n+1))*h(n-1);
非常规分析
对于每一个数来说,必须进栈一次、出栈一次。我们把进栈设为状态‘1’,出栈设为状态‘0’。n个数的所有状态对应n个1和n个0组成的2n位二进制数。由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。
在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。
不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个 1和n-m-1个0。如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。
反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。同样在后面部分0和1互换,使之成为由n个0和n个1组成的2n位数,即n+1个0和n-1个1组成的2n位数必对应一个不符合要求的数。
因而不合要求的2n位数与n+1个0,n-1个1组成的排列一一对应。
显然,不符合要求的方案数为c(2n,n+1)。由此得出输出序列的总数目=c(2n,n)-c(2n,n+1)=c(2n,n)/(n+1)=h(n+1)。
- 卡特兰数的理解
- 关于Catalan(卡特兰)数的理解
- 关于卡特兰数的一些小理解
- 卡特兰数的应用
- 卡特兰数的研究
- 扩展的卡特兰数
- 神奇的卡特兰数
- 【无处不在的卡特兰数】
- 卡特兰数的应用
- 卡特兰数的概念
- 卡特兰数的详解
- 卡特兰数的性质
- 卡特兰数的应用
- 卡特兰数,高精度卡特兰数
- 数论-卡特兰数的应用
- 【转载】卡特兰数的应用
- hdu2067小兔的棋盘--卡特兰数
- 卖票--卡特兰数的运用
- 有关lua,luci的介绍
- struts 常见标签
- ubuntu chinese input
- 如何在邮件中创建一个链接指向文件系统中的文件
- hdu 2049
- 卡特兰数的理解
- shell下内置选项操作命令
- Windows平台下Makefile学习笔记
- 比较Cookie、Session、Application
- spring配置头
- java线程池
- 对表格按日期或数字或字母进行排序的js
- Graphviz官方文檔
- 冒泡排序篇