卡特兰数——括号匹配问题

2023-11-01

卡特兰数的递推公式是F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}
一般性公式为F(n)=C(2n,n)/(n+1)

可以描述的问题有
1、n个元素的二叉查找树有多少种。
2、n*n棋盘从左下角走到右上角而不穿过主对角线的走法。
3、2n个人排队买票问题,票价50,n个人拿50元,n个人拿100元,售票处无零钱,能顺利卖票的所有排队方式。
4、n个元素全部入栈并且全部出栈的所有可能顺序。

这些问题的答案都是卡特兰数F(n)。但是很明显可以看出后三个问题是同质的。
都可以抽象成2n个操作组成的操作链,其中A操作和B操作各n个,且要求截断到操作链的任何位置都有:A操作(向右走一步、收到50元、元素入栈)的个数不少于B操作(向上走一步、收到100元找出50元、元素出栈)的个数。故问题2、3、4其实是同一个问题。

下面先证明问题2、3、4和问题1同解,再证明问题2、3、4的解是F(n)=C(2n,n)/(n+1),从而证明问题1的解也是F(n)=C(2n,n)/(n+1)。

1、问题2、3、4和问题1同解
问题1的解是F(n)=∑(k=0…n-1){F(k)*F(n-1-k)},因为一棵n个结点的二叉排序树的根可以是1到n的任意结点,设为k,则其左子树结点个数为k,左子树的种类一共有F(k-1)种,右子树结点个数为n-k,右子树的种类一共有F(n-k)。而究竟哪一点为根可以有1到n共n个选择,故k取遍1到n——F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}。

如果我们能证明问题2的解也可表示为F(n)=∑(k=0…n-1){F(k)*F(n-1-k)},就完成了证明。

考虑n*n棋盘,记主对角线为L。从左下角走到右上角不穿过对角线L的所有路径,不算起点,一定有第一次接触到L的位置(可能是终点),设此位置为M,坐标为(x,x)——设第一个数为横轴坐标。该路径一定从下方的(x,x-1)而来,而起点处第一步也一定是走向(1,0),两者理由相同——否则就穿过了主对角线。考虑从(1,0)到(x,x-1)的(x-1)*(x-1)的小棋盘中,因为在此中路径一直没有接触过主对角线(M的选取),所以在此小棋盘中路径也一定没有穿过从(1,0)到(x,x-1)的小棋盘的对角线L1。这样在这个区域中的满足条件的路径数量就是一个同构的子问题,解应该是F(x-1),而从M到右上角终点的路径数量也是一个同构的子问题,解应该是F(n-x),而第一次接触到主对角线的点可以从(1,1)取到(n,n),这样就有F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k-1)*F(n-k)}。证毕。

2、问题2的解为F(n)=C(2n,n)/(n+1)
思路是先求所有从(0,0)到(n,n)的路径数X,再求所有穿过主对角线L的从(0,0)到(n,n)的路径数Y,用前者减去后者得到所求。
从(0,0)到(n,n)的路径数显然是C(2n,n),一共要走2n步到达右上角,其中向右和向上各n步,总走法是C(2n,n)。
考虑一个新增的位置(n-1,n+1),它位于终点的左上角一个格处,设所有从(0,0)到(n-1,n+1)的路径数为Z,下面要证明Y和Z相等,从而通过求Z来求Y。
考虑从(0,1)到(n-1,n)的对角线L2,对于所有穿过L而到达终点的路径,一定会接触到L2,找出某路径第一次接触到L2的位置M1,将从M1到终点的路径沿L2做对折一定会得到一条从M1到(n-1,n+1)的路径,故每条穿过L到达终点的路径都对应一条到达(n-1,n+1)的路径,即有Y<=Z。

所有从起点到达(n-1,n+1)的路径都一定会穿过L2,找出某路径第一次穿过L2的位置M2,将M2到(n-1,n+1)的路径沿L2对折,就得到一条M2到(n,n)的路径,且该条路径一定穿过L,故每条到达(n-1,n+1)的路径都对应一条穿过L到达终点的路径,即有Z<=Y。
故Z==Y。
接下来通过求Z来求Y。Z是显然的从(0,0)到(n-1,n+1)共需走2n步,其中向右n-1步、向上n+1步,故Z=C(2n,n-1)。
由以上可知F(n)=X-Y=X-Z=C(2n,n)-C(2n,n-1)=C(2n,n)/(n+1)。证毕。

由以上可知问题1的解也是F(n)=C(2n,n)/(n+1),故求和(k){F(k)*F(n-1-k)}=C(2n,n)/(n+1)。这个数称为卡特兰数,前几项为1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796。

除了上面描述的四个问题外,它对应的问题还有:
矩阵链所有乘法顺序问题(同问题1)。
凸多边形剖分成三角形的方法数(同问题1)。

3 Responses to “卡特兰数”
carter Says:
一月 6th, 2011 at 5:50 下午
请问楼主对括号配对和入栈出栈这2个问题,如何分析成F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}? 并且如何进一步分析成C(2n,n)-C(2n,n-1)?

chris Says:
一月 10th, 2011 at 9:26 上午
这两个问题与棋盘问题都是同质的,这个很明显。而棋盘问题实际是可以写成F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}的,我上面好像忘了写了,等我下午考完试来补上吧。

chris Says:
一月 10th, 2011 at 4:24 下午
原来我上面已经证明过了。因为入栈出栈问题和括号配对问题与棋盘街问题同质(考虑入栈和一个左括号等于向右走一格,出栈和一个右括号等于向左走一格);而棋盘街问题可以分析成F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}(文中有证明)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡特兰数——括号匹配问题 的相关文章

  • 利用cuda加速MATLAB程序

    利用cuda加速MATLAB程序 利用cuda加速MATLAB程序 1参考木子超的办法 2参考Tomheaven的方法 3引用 最近因为要做张量的模态积 所以要考虑使用cuda来进行并行的编程 但是c 实在太麻烦 尤其是在有MATLAB的时
  • LightOJ 1045 Digits of Factorial

    Problem acm hust edu cn vjudge problem visitOriginUrl action id 26765 分析 在base进制下 pow base x 表示最小的 x 1 位数 pow base x 1 表
  • 最小熵原理

    种草很好的博文 苏剑林 2018 Apr 18 最小熵原理 一 无监督学习的原理 Blog post Retrieved from https spaces ac cn archives 5448 苏剑林 2018 Apr 24 最小熵原理
  • 【数学】3、动态规划

    文章目录 一 原理 1 1 如何想到dp 二 案例 2 1 编辑距离 2 1 1 状态转移 2 1 2 状态转移方程和编程实现 2 2 钱币组合 一 原理 接着文本搜索的话题 来聊聊查询推荐 Query Suggestion 的实现过程 以
  • 机器学习与数学基础知识(一)

    最近 朋友分享给我一套 七月在线 的机器学习视频 我几经思量之后 决定从视频量最少的数学基础部分开始看起 今天学习完了第一个视频 长达2小时 感觉老师讲的挺不错的 以前自己就对机器学习很感兴趣 做了一些了解和尝试性地学习 也看了一点经典的林
  • EM算法估计beta混合模型参数

    1 用 network memerisation 造成的 clean noisy 数据 loss 差异来区分 clean noisy data 当得到一批数据的 normalised loss l i 0
  • 离散数学——成真赋值与成假赋值

    今天复习离散数学的时候饱受一个问题的困扰 为什么主析取范式和主合取范式的小项和大项采用不一样的赋值方式 查阅一些资料后得出答案 在这里分享给大家 首先给大家明确一下赋值 成真赋值 成假赋值的概念 对于一个命题公式P中的所有命题变项指定一组真
  • 双重求和∑∑的定义及性质

    目录 一 复习求和符号 二 二重求和的定义 三 双重求和 交换求和顺序 一 复习求和符号 自从约瑟夫 傅立叶于1820年引入求和符号 大写的希腊字母sigma 以来 求和 以及双重求和 在数学公式推导 命题证明中被经常使用 掌握它的定义和性
  • 从零到熟练编写LaTex数学公式,这两篇就够了

    第一篇 LaTex公式编辑方法 快速手敲一遍 熟悉常用操作 第二篇 CSDN官方参考文档 有不清楚的 随手查阅 在线公式编辑 实在打不出 就在线编辑吧
  • 基础算法题——炎炎消防队(取巧、三分)

    炎炎夏日 题目描述 夏天的重庆格外地炎热 很容易起火 消防士们都全副武装 一旦发生险情就立马赶往救火 森罗是消防队中的一员 他在灭火的过程中突发奇想 如果能用退火的原理求解函数求最小值 那不就可以很容易计算了吗 翌日 森罗来到即将高考的弟弟
  • 牛顿迭代法原理讲解

    牛顿迭代法原理讲解 牛顿迭代法是用于求解等式方程的一种方法 类似于求解F x 0的根 牛顿迭代法求解的是近似根 这个想法准确来说来源于泰勒展开式 我们知道 有些时候 我们需要求解的表达式可能非常复杂 通过一般的方法 我们很难求出它的解 所以
  • 方差、标准差、协方差、协方差矩阵、散度矩阵

    方差 统计中的方差 样本方差 是每个样本值与全体样本值的平均数之差的平方值的平均数 概率论中方差用来度量随机变量和其数学期望 即均值 之间的偏离程度 1 统计 方差用来计算每一个变量 观察值 与总体均数之间的差异 为避免出现离均差总和为零
  • 5 insanely great books about mathematics you should read.

    本文转载至 http wp kjro se 2013 12 27 5 insanely great books about mathematics you should read 翻译请参考 http blog jobbole com 55
  • 《剑指Offer》62:圆圈中最后剩下的数字(约瑟夫环)

    题目 0 1 2 n 1这n个数字排成一个圆圈 从数字0开始 每次从这圆圈你删除第m个数字 求出这个圆圈里剩下的最后一个数字 例如 0 1 2 3 4这5个数字组成一个圆圈 从数字0开始每次删除第3个数字 则删除的前4个数字依次2 0 4
  • 正定Hermiltian矩阵分解的两种方法

    对于正定Hermiltian矩阵 B B B 想要求解 D D D 使其满足
  • 最小二乘法–高斯牛顿迭代法

    最小二乘法 高斯牛顿迭代法 本文将详解最小二乘法的非线性拟合 高斯牛顿迭代法 1 原理 高斯 牛顿迭代法的基本思想是使用泰勒级数展开式去近似地代替非线性回归模型 然后通过多次迭代 多次修正回归系数 使回归系数不断逼近非线性回归模型的最佳回归
  • 06. 计数原理

    6 计数原理 6 1 分类加法计数原理与分步乘法计数原理 分类加法计数原理定义 完成一件事 有 n n n 类办法 在第1类办法中有 m 1 m 1
  • 我的百度经验目录

    百度经验目录 进一步了解基于Mathematica的图像特征检测方法 http jingyan baidu com article a501d80c44a372ec630f5eb4 html 怎么把python代码打包成exe文件 http
  • Mathematica函数大全

    一 运算符及特殊符号 Line1 执行Line 不显示结果 Line1 line2 顺次执行Line1 2 并显示结果 name 关于系统变量name 的信息 name 关于系统变量name 的全部信息 command 执行Dos 命令 n
  • 高中数学:不等式(初接高)

    1 二次不等式 2 分式不等式 最后的例题 是为了说明第三种情况 就是 不等号右边不为0时 要先进行移项操作 将右边化为0 这样 就转化成1 2两种情况了 3 其它复杂不等式 3 1 高次不等式 3 2 绝对值不等式 3 3 根式不等式 补

随机推荐

  • 手把手实战教学!语义分割从0到1:一、数据集制作

    本篇博客 是 手把手实战教学 语义分割从0到1 系列的第一篇实战教学 将重点介绍语义分割相关数据集 以及如何制作自己的数据集 本系列总的介绍 以及其他章节的汇总 见 https blog csdn net oYeZhou article d
  • eclipse debug进入.class_用eclipse创建一个java程序

    1 开启Eclipse程序后 首先开始Eclipse中JAVA项目的新建 在上方的选项栏中选择 File New Java Project 系统会弹出新建项目的属性设置 2 在Java Project的设置页面 主要设置project的项目
  • 网狐荣耀手机端内核源码

    网狐荣耀手机端内核源码 实测 可用 链接 https pan baidu com s 1YT GWgFCDxYqrez7e EJqw 提取码 0ezk
  • 因特网(Internet)的概述

    一 因特网的概述 1 主机 连接在因特网上的计算机都称为主机 2 网络 网络 network 由若干节点 node 和连接这些的结点的链路 link 组成 互联网由网络组成 3 Internet和internet的区别 internet 互
  • 线性代数的本质(四)——行列式

    文章目录 行列式 二阶行列式 n n n 阶行列式 行列式的性质 克拉默法则 行列式的几何理解 行列式 二阶行列式 行列式引自对线性方程组的求解 考虑两个方程的二元线性方程组
  • Flask入门教程(3)-表单验证和WTF扩展

    03 01 普通的表单验证 03 02 flash消息闪现 html代码
  • 自顶向下语法分析(top-down parsing)

    自顶向下语法分析 top down parsing 有回溯的自顶向下分析 非预测分析法 无回溯的自顶向下分析 预测分析法 FIRST集和FOLLOW集 两种预测分析算法 LL 1 文法 文法转换 消除左递归 提取左公因子 输入程序经过词法分
  • react-router V6 版本的使用(自己封装了 Redirect,使用 useRoute 等)

    react router V6 版本的使用 自己封装了 Redirect等 IndexRouter js 使用useRoute 做全局路由的搭建 包括嵌套路由 路由重定向 路由拦截 自己封装 路由懒加载 做了一个简单的封装 等 import
  • 五线谱音名和组别对照表_五线谱简谱对照表(五线谱1234567表示图)

    五线谱音阶图 音乐符号是世界上常用的符号 用来记录笔记的五行平行线称为谱线 工作人员有5条线 在这5条线中有4个房间 每行和每个房间上方都有一个音符 五条线和四个房间是不够的 并且可以添加其他房间和线 在学习职员记号之后 将始终使用它 因为
  • 入职华为外包一个月后,我离职向“北上广深”流浪了...

    这次来聊一个大家可能也比较关心的问题 那就是就业城市选择的问题 而谈到这个问题 就不可避免地会谈到一些关于 机会 技术氛围 跳槽 薪资水平 等等一系列问题 正好 这也是大家所常问的 我只能说来聊聊我的感受吧 我觉得城市选择非常重要 尤其对我
  • 链表大小排序方法c语言,5 种排序算法--C语言链表

    源码地址 GitHub https github com GYT0313 C DataStructure blob master sortIn5 c 包括 冒泡排序 快速排序 选择排序 插入排序 希尔排序 运行 注意 快速排序的核心代码应该
  • C#中属性赋值的步骤以及语法详解

    首先我们要先知道什么是C C 是由微软 Microsoft 开发 其中还包括C 面向过程 C C 是一个简单的 现代的 通用的 面向对象的编程语言 面向对象 是一种解决问题的思想 那么什么是对象 在程序员的眼中自己身边万物都可以理解为对象
  • python运行js文件_python-execjs(调用js)

    一 安装 pip3 install PyExecJS 电脑上要有nodejs环境 二 使用 一 获取js字符串 首先将js保存至于本地文件或者你可以可以直接读到内存 必须让js以python基础教程字符串的形式展示 注意点 字符串中不要出现
  • Go 获取10分钟前的时间,一天前的时间。。。

    time Now Add time Minute 10 golang的time包里面有个AddDate方法 nTime time Now yesTime nTime AddDate 0 0 1 logDay yesTime Format 2
  • FireFox浏览器的about:config参数大全及其具体用途介绍

    FireFox浏览器的about config参数大全及其具体用途介绍 注意 这还远不是所有的about config参数 由于设置参数太多 官方也只提供英文版本的说明 这里提供的FireFox about config配置参数并不完整 希
  • MSP430F5529学习笔记(4)——按键点灯

    MSP430F5529学习笔记 3 实现LED闪烁和呼吸灯 独立按键工作原理 目录 按键扫描 原理图分析 写程序 按下s1点亮LED1 1 首先我们需要告诉单片机 P2 1是输入还是输出 2 配置IO是否允许上下拉 3 配置IO是上拉还是下
  • 入坑前端:一文搞懂 Flex 布局

    前言 Flex 这个布局前前后后看了3次 第一次学的时候 发现有十几个属性值没耐心看完就没往下学了 作罢 第二次去看的时候大概搞明了Flex每个属性的用法 可没过几天又全部忘光了 第三次了解 Flex 于是就有了这篇笔记 估计是全网最易懂的
  • MyBatis 特殊字符转义拦截器 针对(_、\、%)

    一 问题反馈 今天公司测试向我反馈 系统用户模糊查询功能在用户名称包含特殊字符时 无法正常查询结果 二 问题验证 1 当like中包含 时 查询仍为全部 即 like 查询出来的结果与like 一致 并不能查询出实际字段中包含有 特殊字符的
  • 构建Camel和Raspberry Pi物联网

    该项目基于Camel技术 项目为IoT社区提供了一些很棒的新东西 这些东西是将电子设备 i2c SPI gpio tinkerforge 和云 pubnub cloudlet mqtt 连接在一起的新的物联网组件 在本实验中 我们将展示如何
  • 卡特兰数——括号匹配问题

    卡特兰数的递推公式是F n k 1 n F k 1 F n k k 0 n 1 F k F n k 1 一般性公式为F n C 2n n n 1 可以描述的问题有 1 n个元素的二叉查找树有多少种 2 n n棋盘从左下角走到右上角而不穿过主