卡特兰数(Catalan numbers)是一类在组合数学中频繁出现的整数序列,以比利时数学家欧仁·查理·卡特兰(Eugène Charles Catalan)的名字命名。这个数列在许多看似无关的问题中都会自然出现,具有丰富的组合解释。
一、卡特兰数的定义
第nnn 个卡特兰数 CnC_nCn 的公式为:
Cn=1n+1(2nn)=(2n)!(n+1)! n! C_n = \frac{1}{n+1} \binom{2n}{n} = \frac{(2n)!}{(n+1)! \, n!} Cn=n+11(n2n)=(n+1)!n!(2n)!
其中(n≥0)( n \geq 0 )(n≥0),且 (C0=1)( C_0 = 1 )(C0=1)。
前几项卡特兰数为:
C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,... C_0 = 1,\quad C_1 = 1,\quad C_2 = 2,\quad C_3 = 5,\quad C_4 = 14,\quad C_5 = 42,\quad C_6 = 132,\quad \dots C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,...
二、递推关系
卡特兰数满足以下递推公式:
C0=1,Cn+1=∑i=0nCiCn−i(n≥0) C_0 = 1,\quad C_{n+1} = \sum_{i=0}^{n} C_i C_{n-i} \quad (n \geq 0) C0=1,Cn+1=i=0∑nCiCn−i(n≥0)
也可以写成:
Cn=∑i=0n−1CiCn−1−i C_n = \sum_{i=0}^{n-1} C_i C_{n-1-i} Cn=i=0∑n−1CiCn−1−i
此外,还有更高效的线性递推形式:
Cn+1=2(2n+1)n+2Cn C_{n+1} = \frac{2(2n+1)}{n+2} C_n Cn+1=n+22(2n+1)Cn
三、卡特兰数的典型应用(组合解释)
卡特兰数出现在大量组合结构的计数问题中,例如:
-
合法括号序列 :
CnC_nCn 表示由 nnn 对括号组成的合法(即正确匹配)括号序列的个数。 -
二叉树的个数 :
CnC_nCn 表示有 nnn 个内部节点的不同构的满二叉树(或有 n+1n+1n+1 个叶节点的二叉树)的数目。 -
凸多边形三角剖分 :
将一个凸 (n+2)(n+2)(n+2)边形用不相交的对角线划分为三角形的方法数是 CnC_nCn。
-
Dyck 路径 :
从 (0,0)(0,0)(0,0) 到 (2n,0)(2n,0)(2n,0) 的路径,每步向上 (1,1)(1,1)(1,1) 或向下 (1,−1)(1,-1)(1,−1),且不穿过 x 轴下方的路径数为 CnC_nCn。
-
出栈序列 :
一个栈的进栈序列为 (1,2,...,n)( 1,2,\dots,n )(1,2,...,n),可能的出栈序列总数为 CnC_nCn。
-
非交叉划分 :
在圆上标出 2n2n2n个点,将其两两配对且连线不相交的方式数为 CnC_nCn。
四、生成函数
卡特兰数的普通生成函数 C(x)=∑n=0∞CnxnC(x) = \sum_{n=0}^{\infty} C_n x^nC(x)=∑n=0∞Cnxn 满足:
C(x)=1+xC(x)2 C(x) = 1 + x C(x)^2 C(x)=1+xC(x)2
解得:
C(x)=1−1−4x2x C(x) = \frac{1 - \sqrt{1 - 4x}}{2x} C(x)=2x1−1−4x
五、小结
为什么这么多问题都归结为卡特兰数?
因为它们共享以下组合结构特征
递归可分 :整体可分解为两个独立的子问题。
非交叉/不越界 :子结构之间不能"交错"或"穿透"。
平衡性 :如括号匹配中的左右平衡、路径中的上下步平衡。
一一对应:这些问题之间存在双射(bijection),即可以互相转换。
卡特兰数因其简洁的形式和广泛的应用,成为组合数学中的经典对象。如果你在算法、数据结构、离散数学或编程竞赛中遇到"合法配对"、"不交叉"、"不越界路径"等限制条件下的计数问题,很可能就与卡特兰数有关。