卡特兰数及相关应用场景

卡特兰数(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


三、卡特兰数的典型应用(组合解释)

卡特兰数出现在大量组合结构的计数问题中,例如:

  1. 合法括号序列
    CnC_nCn 表示由 nnn 对括号组成的合法(即正确匹配)括号序列的个数。

  2. 二叉树的个数
    CnC_nCn 表示有 nnn 个内部节点的不同构的满二叉树(或有 n+1n+1n+1 个叶节点的二叉树)的数目。

  3. 凸多边形三角剖分

    将一个凸 (n+2)(n+2)(n+2)边形用不相交的对角线划分为三角形的方法数是 CnC_nCn。

  4. 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。

  5. 出栈序列

    一个栈的进栈序列为 (1,2,...,n)( 1,2,\dots,n )(1,2,...,n),可能的出栈序列总数为 CnC_nCn。

  6. 非交叉划分

    在圆上标出 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),即可以互相转换。

卡特兰数因其简洁的形式和广泛的应用,成为组合数学中的经典对象。如果你在算法、数据结构、离散数学或编程竞赛中遇到"合法配对"、"不交叉"、"不越界路径"等限制条件下的计数问题,很可能就与卡特兰数有关。

相关推荐
CoderYanger38 分钟前
A.每日一题——3625. 统计梯形的数目 II
java·算法·leetcode·职场和发展
松涛和鸣40 分钟前
24、数据结构核心:队列与栈的原理、实现与应用
c语言·开发语言·数据结构·学习·算法
豐儀麟阁贵44 分钟前
9.1String类
java·开发语言·算法
三炭先生1 小时前
计算机视觉算法--第一章:概述
人工智能·算法·计算机视觉
唯道行1 小时前
计算机图形学·21 梁友栋-Barsky直线裁剪算法与三维直线裁剪
人工智能·算法·机器学习·计算机视觉·计算机图形学·opengl
魂梦翩跹如雨1 小时前
Java BigDecimal与RoundingMode的用法总结
java·算法
little~钰1 小时前
线段树和扫描线结合
数据结构·算法
CoderYanger1 小时前
动态规划算法-简单多状态dp问题:11.按摩师
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
秋深枫叶红1 小时前
嵌入式第二十八篇——数据结构——队列
数据结构·学习·算法