この質問は、スタック操作ごとに償却時間で2つのキューを使用してスタックをシミュレートできるかどうかに関する既存の質問に触発されています。答えは不明のようです。以下に、より具体的な質問を示します。これは、すべてのPUSH操作が最初に実行され、次にすべてのPOP操作が実行される特殊なケースに対応しています。最初に空の2つのキューを使用して、要素のリストをどれだけ効率的に逆にすることができますか?法的操作は次のとおりです。
- 入力リストの次の要素をキューに入れます(どちらかのキューの末尾に)。
- どちらかのキューの先頭にある要素をデキューし、再度(いずれかのキューの末尾に)エンキューします。
- いずれかのキューの先頭にある要素をデキューし、出力リストに追加します。
入力リストが要素で構成されている場合、逆の出力リスト[N、N-1、...、2、 1]振る舞いますか?O(N)よりも速く成長するという証明は、元の質問を否定的に解決するため、特に興味深いでしょう。
更新(2011年1月15日):提出された回答とそのコメントに示されているように、問題はで解決できます。\ Omega(N)の下限は自明です。これらの境界のいずれかを改善できますか?