卡特兰数 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. Game on Sum--组合数学--DP

    \(Codeforces-Round 767\) (Div. 2) F2. \(Game \ on \ Sum\) \(HERE\) 题意 \(QZS\) 和 \(HANGRY\) 玩游戏. 游戏共有 ...

  2. LaTeX 插入伪代码

    使用 algorithm 包和 algpseudocode 包 algorithm 包 用途: 提供一个浮动体环境来包含算法(类似于 figure 和 table 环境),使得算法可以自动编号并出现在 ...

  3. express项目的创建

    前言 前端开发者若要进行后端开发,大多都会选择node.js,在node生态下是有大量框架的,其中最受新手喜爱的便是老牌的express.js,接下来我们就从零创建一个express项目. 安装nod ...

  4. 游戏AI LOD交易员(附项目)

    游戏AI的LOD控制 这次我们来一同看看AI LOD的一个另类控制技术,如果你对AI LOD一无所知也没关系,本文会为你们做个科普.但请注意,本文着重讨论其思想, 没有讲代码细节(因为很多涉及数学,有 ...

  5. Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404

    Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404 在学习共享库时使用通过git拉取jenkin ...

  6. Serilog文档翻译系列(一) - 入门指南

    保持优质文档是 Serilog 的优先事项.如果你发现文档中有缺失或不准确的内容,或者希望通过添加主题或教程来扩展 wiki,请通过问题追踪系统告知我们. 为什么选择Serilog? 与许多其他 .N ...

  7. EF Core – 8.0 new features

    参考 Docs – What's New in EF Core 8 Support DateOnly and TimeOnly SQL Server 早在 2008 年就已经支持 date 和 tim ...

  8. 推荐3款卓越的 .NET 开源搜索组件库

    前言 最近有不少同学提问:.NET有哪些开源的搜索组件库可以推荐的吗?,今天大姚给大家推荐3款卓越的 .NET 开源搜索组件库,希望可以帮助到有需要的同学. Elasticsearch .NET El ...

  9. Qt连连看(二)界面制作

    我们先来制作两个简单的页面 一.主界面 要求在main.cpp里面设置对应的槽函数 (1) 点击开始游戏能跳转到游戏界面 (2) 点击帮助能够显示游戏说明,如下 二.游戏界面 要求如下: (3) 初始 ...

  10. MyBatis——案例——查询-单条件查询-动态条件查询

    单条件查询-动态条件查询(choose(when,otherwise))      从多个条件中选择一个   choose(when,otherwise) 选择,类似于java中的Switch语句(w ...