卡特兰数 Catalan 数列

引入

有一个无限大的栈,进栈的顺序为 \(1,2,\cdots,n\),求有多少种不同的出栈序列。

设 \(h[n]\) 为 \(n\) 个数的出栈序列方案数。

可以这样想 \(k\) 是最后一个出栈的数,那么比 \(k\) 早进栈早出栈的有 \(k-1\) 个,方案数也就是 \(h[k-1]\)。同理比 \(k\) 晚进栈早出栈的方案数就是 \(h[n-k]\),那么 \(k\) 作为最后一个出栈的数贡献的方案数为 \(h[k-1]h[n-k]\)。

由于 \(1\) 到 \(n\) 中任何一个数都可以成为 \(k\),那么 \(h[n]\) 的方案数就是 \(h[n]=\sum_{i=1}^n h[i-1]h[n-i]\)。

\(h\) 就是卡特兰数列。

应用问题

  • 1.有 \(2n\) 个人排队买票,票 \(5\) 元一张。有 \(n\) 个人有 \(5\) 元钞票,另外 \(n\) 个人有 \(10\) 元钞票,售票处没有其它钞票,求有多少种排队顺序不会使售票处无法找零。

    分析:每一个 \(10\) 元的钞票都需要一个 \(5\) 元的钞票,不妨把 \(5\) 元看成进栈 \(10\) 元看成出栈,每一种出栈序列对应一种排队方案,问题变为引入问题,答案为 \(h[n]\)。

  • 2.学校在坐标 \((n,n)\) 处,每天彬彬上学会从 \((0,0)\) 出发,向 \(x\) 轴正方向走 \(n\) 步,向 \(y\) 轴正方向走 \(n\) 步,求不穿过(可以碰到)\((n,n)\) 与 \((0,0)\) 对角线(即直线 \(y=x\))的路径数(只走直线 \(y=x\) 下方)。

    分析:如果想不穿过对角线那么可以移动看做进栈和出栈。如上题,一种出栈序列对应一种路径方案,答案为 \(h[n]\)。

总结:对于一些问题,可以转换成不同出栈序列的问题,那么便可以由卡特兰数得到。

  • 3.有一个 \(n\) 条边的凸多边形,用直线连接对角线,使该多边形分为多个三角形,每条直线不相交,问有多少种划分方法。

    分析:我们先将多边形顺序编号 \(p_1,p_2,\cdots,p_n\),选择基边 \(p_1p_n\),再任选一个点 \(p_k\ (2\leq k \leq n-1)\),连接 \(p_1p_k,p_np_k\),这样(除连接的三角形外)将多边形重新分为了一个 \(k\) 边型和 \(n-k+1\) 边型,那么设 \(f[n]\) 为 \(n\) 边型的答案,有 \(f[n]=\sum_{i=1}^n h[i-1]h[n-i]\)。这正是卡特兰数的递推公式。

  • 4.圆环上有 \(2n\) 个点,求点成对连接,线段不相交的方案数。

    分析:和上述一样,选择后点对后会分为两部分,将两部分独立处理即可。

总结:如果一个问题可以通过枚举来分为两部分,通过乘法和加法原理得到相同的递推式,那么也是卡特兰数列。在做题中,我们可以先设 \(dp\) 在推式子,得出 \(dp\) 的递推公式,再来判断卡特兰数;或者先看能否分为两部分,再推式子。

公式

使用应用问题 \(2\) 推导:

先不管不管对角线限制,从 \((0,0)\) 到 \((n,n)\) 的路径数为 \(C_{2n}^n\)。

在减去穿过对角的路径数,即减去触碰到 \(y=x+1\) 的直线的路径数。

把一条路径碰到 \(y=x+1\) 之前的路径以 \(y=x+1\) 为对称轴翻转,发现每次的起点都变成 \((-1,1)\)。

图中黄线为原触碰 \(y=x+1\) 的路径,灰色为关于 \(y=x+1\) 翻折的部分。

那么不合法线段的选择数就是从 \((-1,1)\) 走到 \((n,n)\) 的方案数。(无论怎么走都会触碰红线)

那么合法的方案数就是 \(总方案数-不合法方案数\),即 \(h[n]=C_{2n}^n-C_{2n}^{n-1}\)。

化简后变得到了 \(h[n]\) 的递推式,\(h[n]=C_{2n}^n-C_{2n}^{n-1}=\frac{C_{2n}^n}{n+1}\)。

卡特兰数 Catalan 数列的更多相关文章

  1. 卡特兰数 Catalan数 ( ACM 数论 组合 )

    卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1)  编辑 收藏 引用 所属分类: ACM ( 数论 ...

  2. 浅谈卡特兰数(Catalan number)的原理和相关应用

    一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[ ...

  3. 卡特兰数 catalan number

    作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...

  4. 卡特兰数(Catalan Number) 算法、数论 组合~

    Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为( ...

  5. 卡特兰数(Catalan)及其应用

    卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项 ...

  6. 卡特兰数 (Catalan)

    卡特兰数:(是一个在计数问题中出现的数列) 一般项公式: 1.         或       2.   递归公式: 1.  或 2. 注:全部可推导. (性质:Cn为奇数时,必然出现在奇数项 2k- ...

  7. 卡特兰数 Catalan 笔记

    一.公式 卡特兰数一般公式 令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>= ...

  8. ACM数论-卡特兰数Catalan

    Catalan 原理: 令h(0)=1,h(1)=1,catalan 数满足递归式: (其中n>=2) 另类递推公式: 该递推关系的解为: (n=1,2,3,...) 卡特兰数的应用实质上都是递 ...

  9. 卡特兰数(Catalan Number) 学习笔记

    一.三个简单的问题 1.给定一串长为2n的01序列,其中0和1的数量相等,满足任意前缀中0的个数不少于1的个数,求序列的个数 2.给出一串长为n的序列,按顺序将他们进栈,随意出栈,求最后进出栈的方案 ...

  10. 【知识总结】卡特兰数 (Catalan Number) 公式的推导

    卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结. (似乎就是这两个比 ...

随机推荐

  1. JS脚本批量处理TS数据类型

    在TS开发中,经常会遇到后台数据字段比较多的情况,这时候需要一个个复制字段然后给他手动配置数据类型来完成我们的TS类型定义,相当麻烦.有什么快速的方法呢,我就目前遇到的两种情况分别写了JS脚本来处理后 ...

  2. CANopen学习笔记(三)NMT

    NMT NMT主要用来管理和控制各个节点的状态,具体协议可以分为以下四类: NMT protocol Node guard protocol Heartbeat protocol Bootup pro ...

  3. 又一个Rust练手项目-wssh(SSH over Websocket Client)

    原文地址https://blog.fanscore.cn/a/61/ 1. wssh 1.1 开发背景 公司内部的发布系统提供一个连接到k8s pod的web终端,可以在网页中连接到k8s pod内. ...

  4. XGBoost模型 0基础小白也能懂(附代码)

    XGBoost模型 0基础小白也能懂(附代码) 原文链接 啥是XGBoost模型 XGBoost 是 eXtreme Gradient Boosting 的缩写称呼,它是一个非常强大的 Boostin ...

  5. Angular 18+ 高级教程 – Component 组件 の Angular Component vs Shadow DOM (CSS Isolation & slot)

    前言 要掌握 Angular,最好先掌握原生. 全局 CSS 的问题,还有如何用原生 CSS 来管理全局 CSS,看这篇. 利用 Shadow Dom 来隔离 CSS 看这篇. CSS Global ...

  6. 彻底理解 IP 地址,子网掩码,子网划分

    原文地址:https://oldme.net/article/55彻底理解 IP 地址,子网掩码,子网划分 什么是 IP 协议 在回答什么是 IP 协议前,我们先需要回答另外一个问题:什么是网络?从普 ...

  7. codeforces 1931E

    题目链接 简介:对一些数字,余念安可以反转一个数字,齐夏将两个数字首尾相连变为一个数字.每个人都采取最优策略. 名单上只剩下一个号码.如果该整数不小于  10的m次方 ,则齐夏获胜.否则余念安就赢了. ...

  8. ConcurrentLinkedQueue详解(图文并茂)

    前言 ConcurrentLinkedQueue是基于链接节点的无界线程安全队列.此队列按照FIFO(先进先出)原则对元素进行排序.队列的头部是队列中存在时间最长的元素,而队列的尾部则是最近添加的元素 ...

  9. 五行强度得分_喜用神api免费接口_json数据八字五行强弱接口

    本API接口基于深厚的八字学原理,为用户提供详尽的五行(金.木.水.火.土)强弱分析.五行打分评估,以及精准的喜用神判断.用户只需输入自己的八字信息,即可获得全面而深入的命理解读. ‌一.核心功能‌ ...

  10. iOS关于搜索不规则瀑布流布局的实现小结

    最近在项目开发中遇到了不规则搜索布局的问题.之前常用的解决方案是用一个tableview用一个循环动态的加载,唯一的缺点是需要动态的移除,其实也已经足够.https://download.csdn.n ...