文章目录

  • 1. 前言
  • 2. 卡特兰数递推公式推导
  • 3. 卡特兰数性质
  • 4. 卡特兰数简单实例
    • 实例1:进出栈问题
    • 实例2:进出栈问题变种
    • 实例三:电影购票问题
    • 实例四:上班路径问题
    • 实例五:乘法结合律问题
    • 实例六:结合律与三角形划分的对应关系
    • 实例七:加括号与三角形划分的对应关系
  • 5. 编程OJ例题
  • 6. 参考资料

1. 前言

Catalan 数是一组比较神奇的数字1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670,不要小看这组数字,它的神秘之处在于:记 C[n] 为 Catalan 数列第 n+1 个数,从0开始,也就是说C[0] = 1 , C[1] = 1 , C[2] = 2 … 结果你会发现:

  • 如果序列1,2,…,n入栈,那么C[n] 就是这组数字出栈的排列种数,也就是对应的 Catalan 数。
  • 对一个有 N + 2 条边的凸多边形(N>=1)用连接顶点的不相交对角线将该多边形拆分成若干三角形,那么 C[n] 就是拆分的方法数,也就是对应的 Catalan 数。
  • 具有 n 个节点的二叉树有多少种呢?C[n]个,也就是对应的 Catalan 数。
  • 给出 n 对括号,括号正确配对的字符串个数就是C[n]对应的 Catalan 数。

更多Catalan数的应用可以查询百度、或者这几篇博文也可:

卡特兰数的应用,你知道几个?

卡特兰数 — 计数的映射方法的伟大胜利

2. 卡特兰数递推公式推导

给出凸多边形的边数 n,求解该凸多边形内部不相交的对角线把这个区域分成三角形区域的方法数。

首先进行初步的分析,当 n = 2, h 2 h_2 h2​ = 1,也就是说对于三角形,划分的情况数是 1。由于三角形内部无法添加对角线,所以符合情况的就是三角形本身,情况数为 1。

下面讨论n取任意值的情况,如下图:

考虑将 n + 1 凸边形的子问题,即将 AB 视为基边,枚举 C 的位置,即A、B点除外,有 n - 1 个可枚举位置,然后结合基本的计数原理,能够看到下面的递推式能够不重不漏的表示出h[n]:

而现在的问题在于,这样的递推公式晦涩难懂,期望的形式是斐波那契数列,给出的是前后项的关系式然后可以在线性时间复杂度下求出该数列,那么下面需要讨论的便是如何得到这个递推公式的解:


3. 卡特兰数性质

4. 卡特兰数简单实例

实例1:进出栈问题

栈是一种先进后出(FILO,First In Last Out)的数据结构.如图:

1、2、3、4 顺序进栈,那么一种可能的进出栈顺序是

那么一个足够大的栈的进栈序列 1、2、3、4、5、…、n为时有多少个不同的出栈序列?

首先,每一种进出栈的顺序都与出栈序列一 一对应。也就是说,如果用 +1 表示进栈, -1 表示出栈,那么题中示例中的出栈序列 1 3 4 2与进出栈顺序

是对应的。

实例2:进出栈问题变种




实例三:电影购票问题

实例四:上班路径问题

实例五:乘法结合律问题


实例六:结合律与三角形划分的对应关系

实例七:加括号与三角形划分的对应关系

5. 编程OJ例题

都是非常经典的卡特兰数应用:

[洛谷] P4383 [八省联考2018]林克卡特树
[洛谷] P2532 [AHOI2012]树屋阶梯 题解
[LeetCode] 96. 不同的二叉搜索树

编程大多能用递归、dp解决,但是难度很大,能思维闪现到 Catalan 数这确实方便简单很多,使用高精度,实现高精乘单精、高精除单精以及输出高精就可以啦!

6. 参考资料

https://www.luogu.com.cn/problem/list?keyword=%E5%8D%A1%E7%89%B9%E5%85%B0%E6%95%B0&page=1
https://www.cnblogs.com/rhythmic/p/5857927.html
http://lanqi.org/interests/10939/(数学大牛兰琦,高中就买了他的数学参考数,确实很顶!)

[杂谈] 14. Catalan卡特兰数相关推荐

  1. Catalan (卡特兰数)

    Catalan (卡特兰数) 前置知识: 1.排列数公式: A n m = n ( n − 1 ) ( n − 2 ) . . . ( n − m + 1 ) A^m_n=n(n-1)(n-2)... ...

  2. 【数论】——Catalan 卡特兰数

    Catalan 卡特兰数 文章目录 Catalan 卡特兰数 定义 计算 证明 推论 代码 定义 给定 n 个 0 和 n 个 ** 1**,它们将按照某种顺序排成长度为 **2n ** 的序列,求它 ...

  3. 关于Catalan(卡特兰)数的理解

    卡特兰数的起源 Catalan数源自Euler对凸多边形通过不相交的对角线切分成三角形的不同切分方案数. n+1个顶点(A1,A2...An+1)的凸多边形,取定多边形的一条边,不妨设为A1An+1, ...

  4. Catalan卡特兰数

    卡特兰数是组合数学中一个常出现在各种计数问题中的数列,其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42- 计算卡特兰数的通项公式:h(n)=C(2n,n)/(n+1) 卡特兰数的应 ...

  5. 卡特兰数 Catalan

    做初赛题,回顾到以前学的一些知识,发现还有其他广泛的应用,所以在此记录并当作复习,若有不当之处,随时欢迎读者斧正. Catalan 卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中 ...

  6. 卡特兰数Catalan number的应用

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

  7. 卡特兰数 Catalan number

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

  8. Catalan number卡特兰数

    背景知识介绍:   卡特兰数是离散数学中的一个重要数列,是很多生活场景的一个抽象,比如买早餐.买电影票等等.在很多大公司的笔试或者面试题中也常涉及到. 百度百科介绍   卡特兰数   卡特兰数是组合数 ...

  9. 卡特兰数 Catalan数

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

最新文章

  1. MySQL索引背后的数据结构及算法原理【转】
  2. python快速编程入门例题-Python快速编程入门,打牢基础必须知道的11个知识点 !...
  3. 10个顶级的CSS3代码生成器
  4. Navicat Premium创建MySQL存储过程
  5. 列运算_MIT—线性代数笔记06 列空间和零空间
  6. Linux下使用润乾设计器
  7. 税务计算机类考试题型,税务师考试题型分值分配、计算器要求及2020年考试时间安排...
  8. Android选项卡TabHost功能和用法
  9. 数据结构:二叉树的非递归遍历
  10. Unity 3D课程总结
  11. iOS 播放器静音设置方法
  12. 英特尔400系列服务器芯片组,驱动支持列表再立功 Intel 400系列芯片组曝光
  13. Excel加密如何破解
  14. 中国三大互联网巨头陷入移动战争
  15. 定制交友盲盒软件 交友盲盒软件开发 交友软件系统开发
  16. FTX交易平台与AZA Finance达成合作,推动非洲数字经济发展
  17. 优酷网(YOUKU.com)介绍
  18. android 两边圆角,Android自定义View实现带4圆角或者2圆角的效果
  19. Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation)和exp不能导出空表
  20. 防止网站被恶意镜像或反向代理方法

热门文章

  1. day1 704.二分查找 27.移除元素
  2. Dubbo入门基础与实例讲解
  3. 如何替换json对象中的key
  4. ue4 后期处理景深_【UE4设计师】2-3后期处理效果——使用景深设置电影拍摄
  5. DCT变换和DFT变换
  6. android 开发论坛资源URL
  7. 18种抗癌果蔬排行榜
  8. Jvectormap中文帮助文档(API)
  9. Android Studio使用Composing builds统一依赖管理
  10. ajax传递数组,后台接收