- 栈【2003NOIP普及组 catalan数概念】
谈谈自己对catalan数的理解,收集与catalan数相关的题目
- @ 2025-12-6 21:44:25
卡特兰数(Catalan Numbers)是组合数学中一个非常优美且出现频率极高的数列。它的应用场景之广,甚至被称为“组合数学中的斐波那契数列”。
数列的前几项是: (对应 )
下面我将通过一个经典的 “格路模型”(Dyck Paths),用启发式的方法带你推导它的通项公式和递推公式。
核心场景:格路问题
问题描述: 假设在一个平面直角坐标系中,你要从原点 走到 。
- 每一步只能向右(R)或向上(U) 走 1 个单位。
- 限制条件:任何时候,向上的步数不能超过向右的步数。也就是说,路径不能越过 这条对角线(可以触碰,但不能穿过走到上方)。
求:满足条件的合法路径有多少条?这个数量就是 。
一、 通项公式的推导(折线反射法)
目标:找到 的来源。
1. 计算所有路径(不考虑限制)
不管合不合法,从 走到 一共需要走 步,其中 步向右, 步向上。 这相当于在 个位置中选 个位置放“向右”的操作。 总路径数 = 。
2. 剔除非法路径
什么是“非法路径”? 根据规则,路径不能越过 。如果我们把 上方的那条线 画出来,一旦路径触碰或穿过了 ,它就是非法的。
3. 启发式魔法:反射原理(Reflection Principle)
这是组合数学中最天才的一步。
- 假设有一条非法路径,它必然在某一点第一次触碰到 (红线)。
- 记这个触碰点为 。
- 我们将从起点 到点 这一段路径,关于直线 做对称(反射)。
观察发生了什么:
- 起点 关于 对称后的点是 。
- 由于 在对称轴上,它保持不变。
- 原路径中“从 到 ”变成了“从 到 ”。
- 剩下的部分(从 到终点 )保持不变。
结论: 任何一条从 到 的非法路径,都可以通过这个反射操作,一一对应地转换成一条从 到 的路径。
4. 计算非法路径数量
现在问题变成了:从 走到 有多少条路径?
- 横坐标距离: 步(向右)。
- 纵坐标距离: 步(向上)。
- 总步数: 步。
非法路径数 = (或者 ,两者相等)。
5. 得出通项公式
合法路径 = 总路径 - 非法路径
让我们化简一下:
$$\begin{aligned} C_n &= \frac{(2n)!}{n!n!} - \frac{(2n)!}{(n-1)!(n+1)!} \\ &= \frac{(2n)!}{n!n!} - \frac{(2n)! \times n}{n! \times n \times (n-1)! \times (n+1)} \quad (\text{分母凑阶乘}) \\ &= \frac{(2n)!}{n!n!} - \frac{(2n)! \times n}{n!n!(n+1)} \\ &= \frac{(2n)!}{n!n!} \left( 1 - \frac{n}{n+1} \right) \\ &= \binom{2n}{n} \times \frac{1}{n+1} \end{aligned} $$最终通项公式:
二、 递推公式的推导(结构分解法)
目标:理解 的来源。
我们依然使用格路模型,或者改用更直观的括号匹配或二叉树模型。这里用“第一步分解法”来推导。
1. 定义问题的子结构
我们要计算 对括号(或 的格路)的合法排列数 。
2. 寻找“第一次回归点”
考虑一条从 到 的合法路径。
- 第一步必然是向右(R),否则就越界了。
- 这条路径最终会到达 ,所以它必然会在某个时刻第一次回到对角线 (除了起点外)。
- 假设这个“第一次回归点”发生在点 处。这里 可以是 到 的任意整数。
3. 路径被切分为三部分
我们可以把整个路径拆解为:
- 第一步:向右(R),从 。
- 中间段:从 到 。
- 关键点:因为是在 处才第一次回到对角线,所以中间这一段路径绝对不能触碰 。
- 这相当于在 下方平移了一个小型的 Dyck Path。
- 这一段的规模是 对步数(从 到 ,跨度为 )。
- 方案数:。
- 回归步:向上(U),从 。
- 剩余段:从 到 。
- 这是一段全新的、独立的合法路径。
- 剩下的距离是 。
- 方案数:。
4. 乘法原理与加法原理
对于固定的 (即固定的第一次回归点),方案数为:
$$\text{中间段方案} \times \text{剩余段方案} = C_k \times C_{n-1-k} $$因为“第一次回归点”可能出现在 ,对应 。 我们需要把所有可能情况加起来。
最终递推公式:
(注:这就是著名的卡特兰卷积形式)
三、 总结
1. 通项公式
用于直接计算第 项。
$$C_n = \frac{1}{n+1}\binom{2n}{n} = \frac{(2n)!}{n!(n+1)!} $$2. 递推公式
卷积形式(用于理解结构):
$$C_n = C_0 C_{n-1} + C_1 C_{n-2} + \dots + C_{n-1} C_0 $$快速计算形式(用于编程打表,由通项推导而来):
3. 常见应用场景(映射)
如果你在问题中看到以下结构,大概率就是卡特兰数:
- 括号匹配: 对括号的合法匹配方案。
- 出栈序列:进栈顺序 ,求合法的出栈序列数。
- 二叉树计数: 个节点能构成多少种不同形态的二叉树。
- 凸多边形三角剖分: 边形剖分成三角形的方法数。
希望这个推导过程能让你从直观上“看见”卡特兰数的生成逻辑!
0 条评论
信息
- ID
- 696
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 12
- 已通过
- 4
- 上传者