卡特兰数——精简版

卡特兰数(Catalan Number)

引言

卡特兰数(Catalan number)是组合数学中一个常出现于各种计数问题中的数列。它以中国蒙古族数学家明安图和比利时数学家欧仁·查理·卡特兰的名字命名。

基本性质

  • 前几项:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786…
  • 递推公式
    $$C_n = C_0 C_{n-1} + C_1 C_{n-2} + \cdots + C_{n-1} C_0$$
  • 通项公式
    $$C_n = \frac{1}{n+1} \binom{2n}{n} = \frac{(2n)!}{(n+1)!n!}$$

数学推导

我们以最经典的栈问题来推导卡特兰数。

问题描述:n个元素的进栈序列为1,2,3,4…..n,求有多少种不同的出栈序列?

思路1: 路径计数法

  1. 将进栈表示为+1,出栈表示为-1

  2. 合法的出栈序列必须满足:

    • 任意前缀和必须≥0(栈不能为空时出栈)
    • +1和-1的总数各为n(n个元素都要进出栈)
  3. 分析过程

    • 所有可能的进出栈序列总数为 $\binom{2n}{n}$(从2n个位置中选n个放+1)
    • 非法序列:存在某个前缀和<0
    • 对于每个非法序列,找到第一个前缀和为-1的位置,将此位置及之前所有元素取反
    • 取反后得到的序列有n+1个+1和n-1个-1
    • 非法序列总数为 $\binom{2n}{n+1}$
  4. 结论:合法出栈序列数 = $\binom{2n}{n} - \binom{2n}{n+1} = \frac{\binom{2n}{n}}{n+1}$

思路2: 递归分解法

  1. 设 f(n) = 元素个数为n的出栈序列种数

  2. 假设第一个出栈的元素序号为k(1≤k≤n)

  3. 当k出栈时:

    • 元素1到k-1必须已经进栈
    • 元素k+1到n尚未进栈
    • 此时问题分解为两个子问题:
      • 元素1到k-1的出栈序列:f(k-1)种可能
      • 元素k+1到n的出栈序列:f(n-k)种可能
  4. 递推公式
    $$f(n) = \sum_{k=1}^{n} f(k-1) \cdot f(n-k)$$

  5. 令f(0)=1,可得:
    $$f(n) = \sum_{i=0}^{n-1} f(i) \cdot f(n-1-i)$$

  6. 这与卡特兰数的递推公式完全一致,因此f(n) = $C_n$

应用实例

1. 括号匹配

问题:n对括号,有多少种合法的括号匹配序列?

分析

  • 左括号视为+1,右括号视为-1
  • 任意前缀和≥0(右括号不能多于左括号)
  • 最终和为0(左右括号数量相等)

结论:合法括号序列数为 $C_n$

2. 二叉树计数

问题:n+1个叶子结点可以构成多少种形状不同的满二叉树?

分析方法一

  • 深度优先遍历二叉树,向左记为+1,向右记为-1
  • 每个右分支都对应一个左分支
  • n+1个叶子对应n个内部节点,需要2n次扩展

分析方法二

  • 根节点将树分为左右两棵子树
  • 设T(i,j)表示左子树有i个节点,右子树有j个节点
  • 递推关系:$C_n = \sum_{i=0}^{n-1} C_i \cdot C_{n-1-i}$

结论:不同形状的满二叉树数量为 $C_n$

3. 电影购票问题

问题:电影票价50元,售票处无零钱。m个人持100元,n个人持50元(n>m),问有多少种排队方式使每人都能买到票?

分析

  • 持50元的人标记为+1,持100元的人标记为-1
  • 任意前缀和≥0(售票处必须有足够零钱)
  • 考虑人的排列,总方案数为 $C_m^{m+n} \cdot m! \cdot n!$

4. 矩阵连乘

问题:表达式a₁×a₂×…×aₙ有多少种不同的加括号方式?

分析

  • 通过括号将表达式分为两部分,再递归处理
  • 递推关系:$f(n) = \sum_{i=1}^{n-1} f(i) \cdot f(n-i)$
  • 初始条件:f(1) = 1

结论:n个矩阵的不同括号化方案数为 $C_{n-1}$

5. 凸多边形三角剖分

问题:n+2边凸多边形可以划分为三角形的方法数?

分析

  • 选定一条边为基准,从其余顶点选一个连接,将多边形分为三部分
  • 递推关系:$f(n) = \sum_{i=0}^{n-1} f(i) \cdot f(n-1-i)$

结论:n+2边凸多边形的三角剖分数为 $C_n$

6. 圆上非交叉连线

问题:圆上2n个点,将这些点成对连接使得n条线段不相交的方法数?

分析

  • 选定一个点,它必须与某个点相连
  • 这条连线将其余点分为两部分,递归处理
  • 递推关系与卡特兰数相同

结论:不相交连线方式数为 $C_n$

7. 单调路径

问题:从(0,0)到(n,n),只能向右或向上移动,且不能越过对角线,有多少条路径?

分析

  • 设E表示向东,N表示向北
  • 任意前缀中E的个数不小于N的个数
  • 等价于合法括号序列问题

结论:合法路径数为 $C_n$

8. 阶梯图形填充

问题:用n个长方形填充高度为n的阶梯状图形的方法数?

分析

  • 递归分解问题
  • 递推关系与卡特兰数相同

结论:填充方法数为 $C_n$

9. 两队排队问题

问题:2n个高矮不同的人排成两队,每队n人,要求第二排的人比对应第一排的人高,有多少种排法?

分析

  • 先将2n人按高矮排序
  • 问题转化为从2n人中选n人排在第一排
  • 等价于进出栈问题

结论:排队方式数为 $C_n$

其他应用

以下问题也可用卡特兰数解决:

  1. 汽车队在狭窄路面上行驶,可进入死胡同调头但不能超车,n辆车有多少种不同的行驶顺序?

  2. n个不同的碗从一摞变为另一摞,中间可临时放置,有多少种可能的放置顺序?

参考资料

Sherry_Yue的博客


卡特兰数——精简版
http://kjuan.xyz/2025/04/05/卡特兰数-精简版/
Author
快马飞刀
Posted on
April 5, 2025
Licensed under