zoukankan      html  css  js  c++  java
  • 卡特兰数

    卡特兰数

    卡特兰数的意义

    卡特兰数有一个很重要的意义就是:
    (C_n)表示所有在n × n格点中不越过对角线的单调路径的个数。

    通项公式

    卡特兰数有两个通项公式,第一个是这样的:

    [C_{n}=frac{1}{n+1}left(egin{array}{c}{2 n} \ {n}end{array} ight)=frac{(2 n) !}{(n+1) ! n !} ]

    第二个是这样的:

    [displaystyle C_n=inom{2n}{n}-inom{2n}{n+1}quad operatorname{for} nge1 ]

    第一个公式就是把第二个公式拆开。

    卡特兰数通项公式的证明

    我们考虑证明第二个公式。证明的方式有很多,均和卡特兰数的性质有关,证明方法之间也可以互相转换。所以这里介绍一种最普通的证明方法。

    根据定义,合法的路径不能越过对角线。那么我们考虑利用总方案数(C_{2n}^n)减去不合法的方案数。

    这里的黄色线和绿色线连接而成的路径代表一条不合法的路径,我们把路径第一次超越对角线的点(点L)到终点(点A)的路径沿粉色线条(对角线向上平移1个单位得到)对称。得到了蓝色的路径。显然,这里的黄色路径和蓝色路径是对应的。

    而之所以选择“向上平移1个单位”的意义就是在任何情况下接触这条线就会变成不合法路径。

    容易证明,所有不合法的路径和所有从原点到A'点的路径都是一一对应的。所以不合法的路径条数就是从原点到A'的路径条数(C_{2n}^{n-1})

    证明如下:

    因为这个关系是可逆的(通过操作后的路径能得出操作前的路径),所以显然所有不合法的路径和所有从原点到A'点的路径都是一一对应的。

    这样就得出了前面提到的卡特兰数第二个通项公式:

    [C_{n}=left(egin{array}{c}{2 n} \ {n}end{array} ight)-left(egin{array}{c}{2 n} \ {n+1}end{array} ight) quad ext { for } n geq 1 ]

    应用

    组合数学中有非常多的组合结构可以用卡塔兰数来计数。

    • (C_n)表示长度2n的dyck word的个数。Dyck word是一个有n个X和n个Y组成的字串,且所有的前缀字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words: XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY。(这个性质在ZROI1151用到了)
    • 将上例的X换成左括号,Y换成右括号,(C_n)表示所有包含n组括号的合法运算式的个数。
    • (C_n)表示有n个节点组成不同构的二叉树方案数。下图中,n等于3,圆形表示节点,月牙形表示什么都没有。(不同构二叉树是指:对于两颗二叉树每个节点,他们的左儿子和右儿子完全相等)
    • (C_n)表示有2n+1个节点组成不同构"合并果子树"(full binary tree)的方案数。下图中,n等于3,圆形表示内部节点,月牙形表示外部节点。本质同上。

    • (C_n)表示通过连结顶点而将n + 2边的凸多边形分成三角形的方法个数。
    • (C_n)表示集合({1,...,n})依次入栈后合法的出栈顺序方案数。

    参考资料

    维基百科-卡特兰数

  • 相关阅读:
    WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用
    分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。
    小议主子表INT自增主键插入记录的方法SQL server]教程
    微软工程师主讲的SqlServer2005视频教程
    11 个重要的数据库设计规则
    sql数据库设计学习---数据库设计规范化的五个要求
    YY淘宝商品数据库设计
    ASP.NET MVC的客户端验证:jQuery的验证
    ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
    UNIX标准化及实现之POSIX标准可选头文件
  • 原文地址:https://www.cnblogs.com/GavinZheng/p/11706690.html
Copyright © 2011-2022 走看看