首页 > 其他分享 >卡特兰数浅析

卡特兰数浅析

时间:2022-11-10 17:04:37浏览次数:62  
标签:出栈 浅析 times 括号 序列 2n 卡特兰

背景:之前不熟悉的知识点,所以现在来总结一下

概念

卡特兰数是一个经常出现在组合数学中的一个数列1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, ...
以比利时的数学家欧仁·查理·卡特兰的名字来命名。

经典场景解析

进出栈序列

题目描述

n 个元素进栈序列为:1,2,3,4,...,n,则有多少种出栈序列。
img

场景解析

在这个问题当中我们可以把进栈看成+1,出栈看成-1。
如出栈序列 1 3 2可以转换成 +1 -1 +1 +1 -1 -1
这样的话,一个合法的出栈序列就是其任意位置的前缀和大于等于0,整个序列+1和-1的数量相同
现在让我们来看一个 \(n=3\) 的序列 +1 -1 -1 +1 -1 +1
显然前三项的和小于0,这是一个非法的序列
如果我们把前三项位置符号取反,那么就会是-1 +1 +1,这时在整个序列中就有 4 个+1,2 个-1
由此可以得到一个一般性的结论:
对于非法序列A,一定存在第一个非法位置,并且此时前缀和为-1,将该位置及其之前的数符号都取反,得到的序列B一定有 \(n+1\) 个+1,\(n-1\) 个-1
可以证明:每一个非法序列A都和B一一对应
那么我们就可以反向求出问题的答案
首先我们知道所有的出栈序列数量为 \(C_{2n}^{n}\),其中非法序列的数量为 \(C_{2n}^{n+1}\)
所以答案就是 \(C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^{n}}{n+1}\)

括号序列

题目描述

n 对括号,则有多少种 “括号匹配” 的括号序列
img

场景解析

如果我们把左括号看成+1,右括号看成-1,那么问题就转换成了进出栈序列了

电影购票

题目描述

电影票一张 50 coin,且售票厅没有 coin。m 个人各自持有 50 coin,n 个人各自持有 100 coin。
则有多少种排队方式,可以让每个人都买到电影票。

场景解析

依然依据出栈序列的解题思路,持有100coin可以看成-1,因为每次付100coin都需要50coin的匹配,所以50coin可以看成+1
那么一个非法序列操作过后应该是 \(m+1\) 个+1,\(n-1\) 个-1
由于是排列数,答案就是
\((C_{m+n}^{m}-C_{m+n}^{m+1}) \times m! \times n!\)

总结

根据上述的场景我们其实可以看出卡特兰数的序列公式其实就是 \(C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^{n}}{n+1}\)
然而由于时间复杂度的原因,有时不一定会采用上述公式
卡特兰数的递推式 \(C_1 = 1,C_n = C_{n-1} \times \frac {4 \times n - 2}{n + 1}\)
但是需要注意
+1和-1数量不等是不能利用此递推式子的,如上述的电影购票问题,此时并不满足卡特兰数的性质
总的来说,卡特兰数所解决的问题一般都可以转换成+1和-1匹配的问题,当计数问题中存在这种关系时,我们就可以往这方面考虑
除此之外,还有国际二叉树和搜索二叉树也和卡特兰数有关,感兴趣的朋友可以自行研究

参考:知乎专栏

标签:出栈,浅析,times,括号,序列,2n,卡特兰
From: https://www.cnblogs.com/Sun-Wind/p/16877638.html

相关文章

  • 浅析Spring事务实现原理
    SQL事务实现简介首先我们来了解下,最简单的事务是怎么实现的呢?以JDBC为例,当一个数据库Connection对象创建后,其会默认自动提交事务;每次执行SQL语句时,如果成功,就会向数据库自......
  • 浅析布隆过滤器
    一、什么是BloomFilter布隆过滤器(英语:BloomFilter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合......
  • 浅析深度学习在图像处理中的应用趋势及常见技巧
    导读 图像处理领域是深度学习和机器视觉领域重要的研究分支,本文第一部分将介绍深度学习中图像处理的常用技巧,第二部分则会浅析深度学习中图像处理的主流应用。导言近年以来......
  • 卡特兰数入门
    卡特兰数可以解决一些计数问题,还是挺常用的。前几项是\(1,1,2,5,14,42,132,\dots\)下文用\(C_n\)表示卡特兰数第\(n\)项,\(n\)从\(0\)开始。公式如果不记得通项......
  • 浅析DDD
    什么是DDD软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前,通常需要进行大量的业务知识梳理,而后到达软件设计的层面,最后才是开发......
  • 通用文档信息提取模型浅析
    文章目录​​1.前言与痛点​​​​2.通用信息提取模型技术分析​​​​1.技术介绍​​​​2.原理分析​​​​1.LayoutDetection(视觉检测模块):​​​​2.OCR(文字识别......
  • OpenStack Neutron浅析
    1.基础知识1.1防火墙(firewall)防火墙是依照特定的规则来控制进出它的网络流量的网络安全系统。一个典型的场景是在一个受信任的内网和不受信任的外网比如Internet之间......
  • Python yield 使用浅析
    之前了解了生成器的概念,带有yield的函数在Python中被称之为generator(生成器),那么应该什么时候使用呢?举个例子:简单输出斐波那契數列前N个数deffab(max):n,a,b=......
  • 浅析云边端协同与算力调度在AI视频检测场景中的应用意义
    人工智能在医疗卫生、能源动力、交通航天、语言图像识别等领域发挥着重要作用,在安防等领域也同样值得期待。人工智能、深度学习、视频结构化技术、物联网技术,大数据分析等变......
  • 浅析基于云-边-端协同架构的AI算力资源智能调度能力
    随着AI、云计算、边缘计算、大数据、物联网等技术的不断发展、数据的不断增加,基于云、边、端协同架构的部署需求也越来越多。TSINGSEE青犀视频的智能分析网关/云平台,不仅融......