卡特兰数及常见模型

news2024/11/28 15:15:29

卡特兰数

英文名Catalan number, 是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为:
1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190 6564120420 24466267020 91482563640
343059613650 1289904147324 4861946401452…

通项公式

卡特兰数的通项公式不止一种 k ( 0 ) = 1 ,    k ( 1 ) = 1 k(0)= 1, \;k(1)= 1 k(0)=1,k(1)=1 ,如果接下来的项满足以下三种公式中的一种就是卡特兰数

  1. k ( n ) = k ( 0 ) × k ( n − 1 ) + k ( 1 ) × k ( n − 2 ) + ⋅ ⋅ ⋅ + k ( n − 2 ) × k ( 1 ) + k ( n − 1 ) × k ( 0 ) k(n) = k(0) \times k(n- 1) + k(1) \times k(n- 2)+ \cdot\cdot\cdot +k(n- 2) \times k(1) + k(n- 1) \times k(0) k(n)=k(0)×k(n1)+k(1)×k(n2)++k(n2)×k(1)+k(n1)×k(0)
  2. k ( n ) = C 2 n n − C 2 n n − 1 k(n)= C_{2n}^n - C_{2n}^{n-1} k(n)=C2nnC2nn1
  3. k ( n ) = C 2 n n n + 1 k(n)= \frac{C_{2n}^n}{n+1} k(n)=n+1C2nn 这个公式就是复习408时背的n个元素进栈,有多少种出栈排列结果

常用的是范式1和2,3几乎不会使用到

括号匹配问题

这个问题模型非常重要,它包含了如何套用卡特兰数并且包含了一种重要的数学性质,有很多问题如果能转换成括号匹配模型就迎刃而解了。

问题描述 给你n个左括号( 和n个右括号) ,有多少种合法的摆放序列?

首先要回答最关键的问题:什么叫做不合法?一个长度为2n的字符串中,只要有任意一个前缀是:右括号的数量比左括号的数量多1,就说这个排列是不合法的 eg: (    )    )    (    (    )    ) (\;)\;)\;(\;(\;)\;) ())(()) 就是不合法的,因为其前缀()) 违规。

所以,要求有多少种合法的排序,我们只需要用总的排列种数减去不合法的种数 现在问题就转化成了:有多少种不合法的排列 总的排列数很好算,是: C 2 n n C_{2n}^n C2nn 2n个位置中任意选n个位置放左括号。

现在要引入一个非常重要的数学概念等势。假如有集合A,B,存在一个一一映射 f f f ,使得A中的每个元素都能映射到B中的唯一一个元素。由此可以得到: A 的元素数量 ≤ B 的元素数量 A的元素数量 \le B的元素数量 A的元素数量B的元素数量;如果同样存在这样一个由B到A的映射 g g g ,那么就有: B 的元素数量 ≤ A 的元素数量 B的元素数量 \le A的元素数量 B的元素数量A的元素数量 结合来看就有: A 的元素数量 = B 的元素数量 A的元素数量 = B的元素数量 A的元素数量=B的元素数量

假设2n个括号中所有不合法的排列为集合A,我们现在就是要找和A等势的集合B。我们可以这样定义 f f f

任意一个不合法的排列,必定存在一个最短前缀使得右括号比左括号多1,找到这个最短前缀,假设其长度为 2 m + 1 2m+1 2m+1 ,必然是奇数长度,对于剩下所有的 2 n − ( 2 m + 1 ) 2n-(2m+1) 2n(2m+1) 个括号,让左括号变右括号,右括号变左括号。如下表:

最短前缀剩下部分(变化前)剩下部分(变化后)
长度2m+12n-2m-12n-2m-1
左括号数量mn-mn-m-1
右括号数量m+1n-m-1n-m

所以变化后的整个字符串最短前缀那部分是不变的,变动的是后部分,并且总体上左括号有: n − 1 n-1 n1

右括号有: n + 1 n+1 n+1 。这样 f f f 定义好后, g g g 也可以水到渠成地得到,将这个字符串找出最短的违规前缀,让

剩余部分右变左,左变右就能得到原始串,并且是一一对应,所以我们找到了A的等势集合B,集合B是什么呢? 集合B就是总共2n个括号,n-1个左括号,n+1个右括号的所有排列,我们找到了这个集合B,并且还证明了和我们想求的集合A是等势的,但是集合B的大小非常好得到就是: C 2 n n − 1 C_{2n}^{n-1} C2nn1 ,所以最终的答案就是:

C 2 n n − C 2 n n − 1 C_{2n}^n - C_{2n}^{n-1} C2nnC2nn1 这就是通项公式2

其他一些可以转化成括号匹配模型的问题

n个元素入栈,有多少种出栈次序 可以把进栈想成 ↓ 出栈想成 ↑,n个元素进栈,最后也是出栈n次,所以总长度为2n,是不是任意时刻出栈次数都不能超过进栈次数,也就是说最终的整个长度为2n的序列,任意前缀都不能有↑超过↓,是不是和括号匹配一模一样的?

一个公司的股票走势要么是上涨↗️,要么是下降↘️,不管是什么走势,和水平线的夹角都是45度,每个时刻都有一个走势,那么n时刻时,该走势图进入第四象限的可能? 也是在问括号的结合方式

一共有n个结点,问可以组成多少种不同的二叉树 k ( 0 ) = 0 ,    k ( 1 ) = 1 ,    k ( 2 ) = 2 k(0)=0, \; k(1)=1, \; k(2)=2 k(0)=0,k(1)=1,k(2)=2 n>2时,要这样考虑:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKQuJprX-1677735047632)(/Users/ymy/Library/Application Support/typora-user-images/image-20221020221801662.png)]

根结点必然是包含1个结点的,就是左边0个,右边n-1个。。。。每一种的组合方式累加起来,就得到结果了,虽然 k ( 0 ) × k ( n − 1 ) = k ( n − 1 ) × k ( 0 ) k(0) \times k(n-1) = k(n-1) \times k(0) k(0)×k(n1)=k(n1)×k(0) 但是在二叉树中,形状不同就是不同。所以就有:

k ( n ) = k ( 0 ) × k ( n − 1 ) + k ( 1 ) × k ( n − 2 ) + ⋅ ⋅ ⋅ + k ( n − 2 ) × k ( 1 ) + k ( n − 1 ) × k ( 0 ) k(n) = k(0) \times k(n- 1) + k(1) \times k(n- 2)+ \cdot\cdot\cdot +k(n- 2) \times k(1) + k(n- 1) \times k(0) k(n)=k(0)×k(n1)+k(1)×k(n2)++k(n2)×k(1)+k(n1)×k(0)

这不就是卡特兰数通项公式1嘛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果电脑怎么截屏?图文教学,包教包会

苹果电脑是很多设计师和程序员们所钟爱的电脑品牌,但是在使用过程中,有些小功能操作并不是那么容易掌握。比如,苹果电脑怎么截屏呢?如果您是新手,可能会感到有些困惑。别担心,下面我们将为您详细介绍如何在…

springboot整合minio及工具类

说明:本文章是springboot和minio的整合,同时还有上传和下载工具类,minio的具体介绍这里就不多说了【上传和下载都是基础工具类, minio的安装如果有时间就更新】 工程图:【主要功能在于工具类,在代码块11和…

好意外,发现永久免费使用的云服务器

原因就不说了,说一下过程,在百度搜pythonIDE的时候,发现了一个网站 https://lightly.teamcode.com/https://lightly.teamcode.com/ 就是这个网站,看见这个免费试用,一开始觉得没什么,在尝试使用的过程中发…

IIC总线式驱动开发(mpu6050)(二)

目录 六、I2C总线二级外设驱动开发方法 七、I2C总线二级外设驱动开发之名称匹配 1. i2c_register_board_info 2. i2c_new_device:明确二级外设地址的情况下可用 3. i2c_new_probed_device 八、I2C总线二级外设驱动开发之设备树匹配 六、I2C总线二级外设驱动开…

AVL树(Insert)

文章目录AVL树代码模拟实现Insert重点控制平衡:旋转->平衡右单旋左单旋左右双旋双旋平衡因子更新错误右左双旋左右双旋erase了解AVL树的性能AVL树 代码 高度平衡二叉搜索树 引入 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单…

C/C++网络编程笔记Socket

https://www.bilibili.com/video/BV11Z4y157RY/?vd_sourced0030c72c95e04a14c5614c1c0e6159b上面链接是B站的博主教程,源代码来自上面视频,侵删,这里只是做笔记,以供复习和分享。上一篇博客我记录了配置环境并且跑通了&#xff0…

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传与下载

从头开始搭建一个SpringBoot项目--SpringBoot文件的上传前言流程分析代码结构代码详情UploadFileInfo.classUploadController.classUploadDao.classUploadDao.xmlUploadServices.classUploadServicesImpl.class测试下载示例前言 文件的上传和下载是很多系统必备的功能&#xf…

pytorch-复现经典深度学习模型-LeNet5

Neural Networks 使用torch.nn包来构建神经网络。nn包依赖autograd包来定义模型并求导。 一个nn.Module包含各个层和一个forward(input)方法,该方法返回output。 一个简单的前馈神经网络,它接受一个输入,然后一层接着一层地传递,…

代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III

day47198.打家劫舍1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一:考虑不包含首尾元素情况二:考虑包含首元素,不包含尾元素情况三&#x…

网络技术|网络地址转换与IPv6|路由设计基础|4

对应讲义——p6 p7NAT例题例1解1例2解2例3解3例4解4一、IPv6地址用二进制格式表示128位的一个IPv6地址,按每16位为一个位段,划分为8个位段。若某个IPv6地址中出现多个连续的二进制0,可以通过压缩某个位段中的前导0来简化IPv6地址的表示。例如…

1月奶粉电商销售数据榜单:销售额约20亿,高端化趋势明显

鲸参谋电商数据监测的2023年1月份京东平台“奶粉”品类销售数据榜单出炉! 根据鲸参谋数据显示,1月份京东平台上奶粉的销量约675万件,销售额约20亿元,环比均下降19%左右。与去年相比,整体也下滑了近34%。可以看出&#…

真无线耳机哪个牌子好用?2023便宜好用的无线耳机推荐

蓝牙耳机经过近几年的快速发展,变得越来越普及,并且在一些性能上也做得越来越好。那么,真无线耳机哪个牌子好用?下面,我来给大家推荐几款便宜好用的无线耳机,可以参考一下。 一、南卡小音舱蓝牙耳机 参考…

Nuxt 3.0 全栈开发:五种渲染模式的差异和使用场景全解析

Nuxt 3.0 全栈开发 - 杨村长 - 掘金小册核心知识 工程架构 全栈进阶 项目实战,快速精通 Nuxt3 开发!。「Nuxt 3.0 全栈开发」由杨村长撰写,299人购买https://s.juejin.cn/ds/S6p7MVo/ 前面我们提到过 Nuxt 能够满足我们更多开发场景的需求…

IGKBoard(imx6ull)-I2C接口编程之SHT20温湿度采样

文章目录1- 使能开发板I2C通信接口2- SHT20硬件连接3- 编码实现SHT20温湿度采样思路(1)查看sht20从设备地址(i2cdetect)(2)获取数据大体流程【1】软复位【2】触发测量与通讯时序(3)返…

日志收集笔记(Kibana,Watcher)

1 Kibana Kibana 是一个开源的分析与可视化平台,可以用 Kibana 搜索、查看存放在 Elasticsearch 中的数据,就跟谷歌的 elasticsearch head 插件类似,但 Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等,直观的…

【python】控制台中文输出乱码解决方案

注:最后有面试挑战,看看自己掌握了吗 文章目录控制台原因解决方法方法一方法二方法三如果是os.system函数乱码控制台原因 一般的情况下,还是我们的源码文件的编码格式问题。我们一般是要把源码文件的编码格式改成utf-8就好了,但是…

zeppelin安装及hive配置

一、zeppelin安装包 链接:https://pan.baidu.com/s/1DVmvY2TM7WmCskejTn8dzA 提取码:fl7r 二、安装zeppelin 将安装包传入Centos的/opt/install目录下 # 解压 tar -zxf /opt/install/zeppelin-0.10.0-bin-all.tgz -C /opt/soft/ # 重命名 mv /opt/sof…

Nodejs环境配置 | Linux安装nvm | windows安装nvm

文章目录一. 前言二. Linux Nodejs环境配置1. 安装nvm2. 配置npm三. Windows Nodejs环境配置1. 安装nvm2. 配置npm四. nvm基本使用一. 前言 由于在实际开发中一些不同的项目需要不同的npm版本来启动,所以本篇文章会基于nvm这个node版本管理工具来进行Linux和Winodw…

[AI助力] 2022.3.2 考研英语学习 2011 英语二翻译

[AI助力] 2022.3.2 考研英语学习 2011 英语二翻译 文章目录[AI助力] 2022.3.2 考研英语学习 2011 英语二翻译2011年英语二翻译真题自己写的看看AI的翻译谷歌翻译New Bing😂让AI自我评价chatgpt🤣让AI自我评价DeepL有道腾讯翻译百度翻译IDEA翻译积累&…

智能家居项目(八)之树莓派+摄像头进行人脸识别

目录 1、编辑Camera.c 2、编辑contrlDevices.h 3、编辑mainPro.c 4、进行编译: 5、运行结果: ./test1 6、项目图片演示 智能家居项目(七)之Libcurl库与HTTPS协议实现人脸识别_Love小羽的博客-CSDN博客 经过上一篇文章&…