当前位置: 首页 > news >正文

卡特兰数、斯特林数基础

卡特兰数

从格点(0,0)(0,0)(0,0)走到格点(n,n)(n,n)(n,n),只能向右或向上走,不能穿过对角线,的路径的条数,称为卡特兰数HnH_nHn
在这里插入图片描述
则有H0=1H_0=1H0=1

通项公式:

  1. Hn=(2nn)−(2nn−1)H_n=\begin{pmatrix} 2n\\ n \end{pmatrix}-\begin{pmatrix} 2n\\ n-1 \end{pmatrix}Hn=(2nn)(2nn1)
  2. Hn=(2nn)n+1H_n=\frac {\begin{pmatrix} 2n\\ n \end{pmatrix}}{n+1}Hn=n+1(2nn)
  3. Hn=4n−2n+1Hn−1H_n=\frac{4n-2}{n+1}H_{n-1}Hn=n+14n2Hn1

折线法

证明一下卡特兰数的公式。

先证明公式1:
如果没有限制,那么路径总数是,从2n2n2n步移动之中,选出nnn步向上走,另外nnn步向右走的方案数(2nn)\begin{pmatrix} 2n\\ n \end{pmatrix}(2nn)

如果有限制,我们画出y=x+1y=x+1y=x+1的函数图像,碰到这条线,意味着不合法。
把所有不合法的路径沿着这条图像对折过来,其终点必然是(n−1,n+1)(n-1,n+1)(n1,n+1)
换句话说,所有到达(n−1,n+1)(n-1,n+1)(n1,n+1)的路径,都对应着到达(n,n)(n,n)(n,n)的一条不合法路径。因此答案就是(2nn)−(n+1+n−1n−1)\begin{pmatrix} 2n\\ n \end{pmatrix}-\begin{pmatrix} n+1+n-1\\ n-1 \end{pmatrix}(2nn)(n+1+n1n1)
在这里插入图片描述

QED.

证明一下公式2:
(2nn)−(2nn−1)\begin{pmatrix} 2n\\ n \end{pmatrix}-\begin{pmatrix} 2n\\ n-1 \end{pmatrix}(2nn)(2nn1)
=(2n)!n!n!−(2n)!(n+1)!(n−1)!=\frac{(2n)!}{n!n!}-\frac {(2n)!}{(n+1)!(n-1)!}=n!n!(2n)!(n+1)!(n1)!(2n)!
=(2n)!n!(n−1)!n−(2n)!n!(n−1)!(n+1)=\frac{(2n)!}{n!(n-1)!n}-\frac {(2n)!}{n!(n-1)!(n+1)}=n!(n1)!n(2n)!n!(n1)!(n+1)(2n)!
=(2n)!n!(n−1)!⋅(1n−1n+1)=\frac{(2n)!}{n!(n-1)!}\cdot\left(\frac{1}{n}-\frac 1{n+1}\right)=n!(n1)!(2n)!(n1n+11)
=(2n)!n!(n−1)!n−(2n)!n!(n−1)!(n+1)=\frac{(2n)!}{n!(n-1)!n}-\frac {(2n)!}{n!(n-1)!(n+1)}=n!(n1)!n(2n)!n!(n1)!(n+1)(2n)!
=(2n)!n!(n−1)!⋅(1n−1n+1)=\frac{(2n)!}{n!(n-1)!}\cdot\left(\frac{1}{n}-\frac 1{n+1}\right)=n!(n1)!(2n)!(n1n+11)
=(2n)!n!(n−1)!⋅1n(n+1)=\frac{(2n)!}{n!(n-1)!}\cdot\frac {1}{n(n+1)}=n!(n1)!(2n)!n(n+1)1
=(2n)!n!n!⋅1n+1=\frac{(2n)!}{n!n!}\cdot\frac {1}{n+1}=n!n!(2n)!n+11
=(2nn)⋅1n+1=\begin{pmatrix} 2n\\ n \end{pmatrix}\cdot\frac {1}{n+1}=(2nn)n+11

QED.

证明一下公式3:
留作习题,读者自证不难。

常见情况

特点:一种操作不能超过另一种操作,或操作之间不能有交集。

例如:

  1. 一个由nnn000nnn111组成的长度为2n2n2n的字符串,满足所有前缀中,111的个数不能超过000的个数,这样的子串数量。
  2. 包含nnn组括号的合法表达式的数量。
    (想要括号序列合法,必须保证所有前缀中,左括号的数量大于等于右括号的数量)
  3. 一个栈的进栈序列为1,2,...,n1,2,...,n1,2,...,n,则出栈序列的可能数量。
    (必须保证出栈数量小于等于进栈数量)
  4. 在圆上选择2n2n2n个点,连接起来形成nnn条不相交的弦的方案数。
    (把nnn条不相交的弦映射为括号序列,把弦的左端映射为左括号,右端映射为右括号)
  5. 通过连接顶点将n+2n+2n+2条边的正多边形分为nnn个三角形的方案数(三角剖分)。
    (想要保证分为nnn个三角形,必须保证连接的线不相交)
  6. nnn个节点可以构造多少颗不同的二叉树?
    考虑对n+2n+2n+2条边的多边形三角剖分,把剖分得出的三角形抽象为一个节点,对它相邻的三角形连边,最后得出必定是一颗二叉树。
  7. 一段连乘积有多少种运算次序?
    (相当于给连乘积加括号)

公式法

事实上有:
Hn=∑i=0n−1HiHn−i−1H_n=\overset{n-1}{\underset{i=0}\sum}H_iH_{n-i-1}Hn=i=0n1HiHni1

可以从两个方面来证明一下:

  • 出栈序列
    考虑iii是最后一个出栈的数,则[1,i−1][1,i-1][1,i1]iii进栈之前就出栈了,情况数有Hi−1H_{i-1}Hi1种,而iii后面的n−in-ini个数,则必然在iii出栈前就出栈了,情况数有Hn−iH_{n-i}Hni种,枚举这个iii,得到
    Hn=∑i=1nHi−1Hn−i=∑i=0n−1HiHn−i−1H_n=\overset{n}{\underset{i=1}\sum}H_{i-1}H_{n-i}=\overset{n-1}{\underset{i=0}\sum}H_iH_{n-i-1}Hn=i=1nHi1Hni=i=0n1HiHni1
  • 格点计数
    我们知道,在格点卡特兰数的要求中,路径不能越过对角线。我们可知,在走到终点之前的一步,一定是向上走的:

    红色表示最后一步。

显然,碰到对角线之后,一定是向右走的,我们枚举对角线上的一个点,使得走完向右走的那一步之后,不能越过新的对角线,统计的路径条数:
在这里插入图片描述
绿色,枚举的位置。
红色,最后一步。
蓝色,新的对角线。

此时我们发现,从底下走到绿色圆圈,不能越过对角线。与从绿色箭头走到红色圆圈,不能越过蓝线,是两个更小的卡特兰数问题,因此可以用乘法原理计数。

我们注意到,我们枚举的一种新的情况,在我们枚举的更旧的情况中都属于不合法情况,不会被重复统计。

QED.

用公式同样可以解释各种卡特兰数的情况。

  1. 一个由nnn000nnn111组成的长度为2n2n2n的字符串,满足所有前缀中,111的个数不能超过000的个数,这样的子串数量。
    注意到最后一个字符一定是111,枚举一个位置的000,使得这个000与末尾的那个111匹配,转化为格点计数的情况。
  2. 包含nnn组括号的合法表达式的数量。
    同理。
  3. 一个栈的进栈序列为1,2,...,n1,2,...,n1,2,...,n,则出栈序列的可能数量。
    同理。
  4. 在圆上选择2n2n2n个点,连接起来形成nnn条不相交的弦的方案数。
    同理,枚举一个点与最后那个点(任意指定一个固定的点为最后的点)连接成弦。
  5. 通过连接顶点将n+2n+2n+2条边的正多边形分为nnn个三角形的方案数(三角剖分)。
    同理4。
  6. nnn个节点可以构造多少颗不同的二叉树?
    枚举根节点有iii个左子树,则就会有n−i−1n-i-1ni1个右子树,显然。

斯特林数

第一类斯特林数

定义[nm]\begin{bmatrix}n\\ m\end{bmatrix}[nm]表示nnn元集合划分为mmm个非空环排列的方案数,即无符号第一类斯特林数,或简称为第一类斯特林数,斯特林轮换数。

第一类斯特林数有递推式:
[nm]=[n−1m−1]+(n−1)[n−1m]\begin{bmatrix} n\\ m \end{bmatrix}=\begin{bmatrix} n-1\\ m-1 \end{bmatrix}+(n-1)\begin{bmatrix} n-1\\ m \end{bmatrix}[nm]=[n1m1]+(n1)[n1m]

递推式容易证明,留作习题。

第二类斯特林数

定义{nm}\begin{Bmatrix} n\\ m \end{Bmatrix}{nm}表示将nnn元集合划分为mmm个非空子集的方案数,即第二类斯特林数,或斯特林子集数。

第二类斯特林数有递推式:
{nm}={n−1m−1}+m{n−1m}\begin{Bmatrix} n\\ m \end{Bmatrix}=\begin{Bmatrix} n-1\\ m-1 \end{Bmatrix}+m\begin{Bmatrix} n-1\\ m \end{Bmatrix}{nm}={n1m1}+m{n1m}

递推式容易证明,留作习题。

其他

  • 两类斯特林数的边界条件都是s[0][0]=1s[0][0]=1s[0][0]=1
  • 从递推式可以看出,斯特林数增长比组合数还要快。
  • 斯特林数用于解决组合计数问题,以及用于斯特林反演。这些问题较复杂,单独讨论。

后记

于是皆大欢喜。

相关文章:

卡特兰数、斯特林数基础

卡特兰数 从格点(0,0)(0,0)(0,0)走到格点(n,n)(n,n)(n,n),只能向右或向上走,不能穿过对角线,的路径的条数,称为卡特兰数HnH_nHn​。 则有H01H_01H0​1。 通项公式: Hn(2nn)−(2nn−1)H_n\begin{pmatrix} 2n\\ n \en…...

STL——mapmultimap和setmultiset

一、关联式容器 与序列式容器相同&#xff0c;关联式容器也是用于存储数据的&#xff0c;不同的是&#xff0c;关联式容器里存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式容器效率更高。 二、键值对 用来表示具有一一对应的一种结构&#xff0c;该…...

2023热门抖音权重查询小程序源码

2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样&#xff0c;小程序适配优化。接口免费。小程序不是网页 修改教程: 1&#xff0c;如果想修改或者去除水印&#xff0c;直接删除或修改“index.html”12&#xff5e;22行 2&#xff0c;如果想修改logo&#xff0c;直接…...

153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]

我认为&#xff0c;无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感&#xff01;&#xff01;&#xff01; 文章目录一、后门简介1、hta后门2、exe后门3、宏病毒后门二、生成后门并测试0、测试环境1、生成hta后门并测试2、生成exe后门并测试3、生成宏病毒后门…...

如何成为优秀的程序员

崔宝秋&#xff0c;现任小米首席架构师、小米云平台负责人。1995年赴美留学&#xff0c;纽约州立大学石溪分校计算机科学系博士毕业&#xff0c;曾任IBM高级工程师和高级研发经理、雅虎搜索技术核心团队主任工程师、LinkedIn主任工程师&#xff0c;2012年回国加入小米科技。 20…...

多线程(四):线程安全

在开始讲解线程安全之前我们先来回顾一下我们学了那些东西了&#xff1a; 1. 线程和进程的认识 2. Thread 类的基本用法 3. 简单认识线程状态 4. 初见线程安全 上一章结束时看了一眼线程安全问题&#xff0c;本章将针对这个重点讲解。 一个代码在单线程中能够安全执行&am…...

[ROC-RK3568-PC] [Firefly-Android] 10min带你了解Camera的使用

&#x1f347; 博主主页&#xff1a; 【Systemcall小酒屋】&#x1f347; 博主追寻&#xff1a;热衷于用简单的案例讲述复杂的技术&#xff0c;“假传万卷书&#xff0c;真传一案例”&#xff0c;这是林群院士说过的一句话&#xff0c;另外“成就是最好的老师”&#xff0c;技术…...

C++之模拟实现string

文章目录前言一、包含的相关头文件二、构造和析构1.构造函数2.拷贝构造1.传统写法2.现代写法3.赋值运算符重载1.传统写法2.现代写法4.析构函数三、iterator四、modify1.push_back(尾插一个字符&#xff09;2.append&#xff08;尾插一个字符串&#xff09;3.运算符重载1.尾插字…...

SpringBoot实战(十三)集成 Admin

目录一、简介二、搭建 springboot-admin 管理服务1.Maven 依赖2.application.yml3.添加 EnableAdminServer4.启动服务&#xff0c;查看页面三、搭建 springboot-admin-client 客户端服务1.Maven 依赖2.application.yml3.启动服务&#xff0c;查看页面四、搭配 Eureka 使用1.搭建…...

mke2fs命令:建立ext2文件系统

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 使用格式 mke2fs [options] [设备名称] [区块数] options与含义 -c&#xff1a;检查是否有损坏的区块。-F&#xff1a;不管指定的设备为何&#xff0c;强制执行mke2fs。-M&#xff1a;记录最后一次挂入的…...

免费分享一个springboot+vue的办公系统

springbootvue的OA系统项目介绍项目部署项目特点项目展示项目介绍 这是一个采用前后端分离开发的项目&#xff0c;前端采用 Vue 开发、后端采用 SpringBoot Mybatis 开发。 很适合java初学者练手和学习。 前端技术&#xff1a;Vue3.2 Vue-Router Pinia Ant Design Vue 3.X…...

STM32数据搬运工DMA

DMA的概念DMA&#xff0c;全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场的过程&#xff0c;通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路&#xff…...

4、操作系统——进程间通信(2)(system V-IPC介绍)

目录 一、system V-IPC常识 1、key和ID 2、文件描述符 3、函数&#xff08;ftok&#xff09; ftok产生IPC对象的健值key&#xff08;类似文件路径&#xff09; 4、例子 5、使用命令查看或删除当前系统中的IPC对象 一、system V-IPC常识 1、key和ID &#xff08;1&#x…...

基于CentOS Stream 9平台搭建Nacos2.0.4集群以及OpenResty反向代理

目录展示Nacos2.0.4集群搭建1. 下载2. 解压3.修改配置3.1分别修改下启动类中JDK路径以及启动大小3.2 分别配置数据源3.3 创建nacos数据库3.4 修改cluster.conf配置3.4.1 复制并修改3.4.2 编辑文件&#xff0c;修改三台主机地址3.4.3 分别放入另外两个nacos的conf目录下:4. 启动…...

老杜MySQL入门基础 第二天

导入演示数据 1、连接MySQL 2、创建"bjpowernode"数据库 create database bjpowernode;3、选择数据库 use bjpowernode4、导入数据 source D&#xff1a;\bjpowernode.sql(文件的路径)1 去除重复记录(把查询结果去除重复记录)(原表数据不会改变) 使用关键字dist…...

Python深度学习实战:人脸关键点(15点)检测pytorch实现

引言 人脸关键点检测即对人类面部若干个点位置进行检测&#xff0c;可以通过这些点的变化来实现许多功能&#xff0c;该技术可以应用到很多领域&#xff0c;例如捕捉人脸的关键点&#xff0c;然后驱动动画人物做相同的面部表情&#xff1b;识别人脸的面部表情&#xff0c;让机…...

linux简单入门

目录Linux简介Linux目录结构Linux文件命令文件处理命令文件查看命令常用文件查看命令Linux的用户和组介绍Linux权限管理Linux简介 Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff0…...

给准备面试网络工程师岗位的应届生一些建议

你听完这个故事&#xff0c;应该会有所收获。最近有一个23届毕业的大学生和我聊天&#xff0c;他现在网络工程专业大四&#xff0c;因为今年6、7月份的时候毕业&#xff0c;所以现在面临找工作的问题。不管是现在找一份实习工作&#xff0c;还是毕业后找一份正式工作&#xff0…...

主线程与子线程之间相互通信(HandlerThread)

平时&#xff0c;我们一般都是在子线程中向主线程发送消息&#xff08;要在主线程更新UI&#xff09;&#xff0c;从而完成请求的处理。那么如果需要主线程来向子线程发送消息&#xff0c;希望子线程来完成什么任务。该怎么做&#xff1f;这就是这篇文章将要讨论的内容。 一、…...

13基于双层优化的电动汽车日前-实时两阶段市场竞标

MATLAB代码&#xff1a;基于双层优化的电动汽车日前-实时两阶段市场竞标 关键词&#xff1a;日前-实时市场竞标 电动汽车 双层优化 编程语言&#xff1a;MATLAB平台 参考文献&#xff1a;考虑电动汽车可调度潜力的充电站两阶段市场投标策略_詹祥澎 内容简介&#xff1a;…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...