引言:有高矮不同的12个人,现在要他们对应排成两列,保证两列分别有序,且对应位置总是第一列比第二列矮,请问有多少种排列方式?

这是蘑菇街笔试的时候一个题目,当时陷入了枚举分类的死循环中,殊不知如果知道Catalan数的概念,直接就计算出来了。catalan组合数学上的递归式定义如下,这个递归定义是欧拉在研究下面问题5时得出的一个式子,是Catalan数起源的一种说法。

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)=C(2n,n)-C(2n,n+1)=C(2n,n)/(n+1)

注:在参考四中另有一种定义h(n)=h(1)*h(n-1)+h(2)*h(n-2)+…h(n-1)*h(1)=C(2n-2,n-1)-C(2n-2,n)=C(2n-2,n-1)/n,这只是个如何确定n的问题,对分析题意影响不大,下面的分析基于第一种定义。

由上面的定义可知,有两种情况是Catalan数来算,一种是用组合的形式给出结论的,即最后能算出C(2n,n)-C(2n,n+1),如下面列举的例子1,2,3,8,其实其它几个例子也能转化成这种形式,但是不直观,其它几个例子直观上会有h(1)*h(n-1)+h(2)*h(n-2)+…h(n-1)*h(1)的形式。

附录参考2中有一个对某些例子而言很清晰的解释。

Catalan数有在很多场景会见到,常见的有:

1. 直角等边三角形网络(直角边长为n)的路径问题(见参考1)—h(n-1)

思路:在2(n-1)个位置中找出哪(n-1)步朝上(C(2n-2,n-1)),并删除超过对角线的情况C(2n-2,n),即h(n-1)=C(2n-2,n-1)-C(2n-2,n)

2.出栈入栈问题(见参考1),栈无穷大,n个数?—h(n)

思路:选定n个位置入栈,n个位置出栈,C(2n,n),去除出栈入栈顺序不对的C(2n,n+1),因此为h(n)=C(2n,n)-C(2n,n+1)

3.2n个人买票找零问题(售票处无零钱,观影者一半手持5块,一半手持10块,票价5块)—h(n)

思路同2.

4.n矩阵相乘的括号问题h(n-1)

思路: 分析有如下形式

这是catalan数的形式,f(1)=1,f(2)=1,故f(n)=h(n-1)

5.凸n边形分割成多少个三角形(见参考4)—h(n-1)

思路,具体思路见参考4,分析同4.

6.n个可以构造出多少种不同的二叉树—h(n)

思路,选定一个数作为根节点,因此有:

,

这也是catalan数的特征,f(0)=1,f(1)=1,f(2)=2,因此有f(n)=h(n)

7.在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?--h(n-1)

思路:如图,由于不相交,分割的时候若A1和A2k有连线,那么左侧有2(k-1)个点,右侧有2(n-k),所以:

f(2)=1,f(4)=1,故f(2n)=h(n-1)

8.有高矮不同的12个人,现在要他们对应排成两列,保证两列分别有序,且对应位置总是第一列比第二列矮,请问有多少种排列方式?

此题在参考1中描述得非常准确


参考1:http://blog.csdn.net/suyksuyk/article/details/4697941

参考2:http://blog.sina.com.cn/s/blog_66f4dd01010129a7.html

参考3:http://blog.csdn.net/wuzhekai1985/article/details/6764858?reload

参考4:http://blog.csdn.net/muye5/article/details/7984061


转载于:https://www.cnblogs.com/obama/archive/2013/04/27/3048189.html

面试收集--卡特兰数(Catalan数)应用相关推荐

  1. 卡特兰数 Catalan数

    From: http://www.cppblog.com/MiYu/archive/2010/08/07/122573.html 维基百科资料: 卡塔兰数 卡塔兰数是组合数学中一个常出现在各种计数问题 ...

  2. 卡特兰数——Catalan数

    卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项公式为  通常使用的递归式:  h(n)=((4*n-2) ...

  3. 卡特兰数[catalan数]`

    定义: 卡特兰数又叫卡塔兰数,是组合数学中一类常用的数列.前几项为:1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 74290 ...

  4. 卡特兰数Catalan

    1.卡特兰数的性质 其实重要的就两个公式:1和3. 公式1是卡特兰数的通项公式. 公式2是卡特兰数的递归公式.注意递推公式是C n+1=- 通常是发现问题可以用卡特兰数的递推公式来解决,从而想到卡特兰 ...

  5. [Catalan数三连]网格有趣的数列树屋阶梯

    如何让孩子爱上打表 Catalan数 Catalan数是组合数学中一个常出现在各种计数问题中的数列. 以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名. 先丢个公式(设第n项为$ ...

  6. 算法基础 - 数论 | 组合数学 卡特兰数(Catalan number)定义、证明及例题

    写在前面:卡特兰数这东西感觉挺常用的,并且公式很简单,那就花一下午总结一下,学点皮毛吧(反正遇到我还是不会 ) [PDF] 大三上组合数学课堂讲义 文章目录 卡特兰数定义 卡特兰数的性质 卡特兰数证明 ...

  7. 卡特兰数 java,Catalan数(卡特兰数)

    由于Catalan数经常会在算法题或面试题中出现,在这里做一下小小的总结. 介绍 Catalan数是组合数学中一个常在各种计数问题中出现的数列.一般项公式为 Cn的另一个表达形式为 一般来讲,我们编程 ...

  8. Catalan数——卡特兰数

    今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来 后来查了下,原来是Catalan数.悲剧啊,现在整理一下 Catalan数--卡特兰数] 一.Catalan数的定义令h( ...

  9. C++打印0到N的Catalan数卡特兰数(附完整源码)

    打印0到N的Catalan数卡特兰数 打印0到N的Catalan数卡特兰数算法的完整源码(定义,实现,main函数测试) 打印0到N的Catalan数卡特兰数算法的完整源码(定义,实现,main函数测 ...

最新文章

  1. Vista下控件无法安装解决办法
  2. MySql笔记之数据表
  3. 给普通用户赋予docker权限
  4. php教程源码分享,php教程|php源码|php学习
  5. 用Scikit-learn和TensorFlow进行机器学习(五)
  6. HDU - 5875 Function(单调栈)
  7. Vue.JS项目同时使用Element-UI与vue-i18n时实现国际化的方案
  8. linux git 显示 分支,Linux 终端显示 Git 当前所在分支
  9. Apache+Php+Mysql配置
  10. ReultSet有什么作用和使用
  11. ElasticSearch常用的几种查询方式
  12. 《2019上半年网络工程师考试大纲》
  13. VirtualBox 安装ghost xp(雨林木风)
  14. 模拟城市服务器连接中断 正试着,【模拟城市5】确认DRM在线 中断不会被踢
  15. nginx静态资源以及多个站点配置
  16. EIGRP协议工作过程与配置详解
  17. SQL Server 扩展秘钥管理(EKM)
  18. [BDSec CTF 2022] 部分WP
  19. CGB2107-Day03-mybatis
  20. VMware虚拟机怎么安装ghost系统

热门文章

  1. Java指令启动jar
  2. 企业信息化快速开发平台JeeSite
  3. nginx下后端realserver健康检测模块ngx_http_upstream_check_module
  4. 解决打包软链接打包失败问题
  5. 编写字符串反转函数 - 小小外星人的技术博客 - 博客频道 - CSDN.NET
  6. 关于端口聚合或端口聚合称呼的误区
  7. WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
  8. 【高性价比】AIO-3288C四核高性能主板
  9. edit filter rules in sql source control
  10. IE相关的一些BUG汇总