【发布时间】:2011-06-25 18:39:37
【问题描述】:
任何人都可以解释算法以在仅使用单个堆栈时生成可能的排列,并且推送和弹出是唯一允许的操作。 搜索了很多,但没有明确的答案。 这种排列的总数也由加泰罗尼亚数字给出。但我没有得到证明。请尽可能解释一下。
谢谢!!
【问题讨论】:
-
我不明白“单栈”的要求。如果我使用一个额外的数据结构,它不是一个“堆栈”,而是一个“数组”或“队列”或“列表”。会这样吗?我猜这是不允许的。但在那种情况下,我不明白这怎么可能。为了检索堆栈中深度
n的元素,您必须弹出并存储位于其顶部的n元素,从而需要额外的O(n)内存。我错过了什么吗? -
另外,可以使用语言级递归来实现它,这意味着第二个堆栈将隐式作为嵌套函数调用的本地上下文的“堆栈”存在.这是否允许?
-
我猜这是关于递归的一些奇怪的作业? 编辑哈哈奥黛丽,你打出来的,而我正在做同样的事情。
-
排列应该如何表示?它是在运行时固定的还是动态指定的?应该如何处理输出?是一一发送到只读输出队列中,还是简单地存储在堆栈中?另外如何指定输入?它是否再次预加载到堆栈中?允许多少暂存内存?
-
单栈是指只允许推送和便便操作。输入采用队列的形式,如 1 2 3 4 5,一旦元素被弹出,它就会被发送到输出队列并且不能被推回。
标签: algorithm stack permutation catalan