卡特兰数
引入
Catalan 数经常出现在各类计数问题中。比利时数学家 Eugène Charles Catalan 在 1958 年研究括号序列计数问题时发现了这一数列,它也因此得名。清朝数学家明安图早在 18 世纪 30 年代就已经发现这一数列。
Catalan 数满足如下递推关系:
𝐶𝑛={1,𝑛=0,∑𝑛−1𝑖=0𝐶𝑖𝐶𝑛−1−𝑖,𝑛>0.(1)
数列的前几项为:(OEIS: A000108,下标从 0 开始)
 开始)
1,1,2,5,14,42,132,429,1430,…
应用
Catalan 数 𝐶𝑛 的递推关系有着天然的递归结构:规模为 𝑛
 的递推关系有着天然的递归结构:规模为 𝑛 的计数问题 𝐶𝑛
 的计数问题 𝐶𝑛 ,可以通过枚举分界点,分拆为两个规模分别为 𝑖
,可以通过枚举分界点,分拆为两个规模分别为 𝑖 和 (𝑛 −1 −𝑖)
 和 (𝑛 −1 −𝑖) 的子问题。这一递推关系使得 Catalan 数广泛出现于各类具有类似递归结构的问题中。
 的子问题。这一递推关系使得 Catalan 数广泛出现于各类具有类似递归结构的问题中。
- 路径计数问题:有一个大小为 𝑛 ×𝑛 的方格图,左下角为 (0,0) 的方格图,左下角为 (0,0) ,右上角为 (𝑛,𝑛) ,右上角为 (𝑛,𝑛) 。从左下角开始,每次都只能向右或者向上走一单位,不走到对角线 𝑦 =𝑥 。从左下角开始,每次都只能向右或者向上走一单位,不走到对角线 𝑦 =𝑥 上方(但可以触碰)的情况下,到达右上角的路径总数为 𝐶𝑛 上方(但可以触碰)的情况下,到达右上角的路径总数为 𝐶𝑛 。 。
 - 证明- 设方案数为 𝑇𝑛 。考虑 𝑛 ≥2 。考虑 𝑛 ≥2 的情况。设路径 第一次 走到对角线 𝑦 =𝑥 的情况。设路径 第一次 走到对角线 𝑦 =𝑥 的点是 (𝑘,𝑘) (𝑘 ∈[1,𝑛]) 的点是 (𝑘,𝑘) (𝑘 ∈[1,𝑛])![(k,k)~(k \in [1,n])](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 。考察从 (0,0) 。考察从 (0,0) 到 (𝑘,𝑘) 到 (𝑘,𝑘) 的除起点和终点外,中间的点 不经过对角线(不能碰到) 的路径。 的除起点和终点外,中间的点 不经过对角线(不能碰到) 的路径。
  
 - 如图所示,这些路径的第一步一定向右,从 (0,0) 到 (1,0) 到 (1,0) ;最后一步一定向上,从 (𝑘,𝑘 −1) ;最后一步一定向上,从 (𝑘,𝑘 −1) 到 (𝑘,𝑘) 到 (𝑘,𝑘) 。因此,这些路径就是从 (1,0) 。因此,这些路径就是从 (1,0) 到 (𝑘,𝑘 −1) 到 (𝑘,𝑘 −1) 的不越过直线 𝑦 =𝑥 −1 的不越过直线 𝑦 =𝑥 −1 的路径,这样路径的数目就是 𝑇𝑘−1 的路径,这样路径的数目就是 𝑇𝑘−1 。同时,从 (𝑘,𝑘) 。同时,从 (𝑘,𝑘) 到 (𝑛,𝑛) 到 (𝑛,𝑛) 的合法路径数就是 𝑇𝑛−𝑘 的合法路径数就是 𝑇𝑛−𝑘 。根据乘法原理,第一次在 (𝑘,𝑘) 。根据乘法原理,第一次在 (𝑘,𝑘) 处触碰对角线的路径数目为 𝑇𝑘−1𝑇𝑛−𝑘 处触碰对角线的路径数目为 𝑇𝑘−1𝑇𝑛−𝑘 。枚举 𝑘 。枚举 𝑘 的所有可能性,所有合法路径的数目为 的所有可能性,所有合法路径的数目为
 𝑇𝑛=𝑛∑𝑘=1𝑇𝑘−1𝑇𝑛−𝑘.  - 做代换 𝑘 =𝑖 +1 就可以发现,这就是 Catalan 数的递推关系。由 𝑇0 =1 就可以发现,这就是 Catalan 数的递推关系。由 𝑇0 =1 可知 𝑇𝑛 =𝐶𝑛 可知 𝑇𝑛 =𝐶𝑛 。 。
 
- 圆内不相交弦计数问题:圆上有 2𝑛 个点,将这些点成对连接起来且使得所得到的 𝑛 个点,将这些点成对连接起来且使得所得到的 𝑛 条线段两两不交的方案数是 𝐶𝑛 条线段两两不交的方案数是 𝐶𝑛 。 。
 - 证明- 记 2𝑛 个点的方案数为 𝑇𝑛 个点的方案数为 𝑇𝑛 。将 2𝑛 。将 2𝑛 个点按顺时针标号,分别为 1,2,…,2𝑛 个点按顺时针标号,分别为 1,2,…,2𝑛 。由于弦两两不交,1 。由于弦两两不交,1 号点只能连接偶数号点;否则,两点之间的奇数个点无法在不穿过两点连线的情况下两两配对。如果连接了 1 号点只能连接偶数号点;否则,两点之间的奇数个点无法在不穿过两点连线的情况下两两配对。如果连接了 1 和 2𝑘 (𝑘 ∈[1,𝑛]) 和 2𝑘 (𝑘 ∈[1,𝑛])![2k~(k\in[1,n])](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) ,那么左边有 2𝑘 −2 ,那么左边有 2𝑘 −2 个点,右边有 2𝑛 −2𝑘 个点,右边有 2𝑛 −2𝑘 个点,由乘法原理,这样的方案数为 𝑇𝑘−1𝑇𝑛−𝑘 个点,由乘法原理,这样的方案数为 𝑇𝑘−1𝑇𝑛−𝑘 。因此,枚举 𝑘 。因此,枚举 𝑘 ,有 𝑇𝑛 =∑𝑛𝑘=1𝑇𝑘−1𝑇𝑛−𝑘 ,有 𝑇𝑛 =∑𝑛𝑘=1𝑇𝑘−1𝑇𝑛−𝑘 。令 𝑘 =𝑖 +1 。令 𝑘 =𝑖 +1 ,就得到 Catalan 数的递推关系。由 𝑇0 =1 ,就得到 Catalan 数的递推关系。由 𝑇0 =1 可知 𝑇𝑛 =𝐶𝑛 可知 𝑇𝑛 =𝐶𝑛 。 。
 
- 三角剖分计数问题:对角线不相交的情况下,将一个凸 (𝑛 +2) 边形区域分成三角形区域的方法数为 𝐶𝑛 边形区域分成三角形区域的方法数为 𝐶𝑛 。 。
 - 证明- 设 (𝑛 +2) 边形三角剖分的方案数为 𝑇𝑛 边形三角剖分的方案数为 𝑇𝑛 。先选定一条边 (1,𝑛 +2) 。先选定一条边 (1,𝑛 +2) 作为基边,它一定属于一个三角形,记该三角形的第三个点为 𝑘 (𝑘 ∈[2,𝑛 +1]) 作为基边,它一定属于一个三角形,记该三角形的第三个点为 𝑘 (𝑘 ∈[2,𝑛 +1])![k~(k\in[2,n+1])](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 。这样,原凸多边形变成了三个部分: 。这样,原凸多边形变成了三个部分:
 - 三角形 (1,𝑘,𝑛 +2) 。 。
- 𝑘 边形,顶点 1 ∼𝑘 边形,顶点 1 ∼𝑘 。 。
- (𝑛 +3 −𝑘) 边形,顶点 𝑘 ∼(𝑛 +2) 边形,顶点 𝑘 ∼(𝑛 +2) 。 。
 - 后面两个部分都是子问题,所以,有递推关系 𝑇𝑛=𝑛+1∑𝑘=2𝑇𝑘−2𝑇𝑛+1−𝑘.  - 令 𝑘 =𝑖 +2 ,就得到 Catalan 数递归关系。由 𝑇0 =𝑇1 =1 ,就得到 Catalan 数递归关系。由 𝑇0 =𝑇1 =1 可知 𝑇𝑛 =𝐶𝑛 可知 𝑇𝑛 =𝐶𝑛 。 。
 
- 二叉树计数问题:含有 𝑛 个结点的形态不同的二叉树数目为 𝐶𝑛 个结点的形态不同的二叉树数目为 𝐶𝑛 。等价地,含有 𝑛 。等价地,含有 𝑛 个非叶结点的形态不同的满二叉树数目为 𝐶𝑛 个非叶结点的形态不同的满二叉树数目为 𝐶𝑛 。 。
 - 证明- 记 𝑛 个结点的二叉树数目为 𝑇𝑛 个结点的二叉树数目为 𝑇𝑛 。任取一个根结点,枚举左右子树大小。设左子树大小为 𝑖 ∈[0,𝑛 −1] 。任取一个根结点,枚举左右子树大小。设左子树大小为 𝑖 ∈[0,𝑛 −1]![i\in[0,n-1]](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) ,则右子树大小为 (𝑛 −1 −𝑖) ,则右子树大小为 (𝑛 −1 −𝑖) 。左右子树均为子问题,所以,有递推关系 。左右子树均为子问题,所以,有递推关系
 𝑇𝑛=𝑛−1∑𝑖=0𝑇𝑖𝑇𝑛−1−𝑖.  - 这就是 Catalan 数递推关系。由 𝑇0 =𝑇1 =1 可知 𝑇𝑛 =𝐶𝑛 可知 𝑇𝑛 =𝐶𝑛 。 。
 
- 括号序列计数问题:由 𝑛 对括号构成的合法括号序列数为 𝐶𝑛 对括号构成的合法括号序列数为 𝐶𝑛 。 。
 - 证明- 联系路径计数问题。将左括号视为向上走,右括号视为向右走。合法括号序列即为,在任意位置,左括号的数量不少于右括号的数量。相当于路径计数问题中,在任意时刻,向上走的次数不少于向右走的次数。因此,合法括号序列与合法路径之间存在双射。合法括号序列的数目同样为 𝐶𝑛 。 。
 
- 出栈序列计数问题:一个栈(无穷大)的进栈序列为 1,2,3,…,𝑛 ,合法出栈序列的数目为 𝐶𝑛 ,合法出栈序列的数目为 𝐶𝑛 。 。
 - 证明- 联系括号序列计数问题。将入栈视为左括号,出栈视为右括号。任意时刻,入栈的次数不少于出栈的次数。因此,合法出栈序列与合法括号序列之间存在双射。合法出栈序列的数目同样为 𝐶𝑛 。 。
 
- 数列计数问题:由 𝑛 个 +1 个 +1 和 𝑛 和 𝑛 个 −1 个 −1 组成的数列 𝑎1,𝑎2,…,𝑎2𝑛 组成的数列 𝑎1,𝑎2,…,𝑎2𝑛 中,部分和满足 𝑎1 +𝑎2 +… +𝑎𝑘 ≥0 (𝑘 =1,2,3,…,2𝑛) 中,部分和满足 𝑎1 +𝑎2 +… +𝑎𝑘 ≥0 (𝑘 =1,2,3,…,2𝑛) 的数列数目为 𝐶𝑛 的数列数目为 𝐶𝑛 。 。
 - 证明- 联系括号序列计数问题。将 +1 视为左括号,−1 视为左括号,−1 视为右括号。任意时刻,+1 视为右括号。任意时刻,+1 的数量不少于 −1 的数量不少于 −1 的数量。因此,合法数列与合法括号序列之间存在双射。合法数列的数目同样为 𝐶𝑛 的数量。因此,合法数列与合法括号序列之间存在双射。合法数列的数目同样为 𝐶𝑛 。 。
 
尽管这一递推关系应用广泛,但是直接计算复杂度较高,需要寻找更为简单的公式。
常见形式
Catalan 数有如下常见的表达式:
𝐶𝑛=1𝑛+1(2𝑛𝑛)=(2𝑛)!𝑛!(𝑛+1)!, 𝑛≥0.(2) 𝐶𝑛=(2𝑛𝑛)−(2𝑛𝑛+1), 𝑛≥0.(3)
𝐶𝑛=(2𝑛𝑛)−(2𝑛𝑛+1), 𝑛≥0.(3) 𝐶𝑛=(4𝑛−2)𝑛+1𝐶𝑛−1, 𝑛>0, 𝐶0=1.(4)
𝐶𝑛=(4𝑛−2)𝑛+1𝐶𝑛−1, 𝑛>0, 𝐶0=1.(4)
Catalan 数的这些形式都可以高效计算:前两个形式将它转换为阶乘和组合数的计算问题,第三个形式则提供了顺次计算的递推公式。
对于这三种常见形式,本文提供两种证明方式。
代数推演
通过代数方法得出 Catalan 数的上述表达式共两步。首先,验证三个形式相互等价。
证明表达式 (2) ∼(4) 等价
 等价
 只需要证明表达式 (3) 可以转化为表达式 (2)
 可以转化为表达式 (2) 中阶乘形式:
 中阶乘形式:
 𝐶𝑛=(2𝑛𝑛)−(2𝑛𝑛+1)=(2𝑛)!𝑛!𝑛!−(2𝑛)!(𝑛−1)!(𝑛+1)!=(2𝑛)!𝑛!𝑛!(1−𝑛!(𝑛−1)!(𝑛+1))=(2𝑛)!𝑛!𝑛!(1−𝑛𝑛+1)=(2𝑛)!𝑛!(𝑛+1)!. 
 以及,表达式 (4) 也可以转化为表达式 (2)
 也可以转化为表达式 (2) 中阶乘形式:
 中阶乘形式:
 𝐶𝑛=𝑛∏𝑖=1(4𝑖−2)𝑖+1=𝑛∏𝑖=12𝑖(2𝑖−1)𝑖(𝑖+1)=(2𝑛)!𝑛!(𝑛+1)!. 
 因此,三个表达式互相等价。
紧接着,验证这些形式确实是 Catalan 数递推公式的解。为此,考虑使用生成函数方法直接求出递推公式 (1) 的解。
 的解。
利用生成函数方法求解递推公式 (1)
 考虑 Catalan 数的普通生成函数 𝐶(𝑥) =∑∞𝑛=0𝐶𝑛𝑥𝑛 。由于 Catalan 数的递推关系和卷积形式很相似,所以考虑用卷积构造 𝐶(𝑥)
。由于 Catalan 数的递推关系和卷积形式很相似,所以考虑用卷积构造 𝐶(𝑥) 的方程:
 的方程:
 𝐶(𝑥)=∞∑𝑛=0𝐶𝑛𝑥𝑛=1+∞∑𝑛=1(𝑛−1∑𝑖=0𝐶𝑖𝐶𝑛−𝑖−1)𝑥𝑛=1+𝑥∞∑𝑛=1𝑛−1∑𝑖=0𝐶𝑖𝑥𝑖𝐶𝑛−𝑖−1𝑥𝑛−𝑖−1=1+𝑥∞∑𝑖=0𝐶𝑖𝑥𝑖∞∑𝑗=0𝐶𝑗𝑥𝑗=1+𝑥𝐶2(𝑥). 
 其中,倒数第二个等号交换了求和次序,并令 𝑗 =𝑛 −1 −𝑖 。由此,解得:
。由此,解得:
 𝐶(𝑥)=1±√1−4𝑥2𝑥=21∓√1−4𝑥. 
 由初值条件 𝐶0 =1 可知,𝐶(0) =1
 可知,𝐶(0) =1 。代入检验可以发现唯一可行的解就是
。代入检验可以发现唯一可行的解就是
 𝐶(𝑥)=1−√1−4𝑥2𝑥. 
 接下来,需要将它展开为幂级数的形式。利用 (1 +𝑥)𝑎 的 幂级数展开式 可知:
 的 幂级数展开式 可知:
 √1−4𝑥=∞∑𝑛=0(12)−𝑛𝑛!(−4𝑥)𝑛, 
 其中,(12)−𝑛 是下降阶乘幂:
 是下降阶乘幂:
 (12)−𝑛=𝑛−1∏𝑘=0(12−𝑘)=12𝑛𝑛−1∏𝑘=1(1−2𝑘)=(−1)𝑛−12𝑛𝑛−1∏𝑘=1(2𝑘−1)=(−1)𝑛−122𝑛−1𝑛−1∏𝑘=1(2𝑘−1)2𝑘𝑘=(−1)𝑛−122𝑛−1(2𝑛−2)!(𝑛−1)!. 
 代入 𝐶(𝑥) 的表达式,就有
 的表达式,就有
 𝐶(𝑥)=12𝑥(1−∞∑𝑛=0(12)−𝑛𝑛!(−4𝑥)𝑛)=−12𝑥∞∑𝑛=1(−4𝑥)𝑛𝑛!(12)−𝑛=−12𝑥∞∑𝑛=1(−4𝑥)𝑛𝑛!(−1)𝑛−122𝑛−1(2𝑛−2)!(𝑛−1)!=∞∑𝑛=1(2𝑛−2)!(𝑛−1)!𝑛!𝑥𝑛−1=∞∑𝑛=0(2𝑛)!𝑛!(𝑛+1)!𝑥𝑛. 
 由此,就得到 𝐶𝑛 的表达式 (2)
 的表达式 (2) 。
。
组合意义
由于 Catalan 数具有明显的组合意义,所以只使用组合计数方法同样可以证明这些形式。本节为三个表达式分别提供一个组合意义的证明。
表达式 (2) 的证明
 的证明
 考虑 数列计数问题。对于任意由 ±1 组成的序列 {𝑎𝑖}2𝑛𝑖=1
 组成的序列 {𝑎𝑖}2𝑛𝑖=1 ,定义它的部分和为 𝑆𝑖 =∑𝑖𝑗=1𝑎𝑖
,定义它的部分和为 𝑆𝑖 =∑𝑖𝑗=1𝑎𝑖 ,并定义它的 超额量(exceedance)为 𝑆𝑖 <0
,并定义它的 超额量(exceedance)为 𝑆𝑖 <0 且 𝑎𝑖 = −1
 且 𝑎𝑖 = −1 的下标数量。超额量为 0
 的下标数量。超额量为 0 ,就等价于数列合法;超额量的取值范围是 [0,𝑛]
,就等价于数列合法;超额量的取值范围是 [0,𝑛]![[0,n]](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) ,共 (𝑛 +1)
,共 (𝑛 +1) 种可能的取值。需要证明的是,不同超额量的数列数量其实是一样的。
 种可能的取值。需要证明的是,不同超额量的数列数量其实是一样的。
 为此,可以构造一个从超额量为 𝑒 >0 的数列到超额量为 (𝑒 −1)
 的数列到超额量为 (𝑒 −1) 的数列的映射 𝑓
 的数列的映射 𝑓 。对于超额量为 𝑒 >0
。对于超额量为 𝑒 >0 的序列 {𝑎𝑖}
 的序列 {𝑎𝑖} ,取下标 𝑘
,取下标 𝑘 为使得 𝑆𝑖 =0
 为使得 𝑆𝑖 =0 且 𝑎𝑖 = +1
 且 𝑎𝑖 = +1 成立的下标最小值。将 𝑎𝑘
 成立的下标最小值。将 𝑎𝑘 左右两侧的序列交换,就得到如下序列 {𝑎′𝑖}
 左右两侧的序列交换,就得到如下序列 {𝑎′𝑖} :
:
 𝑎𝑘+1,𝑎𝑘+2,⋯,𝑎2𝑛,𝑎𝑘,𝑎1,𝑎2,⋯,𝑎𝑘−1. 
 由于原序列中 𝑎𝑘 右侧部分在交换前后对应的部分和序列不变,所以它们贡献的超额量也不变。对于原序列中 𝑎𝑘
 右侧部分在交换前后对应的部分和序列不变,所以它们贡献的超额量也不变。对于原序列中 𝑎𝑘 左侧部分,它们对应的部分和在交换后全部增加 1
 左侧部分,它们对应的部分和在交换后全部增加 1 ,因此,它们贡献的超额量会减少,而且减少的数量恰好等于原序列 𝑎𝑘
,因此,它们贡献的超额量会减少,而且减少的数量恰好等于原序列 𝑎𝑘 左侧部分中满足 𝑆𝑖 = −1
 左侧部分中满足 𝑆𝑖 = −1 且 𝑎𝑖 = −1
 且 𝑎𝑖 = −1 的下标数量。因为 𝑎𝑘
 的下标数量。因为 𝑎𝑘 的选取保证了这样的下标有且仅有一个,所以,序列 {𝑎′𝑖}
 的选取保证了这样的下标有且仅有一个,所以,序列 {𝑎′𝑖} 的超额量就等于 (𝑒 −1)
 的超额量就等于 (𝑒 −1) 。也就是说,映射 𝑓
。也就是说,映射 𝑓 可以将序列的超额量恰好减少 1
 可以将序列的超额量恰好减少 1 。
。
 映射 𝑓 是可逆的。注意到序列 {𝑎′𝑖}
 是可逆的。注意到序列 {𝑎′𝑖} 中,𝑎𝑘
 中,𝑎𝑘 对应的位置恰好为满足 𝑆′𝑘 = +1
 对应的位置恰好为满足 𝑆′𝑘 = +1 且 𝑎′𝑖 = +1
 且 𝑎′𝑖 = +1 的下标最大值。这是因为交换后,这些部分和都比交换前对应的部分和恰好大 1
 的下标最大值。这是因为交换后,这些部分和都比交换前对应的部分和恰好大 1 ,因此,现在的部分和为 +1
,因此,现在的部分和为 +1 对应交换前部分和等于 0
 对应交换前部分和等于 0 。但是,根据 𝑘
。但是,根据 𝑘 的选取,交换前这一部分(即原序列 𝑎𝑘
 的选取,交换前这一部分(即原序列 𝑎𝑘 左侧部分)是没有满足 𝑆𝑖 =0
 左侧部分)是没有满足 𝑆𝑖 =0 且 𝑎𝑖 = +1
 且 𝑎𝑖 = +1 成立的下标的。
 成立的下标的。
 由此,映射 𝑓 构成了超额量为 𝑒 >0
 构成了超额量为 𝑒 >0 的序列和超额量为 (𝑒 −1)
 的序列和超额量为 (𝑒 −1) 的序列之间的双射。这就说明,不同超额量的数列数量其实是一样的。由于数列总数是 (2𝑛𝑛)
 的序列之间的双射。这就说明,不同超额量的数列数量其实是一样的。由于数列总数是 (2𝑛𝑛) ,合法数列(即超额量为 0
,合法数列(即超额量为 0 的数列)数量就等于
 的数列)数量就等于
 𝐶𝑛=1𝑛+1(2𝑛𝑛). 
 这就证明了 Catalan 数的表达式 (2) 。
。
表达式 (3) 的证明
 的证明
 考虑 路径计数问题。这是典型的格路计数问题,可以通过反射原理求解。具体到本问题,考虑用总路径数目减去不合法的路径数目。总路径数一共要走 2𝑛 步,其中 𝑛
 步,其中 𝑛 步向右,所以方案数为 (2𝑛𝑛)
 步向右,所以方案数为 (2𝑛𝑛) 。一条路径不合法,当且仅当它碰到了直线 𝑦 =𝑥 +1
。一条路径不合法,当且仅当它碰到了直线 𝑦 =𝑥 +1 。对于任意一条非法路径,可以找到第一次碰到直线 𝑦 =𝑥 +1
。对于任意一条非法路径,可以找到第一次碰到直线 𝑦 =𝑥 +1 的位置,并将该位置之后的路径关于直线 𝑦 =𝑥 +1
 的位置,并将该位置之后的路径关于直线 𝑦 =𝑥 +1 做对称。此时,可以发现,一条从 (0,0)
 做对称。此时,可以发现,一条从 (0,0) 到 (𝑛,𝑛)
 到 (𝑛,𝑛) 的非法路径,变成了一条从 (0,0)
 的非法路径,变成了一条从 (0,0) 到 (𝑛 −1,𝑛 +1)
 到 (𝑛 −1,𝑛 +1) 的路径。
 的路径。
 
 由于从 (0,0) 到 (𝑛 −1,𝑛 +1)
 到 (𝑛 −1,𝑛 +1) 的路径必定要穿过直线 𝑦 =𝑥 +1
 的路径必定要穿过直线 𝑦 =𝑥 +1 ,所以每条这样的路径都对应一条从 (0,0)
,所以每条这样的路径都对应一条从 (0,0) 到 (𝑛,𝑛)
 到 (𝑛,𝑛) 的非法路径。类似总路径数的计算,非法路径数目的总数就是 (2𝑛𝑛+1)
 的非法路径。类似总路径数的计算,非法路径数目的总数就是 (2𝑛𝑛+1) 。因此,合法路径的总数为
。因此,合法路径的总数为
 𝐶𝑛=(2𝑛𝑛)−(2𝑛𝑛+1). 
 这就是 Catalan 数的表达式 (3) 。
。
表达式 (4) 的证明
 的证明
 考虑 三角剖分计数问题。设 𝑃 是凸 (𝑛 +2)
 是凸 (𝑛 +2) 边形,固定它的一个边为基边。对于多边形 𝑃
 边形,固定它的一个边为基边。对于多边形 𝑃 的每一个三角剖分,都可以选择它的一个非基边(包括三角剖分时新加的边)标记,并定向。这共有 (4𝑛 +2)𝐶𝑛
 的每一个三角剖分,都可以选择它的一个非基边(包括三角剖分时新加的边)标记,并定向。这共有 (4𝑛 +2)𝐶𝑛 种剖分加标记的方案。又设 𝑄
 种剖分加标记的方案。又设 𝑄 是凸 (𝑛 +3)
 是凸 (𝑛 +3) 边形,仍固定它的一个边为基边。对于多边形 𝑄
 边形,仍固定它的一个边为基边。对于多边形 𝑄 ,可以选择它的一条非基边标记,然后再做三角剖分。这共有 (𝑛 +2)𝐶𝑛+1
,可以选择它的一条非基边标记,然后再做三角剖分。这共有 (𝑛 +2)𝐶𝑛+1 种标记加剖分的方案。
 种标记加剖分的方案。
 
 如图所示,这两组操作得到的结果之间存在明显的双射。对于 𝑃 剖分并标记的一个结果,可以将它的标记边扩展为三角形,定向所指向的终点扩展为一条新边,并将这条新边打上标记,这就得到对 𝑄
 剖分并标记的一个结果,可以将它的标记边扩展为三角形,定向所指向的终点扩展为一条新边,并将这条新边打上标记,这就得到对 𝑄 标记并剖分的一个结果;对于 𝑄
 标记并剖分的一个结果;对于 𝑄 标记并剖分的一个结果,可以将它的标记边压缩为一个点,并将压缩得到的对角线打上标记,且指向压缩得到的顶点,这就得到对 𝑃
 标记并剖分的一个结果,可以将它的标记边压缩为一个点,并将压缩得到的对角线打上标记,且指向压缩得到的顶点,这就得到对 𝑃 剖分并标记的一个结果。因此,
 剖分并标记的一个结果。因此,
 (4𝑛+2)𝐶𝑛=(𝑛+2)𝐶𝑛+1. 
 稍作整理,并结合 𝐶0 =1 ,就得到 Catalan 数的表达式 (4)
,就得到 Catalan 数的表达式 (4) 。
。
例题
洛谷 P1044 栈
 入栈顺序为 1,2,…,𝑛 ,求所有可能的出栈顺序的总数。
,求所有可能的出栈顺序的总数。
参考代码
 习题
参考资料与注释
本页面最近更新:2025/10/13 16:54:57,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Ir1d, StudyingFather, H-J-Granger, countercurrent-time, Enter-tainer, NachtgeistW, Xeonacid, MegaOwIer, AngelKitty, c-forrest, CCXXXI, cjsoft, diauweb, Early0v0, ezoixx130, GekkaSaori, Konano, ksyx, LovelyBuggies, Makkiy, mgt, minghu6, P-Y-Y, PotassiumWings, SamZhangQingChuan, sshwy, Suyun514, Tiphereth-A, weiyong1024, Chrogeek, Fidelxyz, GavinZhengOI, Gesrua, Great-designer, Henry-ZHR, HeRaNO, hsfzLZH1, iamtwz, kenlig, kfy666, kxccc, lychees, Marcythm, Menci, Peanut-Tang, purple-vine, refinedcoding, shawlleyw, ShizuhaAki, Skyminers, SukkaW, ucSec, WFHFAQFXY, xglight, zryi2003
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用