一道栈的题目
最近做一道有关栈的题目,题目是这样的:
若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列?
这道题用递推可以算出来,假设第k个数进栈,设f(k)表示k个数的总出栈序列数,则它前面的k-1个数有f(k-1)种出栈序列,它后面有f(5-k)种出栈序列,由乘法原理,这时有f(k-1)*f(5-k)种。由于k取不同值的情况是相互独立的,所以由加法原理,总共有f(5)=f(0)*f(4)+f(1)*f(3)+f(2)*f(2)+f(3)*f(1)+f(4)*f(0)种。让f(0)=1,f(1)=1。最后算出答案42。
于是问题可以推广为:
一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?
在网上查了一下答案才发现这个问题在组合数学中是非常有名的卡特兰数,于是就学习了一下相关的知识。
卡特兰数
维基百科的定义: