博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试收集--卡特兰数(Catalan数)应用
阅读量:6326 次
发布时间:2019-06-22

本文共 1396 字,大约阅读时间需要 4 分钟。

引言:有高矮不同的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)

思路: 分析有如下形式

   

chart?cht=tx&chl=f(n)%5csum_%7bk%3d1%7d%5e%7bn-1%7d+f(k)*f(n-k) 

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

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

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

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

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

chart?cht=tx&chl=f(n)%3d%5csum_%7bk%3d0%7d%5e%7bn-1%7d+f(k)*f(n-k-1),

这也是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),所以:

chart?cht=tx&chl=f(2n)%3d%5csum_%7bk%3d1%7d%5e%7bk%3dn%7d+f(2k-2)*f(2n-2k) 

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

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

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

 

 

 

 

 


参考1:

参考2:

参考3:

参考4:


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

你可能感兴趣的文章
《SAP入门经典(第4版•修订版)》——第3章 SAP技术基础知识 3.1 SAP技术101:SAP基础知识...
查看>>
Flash 真完了!Adobe 自己都不想要它
查看>>
《R的极客理想—工具篇》—— 2.1 R语言时间序列基础库zoo
查看>>
DirectX 将会被命名为 DirectX 12
查看>>
《MATLAB图像处理超级学习手册》一一第1章 MATLAB基础知识
查看>>
《区块链开发指南》一一1.4 脚本系统
查看>>
《计算机科学导论》一1.2 冯·诺依曼模型
查看>>
《JavaScript应用程序设计》一一2.11 多态函数
查看>>
LC3 初日见闻 + 阿里巴巴望京绿地中心一游
查看>>
《Adobe After Effects CC经典教程》——第2课 用特效和预设创建基本动画 2.1 开始...
查看>>
《跨境电商 —— 阿里巴巴速卖通实操全攻略》一一1.4 管理账号
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——导读
查看>>
《从Excel到R 数据分析进阶指南》一2.3 查看特定列的格式
查看>>
《例说8051:单片机程序设计案例教程》——导读
查看>>
《21天学通Java(第7版)》—— 2.8 问与答
查看>>
《Java EE 7精粹》—— 2.6 Web Fragment
查看>>
《HTML、CSS、JavaScript 网页制作从入门到精通》——6.8 练习题
查看>>
全新阿里云大学发布——阿里巴巴全力打造云生态下的创新人才工场
查看>>
《C#初学者指南》一导读
查看>>
《工作流管理——模型、方法和系统》笔记2:Petri网对工作流建模
查看>>