首页  编辑  

堆栈出入问题

Tags: /超级猛料/Alogrith.算法和数据结构/乱七八糟/   Date Created:

编号为1,2,3,4,5,6的六个数,顺序压入堆栈,可能的出栈序列有多少种?

作者:kingbirg <kingbirg@163.com>

解:将所有可能的操作过程用op(1,2,...,n)表示。(n=6)

   则op(1,2,...,n)只可能是这样一个序列:

   push 1

   op(2,3,...,k)

   pop 1

   op(k+1, k+2, ..., n)

   这里,k可以是1, 2, ..., n。

   根据数学上的乘法原理,可知op(1,2,...,n)的可能性有:

   count_op(n) = for (k = 1; k <= n; ++k) count_op(k-1)*count_op(n-k);

所以:// 以下count_op简记为op

   op(0) = 1

   op(1) = 1

   op(2) = op(0)*op(1) + op(1)*op(0) = 2

   op(3) = op(0)*op(2) + op(1)*op(1) + op(2)*op(0) = 5

   op(4) = op(0)*op(3) + op(1)*op(2) + op(2)*op(1) + op(3)*op(0) = 14

   op(5) = op(0)*op(4) + op(1)*op(3) + op(2)*op(2) + op(3)*op(1) +

op(4)*op(0) = 42

   op(6) = op(0)*op(5) + op(1)*op(4) + op(2)*op(3) + op(3)*op(2) +

op(4)*op(1) + op(5)*op(0) = 132