Catalan数
来源:互联网 发布:ps3验证游戏数据 编辑:程序博客网 时间:2024/06/08 12:15
一、递推式
已知n(n∈N)个元素,约定元素k表示第k个入栈的元素,换句话说,将元素按入栈顺序的先后编号为1~n,称为元素1~n。求可能的出栈顺序的总数Cn。
显然C1=1, C2=2。当n=3时,C3=5,可能的出栈顺序有(用1表示入栈,0表示出栈)
如当n=4时,C4=14,可能的出栈顺序有
将这14种可能按照元素1的出栈顺序可以分成4组:元素1第1/2/3/4个出栈。
不妨按元素1第几个出栈排列。当元素1第1个出栈时,元素234的出栈顺序任意,方案数显然为C3。当元素1第2个出栈时,显然第1个出栈的是元素2,后2个出栈的便为元素34,且只要元素34出栈顺序合法,则4个元素的出栈顺序便一定为合法的,根据分步相乘原则,方案数为C1×C2;当元素1第3个出栈时,显然前2个出栈的是元素23,最后一个出栈的是元素4,方案数为C2×C1;当元素1第4个出栈时,前3个出栈的元素234顺序任意,方案数也为C3。最后,根据分组相加原则,总方案数C4=C3+C1×C2+C2×C1+C3。
推广到Cn,可得Catalan数的递推式:
二、通项公式
求
对于每个不合法的01串,设m为0的数量>1的数量的最短前缀中1的个数,显然该前缀有m+1个0,2m+1个数位。此后的2(n-m)-1位上有n-m个1,n-m-1个0。如果把这2(n-m)-1位按位取反,变为n-m个0,n-m-1个1,结果得到一个由n+1个0和n-1个1组成的2n位01串。
反过来,任何一个由n+1个0,n-1个1组成的2n位01串,也必然在某一前缀中0的数量>1的数量,同样将后面的数位按位取反,结果得到一个由n个0和n个1组成的2n位01串,且由于两个01串的前缀相同,∴新01串必然在同一前缀中0的数量>1的数量,∴新01串一定是不合法的。
通过上述过程,我们证明了由n个0和n个1组成的2n位不合法01串与由n+1个0和n-1个1组成的2n位01串一一对应,所以不合法的01串共有
三、变式
Catalan数的变式很有趣的一点是推出递推式与通项公式的方法不同,变式也不同。
推出递推式的方法的变式包括
1. Cn表示通过连结顶点而将n + 2边的凸多边形分成三角形的方法个数。
2. Cn表示用n个长方形填充一个有n个台阶的阶梯的方法个数。
3. Cn表示有n个结点组成二叉树的方案数。
4. Cn表示有2n+1个节点组成不同构满二叉树的方案数。
推出通项公式的方法的变式包括
- Cn表示在平面直角坐标系中,只向右、向上走,只在格点处转弯,不穿过直线y=x(可以在直线上),从(0,0)走到(n,n)的方案数。
- 在圆上选择2n个点,将这些点成对连接起来,且所得n条线段不相交,求可行的方法数。
分析:—————— - (2n)个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
- 2n个人排队买票,其中n个人持50元,n个人持100元。每张票50元,且一人只买一张票。初始时售票处没有零钱找零。请问这2n个人一共有多少种排队顺序,不至于使售票处找不开钱?
变式4还有一种变化:n+m个人排队买票,并且满足,票价为50元,其中n个人各手持一张50元钞票,m个人各手持一张100元钞票,除此之外大家身上没有任何其他的钱币,并且初始时候售票窗口没有钱,问有多少种排队的情况数能够让大家都买到票。
- Catalan数
- Catalan数
- Catalan数
- catalan数
- catalan数
- Catalan数
- Catalan数
- Catalan数
- Catalan数
- catalan 数。。
- Catalan数
- Catalan数
- Catalan数
- catalan数
- Catalan数
- Catalan 数
- Catalan数
- catalan数
- 普通短信发送流程
- TypeError: Can not convert a float32 into a Tensor or Operation.
- 极光推送
- CUDA 8.0 + VS2013 + win10 x64开发环境搭建
- 网络编程作业 UDP (客户与咨询通话)
- Catalan数
- 第六天
- 线程基础1
- Swift_学习笔记_继承
- 矩阵取数问题
- Jsp+Servlet+Mysql测试案例
- 嵌入式学习笔记(第八天)系统网络编程
- Python 里面的一些小技巧(持续更新)
- java web基础大总结