卡特兰数

【C++题目】卡特兰数 卡塔兰数的定义: ⑴ 第 0 项为 1; ⑵ 第 1 项为 1; ⑶ 第 n 项的计算公式: Cn = C0×Cn-1 + C1×Cn-2 + C2×Cn-3 + … + Cn-1×C0 卡特兰数是从第0项开始,其前10项为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862 问题:编写函数CTL,计算并输出卡特兰数的前 n 项(n>=3),每个数后面跟一个空格 提示:随着项数 n 的增加,卡特兰数会急剧增加,请适当地考虑长整型。 代码:(编写函数CTL,完善以下代码) 阅读详情
卡特兰数

首先,我们对卡特兰数的定义如下:

当然, Cn也有通项公式的定义:


卡特兰数的前几项:

 

卡特兰数,在组合数学里有非常广泛的应用:

1. 凸n边形的三角剖分个数

       凸n边形三角剖分后,每一条边都会属于一个三角形。假设,我们将该凸n边形的n个顶点按照顺时针分别标号为1~n。根据之前的分析,边(1,n)一定会属于某个三角形,那么该三角形的第三个顶点一定落在区间[2,3,…,n-1]。假设这个顶点为k,那么就会将原来的凸n边形划分为最多两个凸多边形(可能只有一个):

              ①以顶点{1, 2, ... , k}构成的k多边形

              ②以顶点{k, k+1, ..., n}构成的n-k+1多边形

       于是,原问题被化解为两个子问题(也有可能只有一个):这两个凸多边形的划分个数是多少?根据“乘法原理”,二者相乘就是边(1,n)与顶点k构成三角形时的三角剖分个数。

       最后,因为k可以取值[2,3,…,n-1],所以根据“加法原理”,将当k取不同值时的划分个数全部相加就是最后的答案。

 

2. 一个长度为n的序列有多少种合法的入栈出栈序列。

另一种问法:一个长度为n的序列有多少种单栈排序后的不同序列。

       记:0为入栈、1为出栈,那么一个合法的入栈出栈序列一定满足两个性质:

       1) 性质1:0、1个数相等

       2) 性质2:任意前缀子序列必须满足0的个数大于等于1的个数

       定义:满足以上要求的长度为2n的序列S的个数为f(n),则:

       我们现在从序列左边扫描至右边:如果扫描到下标为2k (k=1,2,…,n)处,第一次出现1的个数等于0的个数,即[1,2k]区间的序列0、1个数相同,那么[1,2k-1]区间的序列必定有num(0)-num(1)=1。

       因为有性质2,所以S[1]=0(S的下标从1开始)。所以,[2,2k-1]区间的序列,满足性质1和性质2,所以我们找到了一个原问题的子问题:


       又因为,k后面的[2k+1, 2n]序列同样满足性质1、2(很容易证明),所以又有一个子问题:


故,根据“乘法原理”:

 

3. 定义:Dyck word是一个有n个X和n个Y组成的字串,且所有的前缀字串皆满足X的个数大于等于Y的个数。问:一个2n长度的Dyck word有多少个?

       比如:长度为6的dyck words:

XXXYYY    XYXXYY    XYXYXY   XXYYXY    XXYXYY

  分析:X的个数大于等于Y,是不是很像之前的0和1?:)

 

4. 求:n组括号所组成的合法运算式的个数:

((()))    ()(())    ()()()    (())()    (()())

  分析:仔细尝试一下发现:合法的小括号表达式好像只需要满足任意前缀的左括号个数大于等于小括号个数就好了。怎么样?是不是很像之前的X和Y,0和1?

 

5. 求:所有在n×n格点中不越过对角线的单调路径的个数。

       一个单调路径是从格点左下角出发,在格点右上角结束,每一步均为向上或向右。计算这种路径的个数等价于计算Dyck word的个数: X代表“向右”,Y代表“向上”。下图为n = 4的情况:


  分析:如果把一条单调路径转化为X和Y的序列,是不是跟之前的第3题很像?:)

 

 6. 求:10个高矮不同的人,站成两排,同一排左低右高,且第二排均高于第一排的排队个数

  分析:将10个人按照身高升序排序,如果一个人站第一排记为0,站第二排记为1,我们会发现,不同的排队方式,其实就对应于不同的01序列。并且,我们会发现,符合要求的01序列一定满足:前缀序列的0的个数大于等于1的个数(当前,第一排的人数不少于第二排的人数)。到这里,是不是要回到了之前熟悉的问题?:)

 

 

参考博客:

1. http://www.cnblogs.com/JMDWQ/archive/2012/07/08/2581255.html

2. http://blog.youkuaiyun.com/ffjjqqjj/article/details/6081711

3. http://blog.youkuaiyun.com/hongchangfirst/article/details/8766529

 

 

OMNeT++入门指南:从tictoc1到tictoc18的实例解析与实战演练 本文是OMNeT++网络仿真框架的入门实战指南,详细解析了从tictoc1到tictoc18的经典示例。内容涵盖OMNeT++的下载安装、核心三文件(.ned, .cc, .ini)的编写、模块化建模、自定义消息、数据统计与可视化,以及参数化批量仿真等核心技能,帮助读者从零开始掌握这一强大的网络仿真工具。 阅读详情

相关推荐

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

关于Catalan(卡特兰)数的理解

卡特兰数的起源 Catalan数源自Euler对凸多边形通过不相交的对角线切分成三角形的不同切分方案数。 n+1个顶点(A1,A2...An+1)的凸多边形,取定多边形的一条边,不妨设为A1An+1,任意取凸多边形的一个顶点Ak+1(k=1,2...n-1),可以将凸多边形分为T1,R,T2三部分,如图 T1部分是由k+1个顶点组成的凸多边形,T2部分是由n+1-k个顶点组成的凸

muye5的专栏 5063

TI C2000 DSP CLA实战:用F28069的协处理器实现ADC采样与PWM相位实时联动控制

本文详细介绍了如何利用TI C2000系列DSP的CLA协处理器在TMS320F28069上实现ADC采样与PWM相位的实时联动控制。通过CLA的零周期上下文切换和硬件级任务触发特性,显著提升了电机控制和数字电源应用的实时性能,特别适用于需要亚微秒级响应的场景。

weixin_30932215的博客 3966

总结--卡特兰数及卡特兰三角

卡特兰数:由n个X和n个Y组成一个序列,满足“所有前缀中Y出现的次数不能超过X出现的次数”的序列的个数 卡特兰三角:由n个X和k个Y组成一个序列,满足“所有前缀中Y出现的次数-X出现的次数小于m”的序列的个数   参考链接:https://en.wikipedia.org/wiki/Catalan_number   https://en.wikipedia.org/wiki/Ca...

十分残念的博客 1293

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6965

汽车车牌识别系统实现(二)--车牌定位+代码实现

汽车车牌识别系统实现(二)-- 车牌定位 前言 本人大四计算机视觉处理方面菜鸟一枚,因个人兴趣和毕设的缘故,故而想学习计算机视觉方面的内容,有不正确的地方还等各位大神批评指正。 图像预处理 照相机获取到汽车车牌图像时,绝大多数情况下,图像里只存在一个车牌的情况是不太现实的,一幅图像里存在建筑物、树、其它汽车等等是很正常的;而且绝大多数都会存在噪声点,这种情况下就会对车牌定位和识别造成极大程度的干扰...

奋斗の博客 1万+

凸N边形三角剖分法凸N边形三角剖分法

一个凸N边形,可以用N-3条互不相交的对角线将凸N边形分成N-2个三角形,这称为凸N边形的一种三角剖分。例如N=5时,共有以下5种三角剖分: 当N=8时,总共有()种三角剖分。 目前已知的递推公式有: 这两个递推公式是一样的,具体推导过程并不是很清楚,一般使用动态规划求解,程序待更新。 ...

青木宫的博客 2213

国产数据库迁移必看:达梦到ES的CDC方案优化全记录(含完整代码)

本文详细记录了从达梦数据库到Elasticsearch的CDC方案优化全过程,涵盖触发器方案局限性、Debezium架构优势及完整代码实现。通过Flink集成和性能调优,实现毫秒级延迟同步,显著降低数据库负载,为国产数据库迁移提供可落地的技术方案。

weixin_29079671的博客 497

数的划分

问题描述将整数n分成k份,且每份不能为空,任意两种分法不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的:1,1,5; 1,5,1; 5,1,1。问有多少种不同的分法。输入:n,k(6输出:一个整数,即不同的分法。输入输出样例输入:7 3输出:4问题分析:这是一道整数剖分的问题。这类问题的数学性很强,方法也很多。首先,正确理解“整数n分成k份,这k个整

fisher_jiang的专栏 1万+

Amber分子动力学模拟:蛋白结构准备全流程与关键注意事项

分子动力学模拟是研究蛋白结构、配体结合与构象变化的重要计算手段,其结果的可靠性高度依赖初始结构的质量。在Amber模拟体系中,结构准备是决定后续计算成败的“一票否决”环节,任何缺失残基、错误质子化状态或未处理的二硫键都可能让长时程模拟失去意义。从PDB原始文件出发,需依次完成结构检查与清洗、残基命名统一、配体参数化、金属离子建模、加氢及质子化状态判断,最后通过tleap构建力场、溶剂盒子与离子环境。这一过程看似琐碎,却直接决定了蛋白在模拟中的物理合理性。无论是解析催化机制、评估药物结合亲和力,还是探索构象变

weixin_31714129的博客 237

ADB 安装教程:如何在 Windows、 Linux 上安装 Android Debug Bridge

本文介绍了在Windows和Linux系统上安装ADB(Android调试桥)的方法。对于Windows系统:1)从官网下载ADB工具并解压;2)通过命令提示符验证安装;3)配置环境变量以实现全局使用;4)再次验证全局ADB功能。Linux系统可通过包管理器直接安装(如Ubuntu使用apt,Fedora使用dnf),安装后同样需验证版本信息确认成功。两种系统安装完成后,都能通过"adb version"命令检查安装状态。

qq_53545309的博客 440

卡特兰数(Catalan)

什么是卡特兰数? 明安图数,又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现于各种计数问题中的数列。以中国蒙古族数学家明安图 (1692-1763)和比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, … 卡特兰数的几何意义 简单来说,卡特兰数就是一个有规律的数列,在坐标图中可以表示为:从原点(0,0)出发,每次向x轴或者y轴正方向移动1个单位,直到

2021dragon的博客 4万+

Python爬虫实战:爬取并分析电子商务平台用户评论数据

爬虫(Web Scraping)是指通过编写程序模拟浏览器行为,从网站中提取数据的过程。爬虫技术可以自动化地抓取网站上的信息,广泛应用于数据收集、价格监控、市场研究等多个领域。情感分析(Sentiment Analysis)是一种自然语言处理技术,用于确定文本的情感倾向。对于电子商务平台的评论数据,情感分析可以帮助商家了解消费者的反馈情绪,例如产品的好评、差评或中性评价。本文详细介绍了如何使用Python爬虫技术从电子商务平台抓取并分析用户评论数据。我们展示了如何通过requestsSelenium。

2201_76125261的博客 1174

【算法专题】卡特兰数

卡特兰数 1. 概述 卡特兰数:首先这个一个数,很多问题的结果都是卡特兰数,比如2016年全国三卷数学选择题压轴题让求解的就是卡特兰数,问题如下: 首先是结论:卡特兰数为: C2nnn+1 \frac{C_{2n} ^ n}{n+1} n+1C2nn​​ 因此,对于上面的题目,结果就是 C2mmm+1=C844+1=705=14 \frac{C_{2m} ^ m}{m+1} = \frac{C_8 ^ 4}{4+1} = \frac{70}{5} = 14 m+1C2mm​​=4+1C84​​

weixin_42638946的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Catalan(卡特兰)数

C(3):有3个节点,我们可以分别把 1 、 2、 3作为根节点(3种情况),当1作为根节点时,剩下2、3都比1大,全在右边,这时两个节点有两种二叉搜索树,也就是C(2)。以根节点1为例,C(0)表示左边没有节点,C(4)表示右边有4个节点,C(0)可以看成是一个特殊值,C(0) = 1。即:C(5) = C(0) * C(4) + C(1) * C(3) + C(2) * C(2) + C(3) * C(1) + C(4) * C(0)分别是(1,2)(2,1)。C(0)、 C(1) 已知,都为1。

qq_63748940的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

浅析卡特兰数

主要讲了卡特兰数

gxzssyh的博客 3056

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

卡特兰(Catalan)数

参考:http://lanqi.org/skills/10939/ 卡特兰(Catalan)数来源于卡特兰解决凸n+2边形的剖分时得到的数列Cn,在数学竞赛、信息学竞赛、组合数学、计算机编程等方面都会有其不同侧面的介绍.卡特兰问题的解决过程应用了大量的映射方法,堪称计数的映射方法的典范。为了便于读者理解,我们先介绍一些卡特兰问题的简单变形,再介绍卡特兰问题及其解法。 问题一 进出栈 栈是一种先进后...

qq_30534935的博客 4656

什么是卡特兰数

#简介 卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。 数列的前几项为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862,… 卡特兰数Cn满足以下递推关系: Cn+1 = C0Cn + C1Cn-1 + ··· + CnC0 ##原理 设h(n)为catalan数的第n+1项,令h(0)=1,h(1)=1,catalan数满足递推式: h(n)= h(0) * h(n-1) + h

weixin_44471490的博客 3584

C++卡特兰数讲解

C++卡特兰数的定义、公式、推导及应用典例。

2401_90042730的博客 2050

卡特兰数学习

卡特兰数(英语:Catalan number),又称卡塔兰数,明安图数。是。它在不同的计数问题中频繁出现。

2401_82677021的博客 3119

理解卡特兰数

(最开始一直搞不清楚卡特兰数到底是什么,公式也不知道是用来算什么的) 后来看懂卡特兰数是通过 求带限制条件的路径条数 这个典型例子,所以这次就从这个例子来说 (图片来源与维基百科) 问题:在n x n的网格里从左下角走到右上角的不经过y = x 这条线的单调路径的条数,即只能向上或向右走 如果没有限制条件,那么就是n步向上,n步向右,所以条数为 加上限制条件后,画图发现所有不合法的路...

喵喵喵 1万+

卡特兰数详解

卡特兰数讲解

NEFU AB-IN's Blog 1733

卡特兰数和超级卡特兰数

卡特兰数和超级卡特兰数 这篇博客主要是想讲一下超级卡特兰数(大施罗德数),顺带就想讲一下卡特兰数. 卡特兰数 定义 卡特兰数记为\(C_n\) \(C_1=1\) \(\forall n \geq 2, C_n=\sum_{i=1}^{n-1}C_i C_{n-i}\) 前几项大概是: 1, 1, 2, 5, 14, 42, 132...... 直接递推未免效率太低,我们考虑用生成函数优化. 显...

weixin_30496431的博客 268

卡特兰数汇总

本文讲解卡特兰数的各种递推公式,以及卡特兰数、卡特兰大数、卡特兰大数取模的代码实现,最后再顺带提一下卡特兰数的几个应用。 什么是卡特兰数呢?卡特兰数无非是一组有着某种规律的序列。重要的是它的应用。 卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845,...

nuoyanli的博客 2151
上一篇: NYOJ 651 —— n划分为2个以上不同正整数的划分个数
下一篇: NYOJ 1103 —— m划分为n个正整数的个数
AcIsFun
博客等级 码龄10年 1粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值