做初赛题,回顾到以前学的一些知识,发现还有其他广泛的应用,所以在此记录并当作复习,若有不当之处,随时欢迎读者斧正。

Catalan

卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名

原理(摘自百度百科)

设h(n)为Catalan数的第n+1项,令h(0)=1,h(1)=1,Catalan数满足递推式
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)=11+11=2
\quad\quadh(3)=h(0)h(2)+h(1)h(1)+h(2)h(0)=12+11+21=5
另类递推式:
\quad\quadh(n)=h(n-1)(4n-2)/(n+1)
递推关系的解为:
\quad\quadh(n)=C(2n,n)/(n+1) (n=0,1,2,…)
递推关系的另类解为:
\quad\quadh(n)=C(2n,n)-C(2n,n-1)(n=0,1,2,…)

应用

(1)凸n边形的三角划分方案数

笔者第一次接触卡特兰数是一道关于凸多边形的三角形划分问题,题目很容易懂:给出一个凸n边形,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。输入n,求不同划分的方案数f(n)
我初次尝试时,试着找规律,结果花式凉凉 ,老师第一次讲,听得云里雾里,回顾几次后,到觉得有点意思。

现在,读者请见下图:

一个凸n边形,两处标有省略号的地方表示省略的边,即顶点2到顶点i之间还有 i-2+1 条边,另一处同理。现在如果不知道卡特兰数的同学是不是无从下手,别慌,问题不大。因为凸n边形的任意一条边必定属于某一个三角形,所以我们以某一条边为基准,此图以顶点1和顶点n为基准。我们任意取一个点i使得1,n, i构成一个三角形,连接1-i,n-i.
见下图:

如图所示,凸n变形变为了一个由一个三角形,一个凸i变形和一个凸n-i+1边形,构成的图形,即题目中的定义,则此时凸n边形的不同划分方案数就根据乘法原理,由凸i变形和凸n-i边形决定,即f(i)×f[n−i+1]f(i)\times f[n-i+1]f(i)×f[n−i+1],在考虑,如果我不取点i为与点1和点n构成三角形,那么i+1呢?i+2呢? ⋅⋅⋅···⋅⋅⋅,选取不同的点之后便会有f(i+1)×f[n−(i+1)+1],f(i+1)\times f[n-(i+1)+1],f(i+1)×f[n−(i+1)+1],f(i+2)×f[n−(i+2)+1]⋅⋅⋅\,\,f(i+2)\times f[n-(i+2)+1]···f(i+2)×f[n−(i+2)+1]⋅⋅⋅,取不同的点与点1,点n划分后都可以的都划分凸n边形的划分方案,那加起来,不就是凸n边形的划分方案数了吗?即:
f(n)=f(2)f(n−2+1)+f(3)f(n−3+1)+……+f(n−1)f(2)f(n)=f(2)f(n-2+1)+f(3)f(n-3+1)+……+f(n-1)f(2)f(n)=f(2)f(n−2+1)+f(3)f(n−3+1)+……+f(n−1)f(2)
=h(n−2)\quad\quad\,\,=h(n-2)=h(n−2)
因为1,n, i三点要构成三角形,所以不能点i不能去点1和点n,而我们定义f(2)=1,f(3)=1

此处f(2)=1和f(3)=1的具体缘由须参考详尽的“卡特兰数”,也许可从凸四边形f(4)=f(2)f(3)+ f(3)f(2)=2×f(3)f(2)倒推,四边形的划分方案不用规律推导都可以知道是2,那么2×f(3)f(2)=2,则f(3)f(2)=1,又f(2)和f(3)若存在的话一定是整数,则f(2)=1,f(3)=1

(2)括号化

P=a1×a2×a3×……×anP=a_1×a_2×a_3×……×a_nP=a1​×a2​×a3​×……×an​,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?
分析:将a1看作一个整体,剩下n−1个数为一个整体,划分方案数:f(0)f(n−1)a_1看作一个整体,剩下n-1个数为一个整体,划分方案数:f(0)f(n-1)a1​看作一个整体,剩下n−1个数为一个整体,划分方案数:f(0)f(n−1),此处一个数打括号无意义,视作f(0),而且根据标准卡特兰数的定义f(0)=f(1)=1,所以f(1)f(n-1)可视作f(0)f(n-1)
将a1,a2看作一个整体,剩下n−2个数为一个整体,划分方案数:f(1)f(n−2)a_1,a_2看作一个整体,剩下n-2个数为一个整体,划分方案数:f(1)f(n-2)a1​,a2​看作一个整体,剩下n−2个数为一个整体,划分方案数:f(1)f(n−2)
⋅⋅⋅⋅⋅⋅······⋅⋅⋅⋅⋅⋅
将a1,a2⋅⋅⋅an−1看作一个整体,剩下1个数为一个整体,划分方案数:f(n−1)f(0)a_1,a_2···a_{n-1}看作一个整体,剩下1个数为一个整体,划分方案数:f(n-1)f(0)a1​,a2​⋅⋅⋅an−1​看作一个整体,剩下1个数为一个整体,划分方案数:f(n−1)f(0)

h(n)=∑i=0n−1h(i)h(n−i−1)h(n)=\sum_{i=0}^{n-1}h(i)h(n-i-1)h(n)=i=0∑n−1​h(i)h(n−i−1)
得证

(3)给定节点组成二叉搜索树

给定N个节点,能构成多少种不同的二叉搜索树?
分析:这个比较好理解,对于根节点,他的左子树和右子数的f(left)×\times×f(right)就是当左子树有left个结点,右子树有right个结点时的组成方案,当左右结点不同时,乘积相加即可。PS:根节点要算一个节点,所以左右子树结点数相加等于n-1
h(n)=∑i=0n−1h(i)h(n−i−1)h(n)=\sum_{i=0}^{n-1}h(i)h(n-i-1)h(n)=i=0∑n−1​h(i)h(n−i−1)
此处注意是h(n) 种不同的二叉搜索树

关于Catalan 数 Cn = (2n)! / (n + 1)! / n!,下列说法中错误的是( )(NOIP2018)
A. Cn 表示有n + 1 个结点的不同形态的二叉树的个数。
B.Cn 表示含n 对括号的合法括号序列的个数。
C.Cn 表示长度为n 的入栈序列对应的合法出栈序列个数。
D.Cn 表示通过连接顶点而将n + 2 边的凸多边形分成三角形的方法个数。

这是2018年初赛题,A选项错就错在n+1,改正确的话应变为n。可见出题人之阴

(4)n对括号正确匹配数目

给定n对括号,求括号正确配对的字符串数,例如:
0对括号:[空序列] 1种可能 即f(0)=1
1对括号:() 1种可能
2对括号:()() (()) 2种可能
3对括号:((())) ()(()) ()()() (())() (()()) 5种可能
考虑n对括号时的任意一种配对方案,最后一个右括号有唯一的与之匹配的左括号,于是有唯一的表示A(B),其中A和B也是合法的括号匹配序列
笔者看A(B)A(B)A(B)这个式子时愣了很久,仔细想一下高亮部分才反应过来,’(‘是与最后一个’)'相匹配的左括号,两个括号将原序列划分成了两个相对独立的序列A和B,那么A的正确匹配数目与B的正确匹配数目相乘,不就正好与二叉搜索树组合时的左右子树方案数相乘神似吗?所以,答案自然就跟二叉搜索树的结果一样了,Catalan数参上:
h(n)=∑i=0n−1h(i)h(n−i−1)h(n)=\sum_{i=0}^{n-1}h(i)h(n-i-1)h(n)=i=0∑n−1​h(i)h(n−i−1)

(5)出栈次序

一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

分析一:

设f(n)=序列个数为n的出栈序列种数
暂时写不动了,改天再补洞

卡特兰数 Catalan相关推荐

  1. 卡特兰数 Catalan number

    卡特兰数 Catalan number 卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 74290 ...

  2. 卡特兰数Catalan number的应用

    卡特兰数(Catalan number)的应用 使用场景 计算公式   卡特兰数是一个特殊的数列,基于这个数列,可以找出很多有趣的问题,对于我们学计算机的而言,与这个数列打交道是不可避免了,举一个很经 ...

  3. 卡特兰数Catalan

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

  4. 卡特兰数 Catalan数

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

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

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

  6. java编程求卡特兰数_卡特兰数(Catalan Number)

    卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.该数在计算机专业中比较重要,有一些具体的应用实例.这篇文章主要分三部分: 卡特兰数递归式的含 ...

  7. 出栈顺序 与 卡特兰数(Catalan)的关系

    一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3  ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...

  8. 卡特兰数——Catalan数

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

  9. 卡特兰数[catalan数]`

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

最新文章

  1. BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析)
  2. 搭建linux软件仓库,创建自己的YUM仓库
  3. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
  4. python程序设计和c语言_C 语言和 Python,该从哪个入门编程?
  5. memcache/memcached/memcachedb 配置、安装
  6. swift——富文本文字的简单使用
  7. [转]外贸出口流程图
  8. matlab堆积式玫瑰图,[转帖]堆积式南丁格尔玫瑰图模板
  9. 台式计算机关机后自行重启,台式电脑关机后自动重启怎么办?台式电脑关机后自动开机的处理办法...
  10. 当公司企业邮件服务器IP被列黑名单的解决办法
  11. 42所双一流高校,都是如何处理学术不端行为的?
  12. \t\t门萨智商测试 有些面试的公司喜欢玩这个
  13. PAL/PLA/GAL/CPLD/FPGA
  14. ArcMap出图小技巧:主图设计、图例、比例尺、指北针、标题
  15. 太傻生活原则是:“无需选择,理解一切,接受一切”--《太傻十日谈》读后感
  16. python代码举例说明生日悖论
  17. 【Go学习笔记】数据类型之切片(slice)
  18. 银河麒麟踩坑笔记——sh文件设置开机自启
  19. J storm战队成员_DOTA2J.Storm战队介绍-DOTA2PIT深渊联赛预选赛J.Storm战队介绍_牛游戏网攻略...
  20. 计算机原理中的二进制除法,多字节除法--汇编实现原理

热门文章

  1. MaxCompute实例相关操作
  2. 2022年N2观光车和观光列车司机考试题及N2观光车和观光列车司机找解析
  3. 华为手机的商业模式以及网络营销的建议
  4. python打印字典关键字_python高效字典操作
  5. kdevelop怎么调试_Kdevelop简单应用以及调试
  6. 查询未公开QQ群的资料
  7. 手机投屏发出连接win10接收不到解决方案
  8. 成都女孩学什么技术好
  9. jupyter ipython display_IPythonJupyter私房手册
  10. 问题解决:Failed to XXX mysqld.service: Unit not found