也谈卡塔兰数

引例一:2n个人排队买票,其中n个人持50元,n个人持100元。每张票50元,且一人只买一张票。初始时售票处没有零钱找零。请问这2n个人一共有多少种排队顺序,不至于使售票处找不开钱?

引例二:括号匹配,n个左括号,n个右括号,求合法组合数目。

引例三:1表示进栈,0表示出栈。n个0,n个1的合法排列。

引例四:对于一个无限大的栈,一共n个元素,请问有几种合法的入栈出栈形式?

引例五:P = a1 * a2 * a3 * ... * an,其中ai是矩阵。根据乘法结合律,不改变矩阵的相互顺序,只用括号表示成对的乘积,试问一共有几种括号化方案?(n-1对括号)

引例六:n个节点组成不同构二叉树的方案数

引例:七:2n+1个节点组成不同构满二叉树(full binary tree)的方案数

引例八:所有在n × n格点中不越过对角线的单调路径的个数。一个单调路径从格点左下角出发,在格点右上角结束,每一步均为向上或向右。下图为n = 4的情况:

证明:

n个1、n个0的2n位二进制数共有个,下面考虑不满足要求的数目

(假设位置是从1开始数的)第一次出现非法的0的位置必然是奇数位,即2i+1(前面都是合法,则01个数相等),此时若将2i+2(包括本身)之后的数,0变为1,1变为0,则得到n+1个0和n-1个1的序列。

而反过来,一个包含n+1个0和n-1个1的序列,必然也可以通过相同的方法得到一个n个0,n个1的非法序列(找到第一个非法0,然后将其后的数字,0变1,1变0)。也就是说(n个0,n个1)的非法序列和(n+1个0和n-1个1)的序列是一一对应的。

从而。证毕。PS:减数(2n,n+1)即非法的序列。

参考资料:

http://www.cnblogs.com/wuyuegb2312/p/3016878.html#suggestion

http://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0

http://blog.csdn.net/cncnlg/article/details/41698159

时间: 2024-07-30 10:18:29

也谈卡塔兰数的相关文章

卡塔兰数简介

卡塔兰数(Catalan) 一.简介: 卡塔兰数是一个特殊的数列,在ACM程序设计.组合数学中会经常见到. 二.性质 (1)卡塔兰数的前几项 1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 12899

catalan卡塔兰数

令h(0)=1,h(1)=1,卡塔兰数数满足递归式:h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),这是n阶递推关系;还可以化简为1阶递推关系: 如h(n)=(4n-2)/(n+1)*h(n-1)(n>1) h(0)=1该递推关系的解为:h(n)=C(2n,n)/(n+1)=P(2n,n)/(n+1)!=(2n)!/(n!*(n+1)!) (n=1,2,3,...) 1 #include <iostream>

卡塔兰数(Catalan)

卡塔兰数(Catalan) 原理: 令h(0)=1,h(1)=1. 卡塔兰数满足递推式:h(n)=h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)(n>=2) 比如: h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2 h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5 另类递推式:h(n)=h(n-1)*(4*n-2)/(n+1); 递推关系的解为: h(n)=c(2n,n)/(n+1) (n=

HDOJ 1023 Train Problem II (卡塔兰数)

Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the trains come in strict-increasing order, how many orders that all the trains can get out of the railway. Input The input contains se

递归输出所有出栈次序及卡塔兰数应用

用ArrayList模拟栈的操作,采用递归算法.代码如下: 1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 public class stackAll { 5 static int num=0; 6 public static void main(String[] args) { 7 Scanner scanner=new Scanner(System.in); 8 int n=scanner.nextInt();//输

排列组合 - 卡塔兰数的应用

卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.输入一个整数n,计算h(n). h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2,h(0) = h(1) = 1) 该递推关系的解为:h(n)=C(2n,n)/(n+1) (n=1,2,3,...) int Catalan(int n) { if(n <= 1) return 1; int *h = new int [n+1]; h[0] = h[1] = 1; for(

对卡塔兰数的理解

卡塔兰数定义 f(n) = f(0)f(n-1) + f(1)f(n-2) + ... + f(n-1)f(0)       = f(k-1)f(n-k) k=1...n 以k为轴划分子问题,左边子问题的解的个数和右边子问题的解的个数是原问题以k为轴的解法的2个独立步骤,适用乘法原理 分别以1,2,...n为轴,是原问题的n种解法,适用加法原理. 与卡塔兰数有关问题通常满足如下描述:有一个大问题A,规模为n,要解决这个问题,可以用分治的思想,首先固定其中某一个元素,将剩下的n-1个元素拆分成两个

十年老兵谈卡牌手游开发:拼5项技能

转自:http://www.gamelook.com.cn/2015/04/210152 卡牌类型游戏在市场的表现良好,“手游千万俱乐部”中出现了多位卡牌游戏新成员,结合我们正在开发的一款卡牌类游戏,谈谈对此类游戏认识和个人几点粗浅的看法,欢迎各位的指正和交流. 我从05年开始做手游时就一直崇尚3P开发,即PowerPoint.Prototypes(原型).Photoshop.做手游策划其实不需要太多的文档.可以使用PPT快速设计出游戏的基本架构和UI的布局,特别是在设计卡牌游戏时,仅使用PPT

hdu1133 Buy the Ticket (卡兰特数应用+java大数)

题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1133 [题意] 电影票50块一张 有m个人手里正好有50块,n个人手里正好有100块,售票厅開始没有钱.问,有多少种排队的方式,能够让每一个人都买上票. (假设售票厅没有50块零钱,则持有100块的人买不了票) [分析] 显然.当m<n的时候,有0种排列方式. 当m>=n的时候: 用0.代表手里仅仅有50块的人,1,代表手里仅仅有100块的. 则0110100 这样的情况不能满足条件(到第三个人