Catalan number (卡兰特数)
卡特兰数非常经典,很多现实的问题都是卡特兰数,如合法的入栈出栈序列有多少种就是卡特兰数,为什么呢?我们可以把0看成入栈操作,1看成出栈操作,即0的累计个数不小于1的排列有多少种。还有很多其他的问题都是卡特兰数,如二叉树的个数,有序树的个数,多边形分成三角形的个数等。
卡特兰数的通项是c(2n, n)/(n+1)。
注意组合数学中的运算:A(m, n) = m! / (m-n)!, C(m, n) = A(m, n) / n! = m! / ((m-n)!*n!),因此卡特兰数的通项:
C(2n, n)/(n+1) = (2n!) / ((2n - n)! * n!) / (n + 1) = (2n!) / (n! * n!) / (n + 1)
- 圆周上有标号为1,2,3,4,……,2n的共计2n个点,这2n个点配对可连成n条弦,且这些弦两两不相交的方式数为卡特兰数Cn
游乐园门票1元一张,每人限购一张。现在有10个小朋友排队购票,其中5个小朋友每人只有1元的钞票一张,另5个小朋友每人只有2元的钞票一张,售票员没有准备零钱。问:有多少种排队方法,使售票员总能找的开零钱?
甲乙两人比赛乒乓球,最后结果为20∶20,问比赛过程中甲始终领先乙的计分情形的种数。
即甲在得到1分到19分的过程中始终领先乙,其种数是卡特兰数
饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个放进碗橱摞成一摞。一共有n个不同的碗,洗前也是摞成一摞的,也许因为小妹贪玩而使碗拿进碗橱不及时,姐姐则把洗过的碗摞在旁边,问:小妹摞起的碗有多少种可能的方式?
答:得数是第n个卡特兰数Cn。
括号化问题。一个合法的表达式由()包围,()可以嵌套和连接,如(())()也是合法 表达式;现在有 6 对(),它们可以组成的合法表达式的个数为
矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)
出栈次序问题。一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?
类似:有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)
将多边行划分为三角形问题。将一个凸N+2多边形区域分成三角形区域的方法数?类似:一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
给顶节点组成二叉树的问题。给定N个节点,能构成多少种不同的二叉树,(能构成h(N)个)Catalan数的解法Catalan数的组合公式为 Cn=C(2n,n) / (n+1);
此数的递归公式为 h(n ) = h(n-1)*(4*n-2) / (n+1)
卡特兰数真是一个神奇的数字,很多组合问题的数量都和它有关系,例如:
Cn= n对括号正确匹配组成的字符串数,例如 3对括号能够组成:
((())) ()(()) ()()() (())() (()())
Cn= n+1个数相乘,所有的括号方案数。例如, 4个数相乘的括号方案为:
((ab)c)d (a(bc))d (ab)(cd) a((bc)d) a(b(cd))
Cn= 拥有 n+1 个叶子节点的二叉树的数量。例如 4个叶子节点的所有二叉树形态:
- Cn=n*n的方格地图中,从一个角到另外一个角,不跨越对角线的路径数,例如, 4×4方格地图中的路径有:
- Cn= n+2条边的多边形,能被分割成三角形的方案数,例如 6边型的分割方案有:
- Cn= 圆桌周围有 2n个人,他们两两握手,但没有交叉的方案数。
下面是一些大公司的笔试题
先来一道阿里巴巴的笔试题目:说16个人按顺序去买烧饼,其中8个人每人身上只有一张5块钱,另外8个人每人身上只有一张10块钱。烧饼5块一个,开始时烧饼店老板身上没有钱。16个顾客互相不通气,每人只买一个。问这16个人共有多少种排列方法能避免找不开钱的情况出现。
C8=1430,所以总数=1430*8!*8!
2012腾讯实习招聘笔试题
在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数?
C3=5;所以总数为5*3!*3!=180.
Catalan number (卡兰特数)相关推荐
- 堆栈出栈顺序个数详解——卡兰特数
参考了多篇博客之后,终于弄懂了,写下了方便以后复习!首先简单介绍一下堆栈的运行方式,先入后出,First In Last Out(FILO),即若我们将1-4顺序放入堆栈中,则出栈顺序为4 3 2 ...
- 【卡塔兰数】LeetCode 96. Unique Binary Search Trees
LeetCode 96. Unique Binary Search Trees 本博客转载自:http://www.cnblogs.com/grandyang/p/4299608.html Solut ...
- C语言实现卡塔兰数catalan(附完整源码)
实现卡塔兰数catalan 实现卡塔兰数catalan完整源码(定义,实现,main函数测试) 实现卡塔兰数catalan完整源码(定义,实现,main函数测试) #include <stdio ...
- Catalan number
**Catalan number,卡特兰数又称卡塔兰数,**是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数的前几个数 前20项为(OEIS中的数列A000108):1, 1, 2, 5, ...
- 卡塔兰数(Catalan Number)--动态规划(Dynamic Programming)
-卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡特兰(1814–1894)命名.历史上,清朝数学家明安图(1692年-1763年)在其<割圜密率捷法> ...
- java编程求卡特兰数_卡特兰数(Catalan Number)
卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.该数在计算机专业中比较重要,有一些具体的应用实例.这篇文章主要分三部分: 卡特兰数递归式的含 ...
- 卡特兰数Catalan Number
Catalan Number满足下列递推公式: N个元素元素进栈,多少种出栈方式 考虑A.B.C.D依次进栈,那么所有的出栈顺序是下列4种情况的并集: 1)A第一个出栈.肯定是A进栈后马上出栈,剩下B ...
- 卡特兰数Catalan number的应用
卡特兰数(Catalan number)的应用 使用场景 计算公式 卡特兰数是一个特殊的数列,基于这个数列,可以找出很多有趣的问题,对于我们学计算机的而言,与这个数列打交道是不可避免了,举一个很经 ...
- 卡特兰数 Catalan number
卡特兰数 Catalan number 卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 74290 ...
最新文章
- 神经网络原来是这样和数学挂钩的
- 字符集GBK和UTF8的区别说明
- 项目: flappy bird
- AAS的完整形式是什么?
- python启动http服务_Python命令开启http.server服务器
- unity3d 虚拟博物馆_基于Unity3D的虚拟博物馆信息可视化系统①
- c语言随机产生10个30 100,c语言编写随机产生10个100~200之间整数,幷按从大到小排序...
- PAT甲级 1003 Dijkstra的口诀干货
- 使用Redis构建简单的社交网站
- Hive from_unixtime函数入门
- Java ThreadLocal study 2
- LuaProfiler:Lua内存优化工具教程
- 关于男生追女生的数学模型【转王博】
- 提升手机麦克风音量_【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
- 博微三维技术篇【七】——生态数据兼容
- 【天光学术】新闻学论文:校园网络流行语传播社会热点问题的途径(节选)
- 《王者荣耀游戏服务器架构演进(完整版)》读后感
- 小米强制淘汰老破小,苹果华为带了好头
- 将数字转化为字符串的两种方法
- 人工智能+名片,我们看到了营销圈中的“阿尔法