关于栈中出栈元素序列的总数即卡特兰数的理解

出栈序列总数

在栈这个数据结构中有一个结论:对于n个不同的元素进栈,将出栈顺序记录为一组元素序列,那么总共会有 1 n + 1 C 2 n n \frac{1}{n+1}C_{2n}^{n} n+11C2nn个不同的出栈顺序的元素序列。

这个结论的通俗理解(记忆)思路

借助平面几何的方法可以很好地理解、记忆、计算。首先n个元素进栈再出栈总共是2n个执行步骤,每个步骤看做直角坐标系上x轴的一个整数单位点。这2n个执行步骤无非就是两种:进栈、出栈,于是将这两种操作分别表示为y轴中的向上一格和向下一格。

显然,n个元素进栈和出栈这2n个操作其实就是向上走n格,和向下走n格,最终肯定会落在x轴上,即(2n,0)点。考虑选取2n步骤中的n步的组合数,可以知道总共可能存在 C 2 n n C_{2n}^{n} C2nn这么多种折线段。
直角坐标系中的表示
但是单纯这样不能保证随意的折线段是合法的出栈序列。现实中栈为空的时候不能再有元素出栈了,所以合法的出栈序列要保证在出栈时栈非空,在坐标系中体现为折线不能向下突破x轴,即当折线中节点在x轴上时,栈是空的,不能再出栈(向右下前进)。

那么所有情况的种数减去非法的情况数就得到了,出栈元素序列总是。
所以非法的情况数如何求呢?
非法的情况即上图中的C点,有一个巧妙的思路计算这种非法的情况数:将C点之后的折线段沿着y=-1翻折,发现这样会导致终点(E点)由原本落在x轴上变为落在了y=-1这条水平直线上。
翻折之后

此时纵观全图发现从起点(A点)到终点经过了n-1步向上,n+1步向下,于是这种情况数量应该有 C 2 n n − 1 C_{2n}^{n-1} C2nn1种。

于是栈中出栈元素序列的总数这个问题的最终答案即为 C 2 n n − 1 − C 2 n n C_{2n}^{n-1}-C_{2n}^{n} C2nn1C2nn,根据我们高中排列组合中学过的, C 2 n n − 1 = n + 2 n + 1 C 2 n n C_{2n}^{n-1}=\frac{n+2}{n+1}C_{2n}^{n} C2nn1=n+1n+2C2nn可以得到课本上的 1 n + 1 C 2 n n \frac{1}{n+1}C_{2n}^{n} n+11C2nn这个结果

参考

https://blog.csdn.net/qq_30115697/article/details/88906534
感谢作者的思路,对我理解帮助非常大!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值