卡特兰数


title: 卡特兰数 date: 2021-02-28 16:27:10 tags: 算法

alt
alt

概念


alt
alt

卡特兰数 的通项公式为

又根据 组合数的计算公式:

alt

可得:


同时满足递推关系式:




应用


1.括号化问题(或者01的个数问题)


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

alt
alt
alt
alt

2.出栈次序问题


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

与 问题1解法相同, 进栈相当于左括号,出栈相当于右括号

alt

另两个类似例子:


(1)有2n个人排成一行进入剧场(或者商店买东西)。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)

还是与1类似,5块钱相当于左括号,10块钱相当于右括号


(2)在圆上选择2n个点,将这些点成对连接起来,使得所得到的n条线段不相交的方法数。


alt
alt

alt
alt

3.凸多边形问题


(1)一个凸的n边形,用直线连接他的两个顶点使之分成多个三角形,每条直线不能相交,问一共有多少种划分方案。

(2)类似:一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那   么有多少条可能的道路?

(3)类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数? 例如n+2个点的凸多边形,这里n=4,通过卡特兰数的推导可以得出h(4)=14。


4.给定节点组成二叉树的问题


给定N个节点,能构成多少种形状不同的二叉树?

alt
alt
alt

先取一个点作为顶点,然后左边依次可以取0至N-1个,相对应的,右边是N-1到0个,两两配对相乘,就是h(0)*h(n-1) + h(2)*h(n-2) +…+ h(n-1)h(0)=h(n)(能构成h(N)个)

leetcode-96 不同的二叉搜索树


5.n*n棋盘从左下角走到右上角而不穿过主对角线的走法


a.在 nn的格子中,只在下三角行走,每次横或竖走一格,有多少中走法?其实向右走相当于进栈, 向左走相当于出栈,本质就是n个数出栈次序的问题,所以答案就是卡特兰数。(利用这个模型,可以解决这个卡特兰问题的变形问题,并顺便给进出栈问题的解法一个几何解释)


b.有n+1个叶子的满二叉树的个数?事实上,向左记为+1,向右记为−1,按照向左优先的原则,从根节点开始遍历.例如第一个图记为+1,+1,+1,−1,−1,−1,于是由卡特兰数的含义可得满二叉树的个数为Cn。




参考:

卡特兰(Catalan)数概念的简要介绍

史上最详细的卡特兰数浅谈

卡特兰数的证明

LeetCode 96之卡特兰数

卡特兰数/概率/蓄水池抽样

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题 1372二叉树中的最长交错路径

题目 给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方…

内存四区(个人学习笔记黑马学习)

1、内存分区模型 C程序在执行时,将内存大方向划分为4个区域: 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:编译器自动分配释放,存放函数的参数值,局部变量等 堆区:由程序员分配和释放,若程…

了解JVM(JavaEE初阶系列19)

目录 前言: 1.JVM是如何运行的 2.JVM中的内存区域划分 3.JVM的类加载机制 3.1JVM加载机制的五大步骤 3.1.1加载 3.1.1验证 3.1.1准备 3.1.1解析 3.1.1初始化 3.2总结 3.3JVM启动时机 3.4双亲委派模型 4.JVM中的垃圾回收策略 4.1JVM垃圾回收机制概念 …

如何在Windows / Mac / iPhone / Android / Online上将MP4转换为MP3

如果只想保留MP4视频的音频轨道,则可以将MP4转换为MP3格式。 MP3是几乎所有设备,播放器和编辑器都支持的数字音频格式。无论您将MP4视频转换为MP3音频以进行脱机播放或进一步编辑,都可以提取音轨并保存为MP3格式。这是在不损失质量的情况下将…

封装(个人学习笔记黑马学习)

1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类&#xff0c;求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…

VC++使用Microsoft Speech SDK进行文字TTS朗读

Microsoft Speech SDK下载地址 https://www.microsoft.com/en-us/download/details.aspx?id10121 需要msttss22L.exe、SpeechSDK51.exe、SpeechSDK51LangPack.exe三个&#xff0c;下载后全部安装 使用VS2005建立一个win32控制台项目 朗读"hello word"、中文“你好”…

Mac安装brew、mysql、redis

mac安装brew mac安装brewmac安装mysql并配置开机启动mac安装redis并配置开机启动 mac安装brew 第一步&#xff1a;执行. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"第二步&#xff1a;输入开机密码 第三…

python 深度学习 解决遇到的报错问题4

目录 一、DLL load failed while importing _imaging: 找不到指定的模块 二、Cartopy安装失败 三、simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 四、raise IndexError("single positional indexer is out-of-bounds") 五、T…

Java Stream与多线程

Java Stream 1. 问题引入 学习了尚硅谷的JUC&#xff0c;周阳老师讲的商城比较价格的案例&#xff0c;自己模拟了一个多线程的demo, 多线程处理任务并且汇总结果&#xff0c;出现了疑问&#xff0c;实例代码放在下面&#xff0c;读者有兴趣的话可ctrlcv玩一玩 如下是自定义的任…

了解 HarmonyOS

引言 在开始 HarmonyOS 开发之前&#xff0c;了解其背景、特点和架构是非常重要的。本章将为你提供一个全面的 HarmonyOS 概览。 目录 什么是 HarmonyOS HarmonyOS 的发展历程 HarmonyOS 的特点 HarmonyOS 的架构 HarmonyOS 与其他操作系统的比较 1. 什么是 HarmonyOS …

高并发幂等计数器的设计与实现

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

PSP - 蛋白质结构预测 OpenFold Multimer 训练模型的数据加载

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132597659 OpenFold Multimer 是基于深度学习的方法&#xff0c;预测蛋白质的多聚体结构和相互作用。利用大规模的蛋白质序列和结构数据&#xff…