zoukankan      html  css  js  c++  java
  • 组合数学——卡特兰数

    我们以一道题为例来介绍卡特兰数:

      题目链接:满足条件的01序列

    给定n0n个1,它们将按照某种顺序排成长度为2n的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个。

    输出的答案对109+7取模。

      为了便于解决,我们可以把这个问题转化成:

    给定一个n*n的矩阵,每一步只能往右走或者往上走,求从左下角顶点走到右上角顶点所有方案中,往右走的步数不少于往上走的步数的方案的数量,并且对109+7取模。

      我们再将目标进行一步转化:

    合法路径数 = 总路径数 - 非法路径数

      其中总路径数显然为组合数C126,故接下去只需求非法路径数即可。

      我们举n=6的实例来看:

      如下图:

      

      从(0,0)走到(6,6)的路径所有路径就是总路径。

      显然,所有黑线以下的路径皆为合法路径,如图中绿线所示路径就是一条合法路径。

      而任何一条经过红线的路径一定是非法路径,如图中蓝线所示路径。

      那么我们将该非法路径第一次经过红线后的部分关于红线作对称,如图中黄线所示。

      不难发现,任何一条非法路径进行如上的对称操作后终点一定是(5,7)。

      进而又可以发现,从(0,0)到(5,7)的任何一条路径进行如上对称操作后一定是一条非法路径。

      故从(0,0)到(5,7)的路径与非法路径构成双射。

      那么显然,非法路径数即是组合数C125

      所以合法路径数就是C126 - C125。

      而我们又可以发现,C2nn - C2nn-1 = C2nn/(n+1)。

      这就是卡特兰数

      而上述该题正是卡特兰数的一个应用。


     卡特兰数:

      以下内容参考百度百科:卡特兰数

    卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。

    原理:

    设h(n)为catalan数的第n项,令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>=2)

    例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2

    h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5

    另类递推式:

    h(n)=h(n-1)*(4*n-2)/(n+1);

    递推关系的解为:

    h(n)=C(2n,n)/(n+1) (n=0,1,2,...)

    递推关系的另类解为:

    h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)


     卡特兰数的常见应用:

    一、出栈次序

    一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

    二、括号化

    矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)

    三、凸多边形三角划分

    在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。比如当n=6时,f(6)=14。

    四、给定节点组成二叉搜索树

    给定N个节点,能构成多少种不同的二叉搜索树(能构成h(n)个)

    五、n对括号正确匹配数目

    给定n对括号,求括号正确配对的字符串数。

  • 相关阅读:
    JQuery实现模糊查询关键字高亮输入框
    jq--实现自定义下拉框
    js 实现颜色值格式转换 rgb和十六进制的转换
    原生JavaScript设置、获取 单选框、复选框 的值
    win10 开启端口,auto.js端口
    AES的加密和解密(Java and javascript)
    去除移动端 alert / confirm 显示的 url
    移动端拖拽
    前台传入base64图片,java后台转为MultipartFile文件
    移动端调试vConsole
  • 原文地址:https://www.cnblogs.com/ninedream/p/11223009.html
Copyright © 2011-2022 走看看