卡特兰数的应用,你知道几个?

2024-02-19 14:38
文章标签 应用 几个 卡特兰 知道

本文主要是介绍卡特兰数的应用,你知道几个?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来自:https://blog.csdn.net/zhangmh93425/article/details/44677891

卡特兰递推公式

1. C_n = /frac{1}{n+1}{2n/choose n} = /frac{(2n)!}{(n+1)!/,n!} /quad n/ge 0  

2. C_n = {2n/choose n} - {2n/choose n+1} /quad n/ge 0

3. C_0 = 1 /quad , /quad C_{n+1}=/frac{2(2n+1)}{n+2}C_n

4. /begin{displaymath}C_0 = 1 /quad , /quad C_{n+1}=/sum_{i=0}^{n}C_i/,C_{n-i}/quad n/ge 0/end{displaymath}

5. /begin{displaymath}C_n= /frac 1{n+1} /sum_{i=0}^n {n /choose i}^2/end{displaymath}

 

卡特兰数的应用

1. 由n个+1和n个-1构成2n项a_1,a_2,...,a_n其部分和满足a_1 + a_2 + ... + a_k /ge 0 /quad , /quad 0 /le k /le 2n的序列个数等于第n个Catalan数C_n

假设不满足条件的序列个数为U_n,那么就有C_n + U_n = {2n /choose n}。而对于不满足的序列,必然存在某一个奇数位使a_1 + a_2 + ... + a_k < 0,而且+1的个数恰好比-1的个数少一个,此时我们将前k项中的+1变为-1,将-1变为+1,那么就得到一个有(n+1)个+1和(n-1)个-1的序列,即一个不满足条件的序列对应于一个由n+1个+1和n-1个-1组成的排列。所以 U_n = {2n/choose n + 1}。那么C_n = {2n/choose n} - U_n = {2n/choose n} - {2n/choose n + 1}}}

 

2. 我们可以将应用1变换形式:将-1看成右括号,+1看成左括号,就变成了左括号和右括号各有n个时,合法括号表达式的个数。比如2个左括号和2个右括号组成的合法表达式有C_2 = 2种,是()()和(())。

 

3. 再次转换形式,对于n+1个数连乘,乘法顺序有C_n种,比如三个数连乘a*b*c,n=2,相当于在式子上加括号,有2种乘法顺序,分别是(ab)c和a(bc)。四个数连乘a*b*c*d,n=3,有5种乘法顺序,分别是a(b(cd)),(ab)(cd),((ab)c)d,(a(bc))d和a((bc)d)。同时对于n为3得到合法的括号序列有5个,分别是:((())),()(()),()()(),(())()和(()()),也即与n+1个数连乘的顺序数一一对应关系。

 

4. n个节点构造二叉树的所有可能形态数为C_n。考虑随便取一个节点作为根,那么他左边和右边的儿子节点个数就确定了,假定根节点标号为x,那么左子树的标号就是从1到x-1,共x-1个,右子树的标号就是从x+1到n,共n-x个,那么将x从1取到n,就获得了所有的情况数/begin{displaymath}C_n = /sum_{i = 0}^{n - 1}C_i/,C_{n - i - 1}/end{displaymath}

 

5. n个非叶节点的满二叉树的形态数(对称后得到的二叉树除非自己本身对称,否则算是不同)

对于满二叉树,实际上就是将应用4中的每个子节点的空儿子上都加上叶子,就形成了对应的满二叉树,那么n个非叶节点形成的满二叉树的形态数即为Cn

 

6. 对于一个n*n的正方形网格,每次只能向右或者向上移动一格,那么从左下角到右上角所有在副对角线右下方的路径总数为C_n

可以将一条水平边记为+1,垂直边记为-1,那么就组成了一个n个+1和n个-1的序列,并且保证前k步中水平边数不小于垂直边数,换句话说前k个元素的和非负。

 

7. 对凸n+2边形进行不同的三角形分割(只连接顶点对形成n个三角形)数为Cn

8. n个数入栈后的出栈的排列总数是C_n。例如1,2,3入栈的出栈排序有123,132,213,231和321五种

 

9. 对于集合/{1,2,...,2n/},将集合元素两两分为n个子集,若任意两个子集都不交叉,那么我们称此划分为一个不交叉划分。此时不交叉的划分数就是C_n。考虑将每个子集中较小的数用左括号代替,较大的用右括号代替,那么带入原来的1至2n的序列中就形成了合法括号问题。例如集合{1,2,3,4,5,6}的不交叉划分有五个:{{1,2},{3,4},{5,6}},{{1,2},{3,6},{4,5}},{{1,4},{2,3},{5,6}},{{1,6},{2,3},{4,5}}和{{1,6},{2,5},{3,4}}。

 

10. n层的阶梯切割为n个矩形的切法数也是C_n。如下图所示:

 考虑先绘制如下图片,即n为5的时候的阶梯:

注意到每个切割出来的矩形都必需包括一块标示为*的小正方形,那么此时枚举每个*与#标示的两角作为矩形,剩下的两个小阶梯就是我们的两个更小的子问题了,于是我们的C_5 = C_0 * C_4 + C_1 * C_3 + C_2 * C_2 + C_1 * C_3 + C_0 * C_4

 

11. 在一个2*n的格子中填入1到2n这些数值使得每个格子内的数值都比其右边和上边的所有数值都小的情况数也是C_n

 

12. 平面上连接可以形成凸包的2n个点分成2个一组连成n条线段,两两线段之间不相交的情况总数是C_n,这里实际上和应用7本质上是一样的。

 

13. n+m个人排队买票,并且满足n /ge m,票价为50元,其中n个人各手持一张50元钞票,m个人各手持一张100元钞票,初始时候售票窗口没有钱,问有多少种排队的情况数能够让大家都买到票。

如果m=n的话那么这就是初始的Catalan数问题,也就是将手持50元的人看成是+1,手持100元的人看成是-1,任前k个数值的和都非负的序列数。

对于n>m的情况,假设大家都可以买到票的情况数是D_{n+m},无法让每个人都买到的情况数是U_{n + m},那么就有D_{n + m} + U_{n +m} = {n + m /choose n},假设最早买不到票的人编号是k,他手持的是100元并且售票处没有钱,那么将前k个人的钱从50元变成100元,从100元变成50元,这时候就有n+1个人手持50元,m-1个手持100元的,所以就得到U_{n + m} = {n + m /choose n + 1},同时D_{n + m} = {n + m /choose n} - {n + m /choose n + 1}

这篇关于卡特兰数的应用,你知道几个?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724985

相关文章

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD