引入

    今天听学长讲了卡特兰数列后对其有了更深的认识,在此完善了一下之前的博客加以总结。

    首先用一个经典的例子来描述一下Catalan数列,我们有一个1~n的数列和一个大小为n的栈,我们有如下两种操作:

      1. 当未入栈序列不为空时,使序列的第一个元素入栈。
      2. 当栈不为空时,使栈顶元素出栈。

    我们可以显然地发现,如果我们选择操作的顺序不同,我们最后所形成的出栈序列也不相同,那么有多少种出栈序列呢?

  

    而这个数列中的C(n),就是我们所定义的Catalan数列。

    如果我们把所有每一次的操作都写出来,可以得到一个关于1和2的操作序列,这个序列有以下性质:

    1. 共有2n项且n项为1,n项为2。
    2. 从左往右1的个数永远不少于2的个数。

定义

通项公式

  

通项公式推导

  方法1:数学方法,摘自某大老的PPT,表示不是很了解,在此向各位大佬请教。




(注意他证明过程中的初值是


  方法2:组合数证明法

  我们设定一个情景:假设一个点从A(0,0)出发走到B(n,n),我们定义两种走的方法:

    1. 往右走。
    2. 往上走。

  我们从A走到B,一共要走2n步,其中n步为1,n步为2,这样我们从A走到B的方案也就可以转化为一个1和2的序列了,而所有的1和2的序列构成的排列,即为从A走到B的方案数:

  相较之于引言中所提到的序列,要使通过这种情景生成的序列是满足Catalan的数列的方案序列,我们需要的充要条件是从左往右1的个数永远比2的个数少(即向上走过的次数不少于向右走过的次数),即所走的路径只存在于紫线的上部,而这个条件等价于所形成的路径与绿线没有交点。我们已经知道了所有的方案数,我们只需要求出不满足条件的方案数就可以了。

  举出一个反例(红线)我们把这条线与绿线的第一个交点之后的部分都关于绿线对称得到蓝线部分,加上前面的部分与之形成的路径构成了一条从A(0,0)走向C(n+1,n-1)的路径,我们可以发现这样的蓝线有以下三条性质:

    1. 蓝线只向上走和向右走,且重点为C(n+1,n-1)。
    2. 对于每一条符合性质1的蓝色路径都有且只有一条不合法的红色路径与之对应。
    3. 对于每一条不合法的红色路径有且只有一条满足性质1的蓝色路径与之对应。

  由此,我们可以发现不合法的红色路径与满足上述性质的蓝色路径一一对应,所以不合法路径数就是蓝色路径数,为

  所以,所有合法的路径数为:,即Catalan的第n个数为

推论

    • n个左括号和n个右括号组成的合法括号序列的数量为Cat(n)。
    • 1,2,···,n经过一个栈,形成的合法出栈序列的数量为Cat(n)。
    • n个结点构成的不同二叉树的数量为Cat(n)。
    • 在平面直角坐标系上每一步只能向右或向上走,从(0,0)走到(n,n)并且除两个端点外不接触直线 y = x的路线数量为Cat(n)。
      • 推广:在平面直角坐标系上,每一步只能向右或上走一步,从(0,0)走到(n,m)(n ≥m)并且除两个点外不接触直线 y = x 的路线的数量为

Catalan数列的更多相关文章

  1. Catalan 数列的性质及其应用(转载)

    转自:http://lanqi.org/skills/10939/ 卡特兰数 — 计数的映射方法的伟大胜利 发表于2015年11月8日由意琦行 卡特兰(Catalan)数来源于卡特兰解决凸$n+2$边 ...

  2. 什么是 Catalan 数列以及其应用

    引言 在开始论述之前,我想请大家先看下这几个问题: 有 \(2n\) 个人排成一行进入剧场.入场费 5 元.其中只有 \(n\) 个人有一张 5 元钞票,另外 \(n\) 人只有 10 元钞票,剧院无 ...

  3. bzoj1485: [HNOI2009]有趣的数列(Catalan数)

    1485: [HNOI2009]有趣的数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2105  Solved: 1117[Submit][Stat ...

  4. catalan数及笔试面试里那些相关的问题(转)

    一.catalan数由来和性质 1)由来 catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项 ...

  5. bzoj1485:[HNOI2009]有趣的数列

    思路:首先限制数很多,逐步来考虑,限制一很容易满足,考虑限制二,也就是让奇数位和偶数位上的数递增,限制三就是让奇数位上的数小于奇数位加一对应的偶数位上的数,那么我们可以把形成序列的过程看成加数的过程, ...

  6. 从头说catalan数及笔试面试里那些相关的问题 (转)

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11938973. 声明:版权所有,转载请注明出处,谢谢 ...

  7. Catalan数计算及应用

    Catalan数列是非常奇妙的一列数字,因为很多问题的解就是一个Catalan数.知道了这一规律,很多看似复杂的问题便可迎刃而解.那么什么是Catalan数,什么样的问题的解是Catalan数呢? 1 ...

  8. caioj 1204 Catalan数(模板)

    题目中对卡特兰数的总结很不错 以下copy自题目 Catalan数列:1,1,2,5,14,42,(前面几个要背) 即 h(0)=1,h(1)=1,h(2)=2,h(3)=5...公式:h(n)=C( ...

  9. Trees Made to Order——Catalan数和递归

    Trees Made to Order Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7155   Accepted: 40 ...

随机推荐

  1. IDEA 中tomcat启动问题时,一直出去发布状态,无法加载项目

    解决方法:排查clean.build之前添加的xml中的sql语句,发现sql多写了一个逗号,导致无法加载项目.修改完sql,就可以跑了.

  2. andoid 多线程断点下载

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  3. java多线程lock的使用

    看代码: package com.ming.thread.reentrantlock; import java.util.concurrent.locks.Lock; import java.util ...

  4. springboot整合rabbitmq,支持消息确认机制

    安装 推荐一篇博客https://blog.csdn.net/zhuzhezhuzhe1/article/details/80464291 项目结构 POM.XML <?xml version= ...

  5. C++程序设计基础(8)main函数

    注:读<程序员面试笔记>笔记总结 1.知识点 (2)main函数的形式 //first type int main() //second type int main(int argc,ch ...

  6. 新版本火狐 ,Chrome不支持showModalDialog解决办法

    平常的网站中,有时我们会希望使用者按下按钮后开启一个保持在原窗口前方的子窗口,在IE中,我们可以使用showModalDialog来达成,但是chrome早就不支持showModalDialog,最近 ...

  7. UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

  8. mvc中在Action里调用另一个Action

    今天做东西时发现一个新东西.即在一个Action调用另一Action.前提是同一个控制器.(没在一个控制里的没试过) 调用方法: public   ActionResult Test1(){ //to ...

  9. hibernate从零开始到各种映射

    ORM(对象/关系数据库映射) 对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.它完成了面向对象的编程语言到 ...

  10. OLEDB 参数化查询

    一般情况下,SQL查询是相对固定的,一条语句变化的可能只是条件值,比如之前要求查询二年级学生信息,而后面需要查询三年级的信息,这样的查询一般查询的列不变,后面的条件只有值在变化,针对这种查询可以使用参 ...