卡特兰数

创建时间:2025-08-21


卡特兰数的概念

卡特兰数(Catalan Number),是一种与斐波那契数列类似,在得到公式后发现了更多更广的应用场景,而卡特兰数的应用比斐波那契数列还要广泛。在 OI 中,如 01 排列问题、二叉树形态个数、Dyck 路径计数等常见问题都可以通过卡特兰数解决。

卡特兰数的定义

记卡特兰数的第 \(n\) 项为 \(Catalan_n\)\(n=0,1,2,\cdots\))。

定义式1:

\[Catalan_n=\frac {C_{2n}^n} {n+1} \]

定义式2:

\[Catalan_n=C_{2n}^n-C_{2n}^{n-1} \]

递归式:

\[Catalan_n=\left\{\begin{aligned} 1 \quad n=0\\ \sum_{i=0}^{n-1}Catalan_i \cdot Catalan_{n-i-1} \quad n>0\\ \end{aligned}\right.\]

递归式2(递推式):

\[Catalan_i=\left\{\begin{aligned} 1 \quad n=0\\ \frac {4n-2}{n+1} Catalan_{i-1} \quad n>0\\ \end{aligned}\right.\]

卡特兰数的意义

构造一种模型:每次移动只能向上或者向右一步,且不允许越过直线 \(y=x\),求从 \((0,0)\)\((n,n)\) 的合法路径数。

直接求很麻烦,正难则反。显然,如果没有直线的限制方案数就是从 \(n+n=2n\) 步中选 \(n\) 步往右走的方案数,即 \(C_{2n}^n\)。考虑怎么算不合法路径数。

以下图路径为例,其中黑线为直线 \(y=x\),蓝色实线为一条不合法路径。

将直线 \(y=x\) 上移一个单位得到直线 \(y=x+1\),即图中红线。注意到路径越过直线 \(y=x\) 完全等价于路径接触到直线 \(y=x+1\)。找到路径与 \(y=x+1\) 的第一个接触点,将后面的部分沿 \(y=x+1\) 翻转,得到图中蓝色虚线。可以发现,路径终点变成了 \((n-1,n+1)\)。类似的,每一条从 \((0,0)\)\((n,n)\) 的不合法路径都可以唯一对应一条从 \((0,0)\)\((n-1,n)\) 的路径。

那么一条从 \((0,0)\)\((n-1,n+1)\) 的路径可以得到唯一的从 \((0,0)\)\((n,n)\) 的不合法路径吗?答案是显然的,将第一个接触点后的部分,即蓝色虚线翻转回去即可。

由此得出任意从 \((0,0)\)\((n,n)\) 的不合法路径都是可以与从 \((0,0)\)\((n-1,n+1)\) 的路径形成双向映射的,它们的数量自然也相等。故从 \((0,0)\)\((n,n)\) 的不合法路径数等于从 \((0,0)\)\((n-1,n+1)\) 的路径数,即从 \((n-1)+(n+1)=2n\) 次移动中选 \(n-1\) 次向右。

综上,总合法方案数就是 \(C_{2n}^n-C_{2n}^{n-1}\)。这正是卡特兰数的定义式2!

这便是卡特兰数的实际意义之一。

卡特兰数的应用

上面的模型用起来还是有点生硬,考虑一个更简化的模式。

将向右走看成在一个序列末尾添加一个 \(0\),向上则添加一个 \(1\),此时不越过直线 \(y=x\) 就等价于在序列的任意一个前缀中 \(0\) 的个数不少于 \(1\) 的个数。故长度为 \(2n\) 的包含 \(n\)\(0\)\(n\)\(1\) 的合法序列数也正是 \(Catalan_n\)

这个模型的应用十分广泛,比如将入栈视为 \(0\),出栈视为 \(1\)\(n\) 个元素的进出栈方案数就是 \(Catalan_n\);同样的,将左括号视为 \(0\),右括号视为 \(1\),长度为 \(2n\) 的合法括号串总数也是 \(Catalan_n\)

除了这种应用,有时还得根据卡特兰数的定义式着手推。

比如一颗有 \(n\) 个节点的二叉树,假设根的左子树大小为 \(i\),则根的右子树大小就为 \(n-i-1\),故其结构总数就是 \(ans_n=\sum_{i=0}^{n-i-1}ans_ians_{n-i-1}\),其中 \(ans_0=1\)。不难发现,这就是卡特兰数的递归式1,这同样是卡特兰数的经典应用。

卡特兰数的证明中数形结合的方法同样重要,很多题目都是借鉴数形结合的方法做变式。

例题:
P1044 [NOIP 2003 普及组] 栈(卡特兰数模版)
P2532 [AHOI2012] 树屋阶梯(卡特兰数递归式+高精度)
P1641 [SCOI2010] 生成字符串(卡特兰数变式)
AT_abc205_e [ABC205E] White and Black Balls(卡特兰数变式)
CF1204E Natasha, Sasha and the Prefix Sums(卡特兰数变式)
CF1830C Hyperregular Bracket Strings(卡特兰数+随机化哈希)

posted @ 2026-06-02 16:20  xubaichuan  阅读(15)  评论(0)    收藏  举报