堆叠进出

时间:2009-11-29 07:56:06

标签: stack

n个不同的元素,

已经知道每个元素被推入的顺序。

弹出订单可以有多少种不同的组合?

修改

事实上我知道有2n!/(n + 1)n!^ 2组合,但为什么呢?

3 个答案:

答案 0 :(得分:1)

只能在一个订单中弹出一个堆栈 - 与按下元素的顺序相反。

答案 1 :(得分:1)

假设您的元素被称为A,B,C,......并按此顺序推送。

设P(X)表示“推X”而O(X)表示“Pop X”

设N为元素数。

那么pop命令是什么?

当N = 1时的可能性:P(A)O(A)。 (即“A”)

当N = 2时的可能性:P(A)P(B)O(B)O(A)。 (“BA”)P(A)O(A)P(B)O(B)。 ( “AB”)

当N = 3时的可能性:ABC和BAC(从上面,然后是P(C)O(C)。)CBA。 (来自P(A)P(B)P(C)O(C)O(B)O(A)。)但 CAB,因为如果“C”首先脱落,它必须最后一次,所以还没有其他任何事情发生,所以他们只能按照BA的顺序离开。

从该模式构建,你应该能够构建和解决一个递归关系,给出你需要的答案。

答案 2 :(得分:0)

好一个Eric。然而,当我尝试使用ABC时,我有4种可能性,ABC,BAC,BCA和CBA。

遗憾的是,提出的公式并不清楚,因为我不能让n = 3从上面所写内容的简单解释中给出4的答案。

归纳似乎是证明公式的答案(因为通常情况下,问题的形式是“证明...是由公式给出的......”)。

上述四种可能性中存在一定的对称性,这让我觉得提出答案可能并不太难。

编辑:实际上,我们不能获得ACB吗? AaBCcb。大写字母是push,小写是pop。所以,有5种可能性,CAB肯定是不可能的。