【学习笔记】卡特兰数

卡特兰数

定义:

卡特兰数的计算公式涉及组合计数,它是很多组合问题的数学模型,是一个很常见的数列。

(Catalan)_ 是一个数列,它的一种定义是:

Cn=1n+1(2nn)n=0,1,2,...

卡特兰数有三个计算公式:

公式1

Cn=1n+1(2nn)=(2nn)(2nn1)=(2nn)(2nn+1)

适用于 n 较大的情况。

公式2

Cn=CkCn1kC0=1

适用于 n 较小的卡特兰数,不需要求逆元,复杂度 n2

公式3

Cn=4n2n+1Cn1C0=1

接下来我们通过棋盘问题来推导公式1,通过二叉树问题来推导公式2。

应用

  • 1_

问题描述:现有一个 n×n 的棋盘,从左下角走到右上角,且一直在主对角线下面走,不能穿过主对角线,求路径的方案数。

这个限制等价于走到任意一步 k 都需要满足向右走的次数大于等于向上走的次数。

首先不考虑主对角线的限制,那么从 (0,0) 走到 (n,n) 的方案数为 (2nn),组合意义为:

每一步我可以选择向上走(记为 1)和向右走(记为 2),一共走 2n 步,相当于一个长度为 2n 的全部为 0 的序列,我们需要选择其中的 n 个位置将其填为 1,即 2nn,为 (2nn)

那么我们考虑加上这个限制,需要从总方案数上减去不合法方案数,我们看一种不合法情况:

image

如图,我们在对角线上面一格再画一个与其平行的对角线,可以发现只有所有穿过红线的路径(即不合法路径)才和蓝线有交,我们就是要统计这样的路径。
然后我们将这些路径在跨过红线后的部分关于蓝线对称:

image

可以发现这些线的终点都是 (n1,n+1),也就是 (n,n) 关于蓝线对称后的点,这些路径与原跨过红线的路径都是一一对应的,这部分的方案数同理是 (2nn1),即不合法的路径数量,所以合法的路径的数量的即为两者相减:

(2nn)(2nn1)=(2nn)(2nn+1)=1n+1(2nn)

这正好就是卡特兰数的公式1。

  • 1_

问题描述:用 n 个左括号和 n 个右括号,求能组合出多少种合法的括号序列。

发现问题就是对于该字符串的任意长度前缀,都要满足左括号的数量大于等于右括号的数量,和上面的棋盘问题实际上是一样的,方案数为 Cn

  • 1_

问题描述:给定一个入栈序列,求有多少种不同的出栈序列?

对于每个数,都是入栈一次,出栈一次,对于每个时刻,只有栈的大小大于等于 1 才可以出栈,即每时每刻需要满足入栈次数大于等于出栈次数,还是卡特兰数、

  • 2_

问题描述:n 个节点构成的二叉树,求有多少种不同的形态?

这个问题其实就是公式2的模型,设 fx,ix 子树分配 i 个点的答案,考虑从叶子节点往上递归。

对于叶子节点,fx,0=1

对于一个非叶子节点 x,设其左子树节点数量+右子树节点数量 =k,则

fx,k+1=fls,k×frs,0+fls,k1×frs,1+...+fls,1×rs,k1+fls,0+frs,k=fls,i×frs,ki

为卡特兰数递推式。

Cn=Ci×Cn1iC0=1

没了。

posted @   CCComfy  阅读(281)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示