数据结构中出栈序列的个数算法

数据结构中出栈序列的个数算法

最近在刷数据结构题的过程中遇到这样一个问题:

若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列
在查看了一些这个知识领域的前辈们讲解之后,在这里总结一下我学到的东西,虽然最后的公式简单,但是为了理解原理我想写在这里以助于我之后用到或者可以帮到其他人。
原理解释:
卡特兰数的一个代表例子f(5)=42
出栈方式数量的题可以这么理解:
设n个数出栈方式数量为f(n)
因为入栈的顺序是确定的,下标记为1,2,3…n
设最后一个出栈的是第k个数,则说明k之前的k-1个数先完成进栈,有f(k-1)种方式
然后k之后的n-k个数再完成进栈出栈,有f(n-k)种方式
最后第k个数出栈,这时就有f(k-1)*f(n-k)种方式
而每个数都有可能是最后出栈的
所以有
f(n)=f(0)*f(n-1)+f(1)*f(n-2)+…+f(k-1)*f(n-k)+…+f(n-1)*f(0)
上面f(0)=1是为了写成统一式:
在这里插入图

由上式的通项就是卡特兰数f(n)=C(n,2n)/n+1

上述就是整个问题解释的原理,是借鉴了前辈的理论解释,如果有人需要,希望有所帮助。

你可能感兴趣的:(数据结构,算法)