卡特兰数
为区别于组合数,用
是一种数列,其通项公式的一种形式为:
前几项数值为
增长幅度为
递归定义式1
理解:对于n个点构成的二叉树,其形态有
考虑dp,发现对于一个二叉树来说,枚举其左儿子大小为i,则去除根后右儿子大小为n-i+1
递归定义式2
不难发现
使用场景
递归定义式1适用于n不大的情况下求卡特兰数,不用处理除法(一般n<=500)
组合定义式
证明:
例子
例1:01排列问题
给定n个0和n个1共2n个元素的数列,要求该数列的任意前缀,0的个数不少于1的个数,求方案数
考虑建一个坐标轴出来,选0向上走,选1向下走,那么任意时刻不能走到坐标轴以下。
先不考虑只在正半轴的条件,方案数就是
先看下面的图,这种方案显然不合要求:
考虑这种不合法的方案,一定经过y=-1。
考虑对于y=-1对称,显然对称后的轨迹最后一定停留在(2* n,-2),也就是每一条不合要求的线都可以转化为一条从原点出发,最后到x=-2的轨迹。不难看出,反过来转化也是成立的。即这两者是一一对应的。现在只要算出有多少种情况最后停留在直线x=-2上,这很简单,2* n次选择n-1次向下(或者可以说是n-1次向上)。
当然解决这个问题的模型很多(比如说这个):
就不一一列举了。
当然还有很多例子:
例2:给定n个左括号和n个右括号,其合法的匹配序列的方案数
例3:给定n个元素,从1到n,其进出栈的不同方案数
例4:给定n条边的凸多边形,用n-3条边划分成n-2个三角形,其方案数
......
上面的几个例子都是卡特兰数
在那高远的黑色穹顶之下,它的牺牲使圣巢永世不衰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理