卡特兰数(Catalan Numbers)是组合数学中一个非常优美且出现频率极高的数列。它的应用场景之广,甚至被称为“组合数学中的斐波那契数列”。

数列的前几项是:1,1,2,5,14,42,132,1, 1, 2, 5, 14, 42, 132, \dots (对应 n=0,1,2,3,n=0, 1, 2, 3, \dots

下面我将通过一个经典的 “格路模型”(Dyck Paths),用启发式的方法带你推导它的通项公式递推公式


核心场景:格路问题

问题描述: 假设在一个平面直角坐标系中,你要从原点 (0,0)(0,0) 走到 (n,n)(n,n)

  1. 每一步只能向右(R)或向上(U) 走 1 个单位。
  2. 限制条件:任何时候,向上的步数不能超过向右的步数。也就是说,路径不能越过 y=xy=x 这条对角线(可以触碰,但不能穿过走到上方)。

求:满足条件的合法路径有多少条?这个数量就是 CnC_n


一、 通项公式的推导(折线反射法)

目标:找到 Cn=1n+1(2nn)C_n = \frac{1}{n+1}\binom{2n}{n} 的来源。

1. 计算所有路径(不考虑限制)

不管合不合法,从 (0,0)(0,0) 走到 (n,n)(n,n) 一共需要走 2n2n 步,其中 nn 步向右,nn 步向上。 这相当于在 2n2n 个位置中选 nn 个位置放“向右”的操作。 总路径数 = (2nn)\binom{2n}{n}

2. 剔除非法路径

什么是“非法路径”? 根据规则,路径不能越过 y=xy=x。如果我们把 y=xy=x 上方的那条线 y=x+1y=x+1 画出来,一旦路径触碰或穿过了 y=x+1y=x+1,它就是非法的

3. 启发式魔法:反射原理(Reflection Principle)

这是组合数学中最天才的一步。

  • 假设有一条非法路径,它必然在某一点第一次触碰到 y=x+1y=x+1(红线)。
  • 记这个触碰点为 PP
  • 我们将从起点 (0,0)(0,0) 到点 PP 这一段路径,关于直线 y=x+1y=x+1对称(反射)

观察发生了什么

  • 起点 (0,0)(0,0) 关于 y=x+1y=x+1 对称后的点是 (1,1)(-1, 1)
  • 由于 PP 在对称轴上,它保持不变。
  • 原路径中“从 (0,0)(0,0)PP”变成了“从 (1,1)(-1,1)PP”。
  • 剩下的部分(从 PP 到终点 (n,n)(n,n))保持不变。

结论: 任何一条从 (0,0)(0,0)(n,n)(n,n)非法路径,都可以通过这个反射操作,一一对应地转换成一条(1,1)(-1,1)(n,n)(n,n) 的路径

4. 计算非法路径数量

现在问题变成了:从 (1,1)(-1,1) 走到 (n,n)(n,n) 有多少条路径?

  • 横坐标距离:n(1)=n+1n - (-1) = n+1 步(向右)。
  • 纵坐标距离:n1=n1n - 1 = n-1 步(向上)。
  • 总步数:(n+1)+(n1)=2n(n+1) + (n-1) = 2n 步。

非法路径数 = (2nn1)\binom{2n}{n-1}(或者 (2nn+1)\binom{2n}{n+1},两者相等)。

5. 得出通项公式

合法路径 CnC_n = 总路径 - 非法路径

Cn=(2nn)(2nn1)C_n = \binom{2n}{n} - \binom{2n}{n-1}

让我们化简一下:

$$\begin{aligned} C_n &= \frac{(2n)!}{n!n!} - \frac{(2n)!}{(n-1)!(n+1)!} \\ &= \frac{(2n)!}{n!n!} - \frac{(2n)! \times n}{n! \times n \times (n-1)! \times (n+1)} \quad (\text{分母凑阶乘}) \\ &= \frac{(2n)!}{n!n!} - \frac{(2n)! \times n}{n!n!(n+1)} \\ &= \frac{(2n)!}{n!n!} \left( 1 - \frac{n}{n+1} \right) \\ &= \binom{2n}{n} \times \frac{1}{n+1} \end{aligned} $$

最终通项公式

Cn=1n+1(2nn)C_n = \frac{1}{n+1}\binom{2n}{n}

二、 递推公式的推导(结构分解法)

目标:理解 Cn=k=0n1CkCn1kC_{n} = \sum_{k=0}^{n-1} C_k C_{n-1-k} 的来源。

我们依然使用格路模型,或者改用更直观的括号匹配二叉树模型。这里用“第一步分解法”来推导。

1. 定义问题的子结构

我们要计算 nn 对括号(或 n×nn \times n 的格路)的合法排列数 CnC_n

2. 寻找“第一次回归点”

考虑一条从 (0,0)(0,0)(n,n)(n,n) 的合法路径。

  • 第一步必然是向右(R),否则就越界了。
  • 这条路径最终会到达 (n,n)(n,n),所以它必然会在某个时刻第一次回到对角线 y=xy=x(除了起点外)。
  • 假设这个“第一次回归点”发生在点 (k+1,k+1)(k+1, k+1) 处。这里 kk 可以是 00n1n-1 的任意整数。

3. 路径被切分为三部分

我们可以把整个路径拆解为:

  1. 第一步:向右(R),从 (0,0)(1,0)(0,0) \to (1,0)
  2. 中间段:从 (1,0)(1,0)(k+1,k)(k+1, k)
    • 关键点:因为是在 (k+1,k+1)(k+1, k+1) 处才第一次回到对角线,所以中间这一段路径绝对不能触碰 y=xy=x
    • 这相当于在 y=xy=x 下方平移了一个小型的 Dyck Path。
    • 这一段的规模是 kk 对步数(从 x=1x=1x=k+1x=k+1,跨度为 kk)。
    • 方案数:CkC_k
  3. 回归步:向上(U),从 (k+1,k)(k+1,k+1)(k+1, k) \to (k+1, k+1)
  4. 剩余段:从 (k+1,k+1)(k+1, k+1)(n,n)(n,n)
    • 这是一段全新的、独立的合法路径。
    • 剩下的距离是 n(k+1)n - (k+1)
    • 方案数:Cn1kC_{n-1-k}

4. 乘法原理与加法原理

对于固定的 kk(即固定的第一次回归点),方案数为:

$$\text{中间段方案} \times \text{剩余段方案} = C_k \times C_{n-1-k} $$

因为“第一次回归点”可能出现在 (1,1),(2,2),,(n,n)(1,1), (2,2), \dots, (n,n),对应 k=0,1,,n1k=0, 1, \dots, n-1。 我们需要把所有可能情况加起来。

最终递推公式

Cn=k=0n1CkCn1kC_n = \sum_{k=0}^{n-1} C_k C_{n-1-k}

(注:这就是著名的卡特兰卷积形式)


三、 总结

1. 通项公式

用于直接计算第 nn 项。

$$C_n = \frac{1}{n+1}\binom{2n}{n} = \frac{(2n)!}{n!(n+1)!} $$

2. 递推公式

卷积形式(用于理解结构):

$$C_n = C_0 C_{n-1} + C_1 C_{n-2} + \dots + C_{n-1} C_0 $$

快速计算形式(用于编程打表,由通项推导而来):

Cn=4n2n+1Cn1C_n = \frac{4n-2}{n+1} C_{n-1}

3. 常见应用场景(映射)

如果你在问题中看到以下结构,大概率就是卡特兰数:

  • 括号匹配nn 对括号的合法匹配方案。
  • 出栈序列:进栈顺序 1,2,,n1,2,\dots,n,求合法的出栈序列数。
  • 二叉树计数nn 个节点能构成多少种不同形态的二叉树。
  • 凸多边形三角剖分n+2n+2 边形剖分成三角形的方法数。

希望这个推导过程能让你从直观上“看见”卡特兰数的生成逻辑!

0 条评论

目前还没有评论...

信息

ID
696
时间
1000ms
内存
256MiB
难度
9
标签
递交数
12
已通过
4
上传者