卡特兰数详解
一、卡特兰数的定义
1.1 核心定义
卡特兰数是一组满足特定递推关系的整数序列,记为 $C_n$($n\ge0$),其中第 n 项表示 n 个'操作对'对应的合法方案数。
前 11 项卡特兰数(n 从 0 到 10)如下:
| n(项数) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $C_n$(卡特兰数) | 1 | 1 | 2 | 5 | 14 | 42 | 132 | 429 | 1430 | 4862 | 16796 |
从数列可以看出,卡特兰数增长速度极快,n=10 时已达 16796,n=20 时更是突破 6564120420,因此大规模计算时需注意溢出问题(通常用取模或高精度处理)。
1.2 卡特兰数的本质
卡特兰数的核心本质是:在两种对立操作的序列中,保证任意前缀中一种操作数不小于另一种操作数。
比如:
- 括号匹配:左括号(+1)和右括号(-1),任意前缀和≥0;
- 栈操作:入栈(+1)和出栈(-1),任意前缀和≥0;
- 购票找零:50 元(+1)和 100 元(-1),任意前缀和≥0。
这些问题的共性,正是卡特兰数的应用场景标志。
二、卡特兰数的 4 大核心公式
卡特兰数有 4 种常用公式,分别适用于不同场景(如数据范围、是否取模、是否需要递推打表),掌握它们就能应对所有卡特兰数问题。
2.1 公式一:递推公式(分治思想)
$$C_n = \sum_{i=0}^{n-1} C_i C_{n-1-i}$$
推导逻辑:将规模为 n 的问题拆分为两个子问题。以'n 个结点构造二叉树'为例:选择第 i 个结点作为根节点;总方案数为所有拆分方式的累加。 右子树有 n-1-i 个结点,方案数为 $C_{n-1-i}$;左子树有 i 个结点,方案数为 $C_i$。
适用场景:n 较小(≤100)、需要规避除法(如取模的模数不是质数)。 时间复杂度:$O(n^2)$。
2.2 公式二:通项公式(组合数直接计算)
$$C_n = \frac{1}{n+1}\binom{2n}{n}$$
推导逻辑:从 2n 个位置中选择 n 个位置放置'左操作',总方案数为 $\binom{2n}{n}$;再减去非法方案数,最终得到上述通项公式。
适用场景:n 中等(≤1e5)、模数为质数(可通过逆元处理除法)。 时间复杂度:$O(n)$(预处理阶乘和逆元后,单次查询 $O(1)$)。
2.3 公式三:递推优化公式(线性递推)
$$C_n = C_{n-1} \times \frac{4n-2}{n+1}$$
推导逻辑:由通项公式变形得到,避免了组合数计算,直接通过前一项递推当前项。
适用场景:n 中等(≤1e6)、无需取模(或模数支持除法)、需要快速打表。 时间复杂度:$O(n)$(线性递推,效率极高)。
2.4 公式四:组合数差公式(正难则反)
$$C_n = \binom{2n}{n} - \binom{2n}{n-1}$$


