引入

Catalan 数经常出现在各类计数问题中。比利时数学家 Eugène Charles Catalan 在 1958 年研究括号序列计数问题时发现了这一数列,它也因此得名。清朝数学家明安图早在 18 世纪 30 年代就已经发现这一数列。

Catalan 数满足如下递推关系:

数列的前几项为:(OEIS: A000108,下标从 开始)

应用

Catalan 数 的递推关系有着天然的递归结构:规模为 的计数问题 ,可以通过枚举分界点,分拆为两个规模分别为 的子问题。这一递推关系使得 Catalan 数广泛出现于各类具有类似递归结构的问题中。

  • 路径计数问题:有一个大小为 的方格图,左下角为 ,右上角为 。从左下角开始,每次都只能向右或者向上走一单位,不走到对角线 上方(但可以触碰)的情况下,到达右上角的路径总数为
<!-- To make bot happy. Do NOT delete this line. -->
  • 圆内不相交弦计数问题:圆上有 个点,将这些点成对连接起来且使得所得到的 条线段两两不交的方案数是
<!-- To make bot happy. Do NOT delete this line. -->
  • 三角剖分计数问题:对角线不相交的情况下,将一个凸 边形区域分成三角形区域的方法数为
<!-- To make bot happy. Do NOT delete this line. -->
  • 二叉树计数问题:含有 个结点的形态不同的二叉树数目为 。等价地,含有 个非叶结点的形态不同的满二叉树数目为
<!-- To make bot happy. Do NOT delete this line. -->
  • 括号序列计数问题:由 对括号构成的合法括号序列数为
<!-- To make bot happy. Do NOT delete this line. -->
  • 出栈序列计数问题:一个栈(无穷大)的进栈序列为 ,合法出栈序列的数目为
<!-- To make bot happy. Do NOT delete this line. -->
  • 数列计数问题:由 组成的数列 中,部分和满足 的数列数目为

尽管这一递推关系应用广泛,但是直接计算复杂度较高,需要寻找更为简单的公式。

常见形式

Catalan 数有如下常见的表达式:

Catalan 数的这些形式都可以高效计算:前两个形式将它转换为阶乘和组合数的计算问题,第三个形式则提供了顺次计算的递推公式。

对于这三种常见形式,本文提供两种证明方式。

代数推演

通过代数方法得出 Catalan 数的上述表达式共两步。首先,验证三个形式相互等价。

紧接着,验证这些形式确实是 Catalan 数递推公式的解。为此,考虑使用生成函数方法直接求出递推公式 的解。

组合意义

由于 Catalan 数具有明显的组合意义,所以只使用组合计数方法同样可以证明这些形式。本节为三个表达式分别提供一个组合意义的证明。

例题

入栈顺序为 ,求所有可能的出栈顺序的总数。

习题

参考资料与注释