卡特兰数

为区别于组合数,用Cat(n)代表卡特兰数的第n项


是一种数列,其通项公式的一种形式为:
Catn=1n+1×C2nn(n=0,1,2...)
前几项数值为1,1,2,5,14,42,132,429
增长幅度为O(4n)

递归定义式1

Catn=i=0n1Cati×Catni1
理解:对于n个点构成的二叉树,其形态有Cat(n)
考虑dp,发现对于一个二叉树来说,枚举其左儿子大小为i,则去除根后右儿子大小为n-i+1

递归定义式2

Catn=Catn1×4n2n+1
不难发现4n2n+1的大小当n趋于正无穷大时为4,所以其增长幅度为O(4n)

使用场景

递归定义式1适用于n不大的情况下求卡特兰数,不用处理除法(一般n<=500)

组合定义式

Catn=C2nnC2nn1=1n+1×C2nn
证明:

C(2n)nC(2n)n1=(2n)n!n!(2n)(n1)!(n+1)!=(2n)(n+1)n!n!(n+1)(2n)!nn!n!(n+1)=(2n)!n!n!(n+1)=1n+1×C(2n)n

例子

例1:01排列问题
给定n个0和n个1共2n个元素的数列,要求该数列的任意前缀,0的个数不少于1的个数,求方案数

考虑建一个坐标轴出来,选0向上走,选1向下走,那么任意时刻不能走到坐标轴以下。

先不考虑只在正半轴的条件,方案数就是C2nn,这时我们只需要把不符合要求的删掉。
先看下面的图,这种方案显然不合要求:

image
考虑这种不合法的方案,一定经过y=-1。
image

考虑对于y=-1对称,显然对称后的轨迹最后一定停留在(2* n,-2),也就是每一条不合要求的线都可以转化为一条从原点出发,最后到x=-2的轨迹。不难看出,反过来转化也是成立的。即这两者是一一对应的。现在只要算出有多少种情况最后停留在直线x=-2上,这很简单,2* n次选择n-1次向下(或者可以说是n-1次向上)。

当然解决这个问题的模型很多(比如说这个):
image

就不一一列举了。

当然还有很多例子:
例2:给定n个左括号和n个右括号,其合法的匹配序列的方案数
例3:给定n个元素,从1到n,其进出栈的不同方案数
例4:给定n条边的凸多边形,用n-3条边划分成n-2个三角形,其方案数
......
上面的几个例子都是卡特兰数

posted @   星河倒注  阅读(98)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示