火车进出栈问题(Catalan数)

Posted tedukuri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了火车进出栈问题(Catalan数)相关的知识,希望对你有一定的参考价值。

火车进出栈问题即:

一个栈(无穷大)的进栈序列为 1,2,3,4,...,n 求有多少个不同的出栈序列?

将问题进行抽象, 假设‘+‘代表进栈, 则有‘-‘代表出栈

那么如果进栈序列为123, 则:

+ + + - - - 将1, 2, 3压入栈后再将3, 2, 1弹出 得到出栈序列为321

同样, + - + - + - 得到出栈序列为123

上面所述的均为合法进出栈的序列 可发现规律: 序列中 + 的个数等于 - 的个数

但是如 + - - + +  - 这样的序列, 在栈为空时仍进行弹出操作的, 为非法序列

进一步将 + - 序列抽象到平面直角坐标系中, + 代表向右走一格, -代表向上走一格, 可知y = x直线下方的序列均为合法序列, 如下图所示

 

技术图片

 

到此, 火车进出栈问题已经转化为单调路径的问题

推导出公式:

 技术图片

 

即得出栈序列的总数

 

以上是关于火车进出栈问题(Catalan数)的主要内容,如果未能解决你的问题,请参考以下文章

Catalan数与出栈顺序个数,Java编程模拟

Catalan数

Catalan数

codevs 1086 栈(Catalan数)

洛谷P1044 栈(Catalan数)

Catalan number (卡特兰数)