卡特兰数及相关应用场景

卡特兰数(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),即可以互相转换。

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

相关推荐
tmlx3I0816 分钟前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-15 分钟前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~30 分钟前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa05103038 分钟前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH1 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
hurrycry_小亦1 小时前
洛谷题目:P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk 题解(本题简)
算法
KJ_BioMed2 小时前
从PDB到高亲和力分子:De novo生成式计算化学Pipeline剖析
算法·生物医药·生物科研·科研干货·化合物设计
一个王同学3 小时前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm
旖-旎4 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划
变量未定义~5 小时前
单调栈+倍增思想 皇家守卫【算法赛】、单调队列 附近最小
算法