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