|
|
卡特兰数与出栈队列的关系
卡特兰数常用于计算栈操作中的合法出栈序列数量。具体问题:有 n 个元素按顺序入栈,求有多少种不同的出栈序列?答案是第 n 个卡特兰数 C_n,其公式为:
- C_n = (1/(n+1)) * C(2n, n)
复制代码
其中 C(2n, n) 是组合数。
核心推导思路
总操作数为 2n(n 个入栈和 n 个出栈),所有排列组合数为 C(2n, n)。但需排除不合法序列,即任意前缀中出栈次数不能超过入栈次数。
几何网格法(路径翻折)
- 模型:入栈视为向右走一步(x 轴),出栈视为向上走一步(y 轴)。从 (0,0) 走到 (n,n),路径不得触碰“死亡线” y = x + 1(即出栈次数时刻不能超过入栈次数)。
- 合法路径数即卡特兰数。
- 翻折规则:对于不合法路径,找到首次触碰 y = x + 1 的点,将该点之后的路径沿 y = x + 1 镜像翻折。翻折后终点变为 (n-1, n+1),因此不合法路径与从 (0,0) 到 (n-1, n+1) 的路径一一对应,数量为 C(2n, n-1)。
- 合法路径数 = 总路径数 - 不合法路径数 = C(2n, n) - C(2n, n-1),化简即得卡特兰数公式。
代数序列法(符号翻折)
- 模型:入栈记为 +1,出栈记为 -1。序列由 n 个 +1 和 n 个 -1 组成,任意前缀和不能为负数。
- 翻折规则:对于不合法序列,找到首次前缀和为 -1 的位置,将该前缀所有符号取反。取反后序列变为 n+1 个 +1 和 n-1 个 -1,从而与含 n+1 个入栈和 n-1 个出栈的序列一一对应,数量为 C(2n, n-1)。
- 同样得到合法序列数 = C(2n, n) - C(2n, n-1)。
总结
这两种翻折法均证明了卡特兰数与出栈序列的对应关系,核心是双射原理将不合法序列映射到易计数的集合。最终公式为:
- C_n = C(2n, n) - C(2n, n-1) = (1/(n+1)) * C(2n, n)
复制代码
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|