这个问题的灵感来自于一个现有的问题,即是否可以在每个堆栈操作的摊销时间中使用两个队列来模拟堆栈。答案似乎是未知的。这是一个更具体的问题,与特殊情况相对应,在特殊情况下,首先执行所有PUSH操作,然后执行所有POP操作。使用两个最初为空的队列如何有效地反转N个元素的列表?合法操作是:
- 使输入列表中的下一个元素入队(到任一队列的尾部)。
- 将元素从任一队列的开头出队,然后再次入队(到任一队列的尾部)。
- 使任一队列开头的元素出队,并将其添加到输出列表。
如果输入列表包括元素,生成反向输出列表[ N ,N - 1 ,...所需的最小操作数是多少?。。,2 ,1 ]的行为?证明它比O (N )增长快的证据将特别有趣,因为它将解决否定的原始问题。
更新(2011年1月15日):问题可以在,如提交的答案和他们的评论中所示;Ω (N )的下限很小。这些界限能否改善?
澄清一下:通过“任一队列中的最后一个元素”,您是指队列开头的元素吗?
—
彼得·泰勒
@Peter:是的,谢谢您的澄清。我已经编辑了问题。
—
mjqxxxx 2011年
输入和输出列表都是堆栈吗?如果是这样,那么n个op1(到同一队列)后跟n个op3,是否相反?我想我一定错过了一些重要的东西。
—
jbapple 2011年
@jbapple:不,它们不是堆栈。您需要以与从输入列表中读取的相反顺序将元素写入输出列表。
—
mjqxxxx 2011年