[解決済み] 3つのスタックを持つ待ち行列を実装するには?
質問
あるアルゴリズムの本で、こんな質問を見かけました。 アルゴリズム 第4版 by Robert Sedgewick and Kevin Wayne)で見つけました。
<ブロッククオート3つのスタックを持つキュー 3つのスタックを持つキューを実装し、各キューの操作にかかるスタック操作の数が一定(最悪ケース)になるようにします。警告:難易度が高いです。
2つのスタックを持つ待ち行列を作る方法は知っているのですが、3つのスタックを持つ解答が見つかりません。何かアイデアはありますか?
(あ、これは宿題ではありません :) )
どのように解決するのですか?
概要
- 6個のスタックに対してO(1)のアルゴリズムが知られている
- 3つのスタックに対してO(1)のアルゴリズムが知られているが、遅延評価を用いており、これは実際には余分な内部データ構造を持つことに相当するため、解決策にはならない。
- Sedgewick の近くにいる人々は、元の質問のすべての制約の範囲内で 3 つのスタックのソリューションを知らないことを確認しました。
詳細情報
このリンクには、2つの実装があります。 http://www.eecs.usma.edu/webs/people/okasaki/jfp95/index.html
そのうちの1つは3つのスタックでO(1)ですが、遅延実行を使用しており、実際には余分な中間データ構造(クロージャ)を生成します。
もうひとつはO(1)ですが、SIXスタックを使用します。しかし、これは遅延実行なしで動作します。
UPDATE: 岡崎の論文はこちらです。 http://www.eecs.usma.edu/webs/people/okasaki/jfp95.ps で、遅延評価ありのO(1)版では実際には2スタックしか使っていないようです。問題は、それが本当に遅延評価に基づいているかどうかです。問題は、それが遅延評価なしの3スタックアルゴリズムに変換できるかどうかです。
UPDATE: 別の関連するアルゴリズムは、7th Annual Conference on Computing and Combinatoricsに掲載されたHolger Petersenによる論文 "Stacks versus Deques" で説明されています。この論文はGoogleブックスで見ることができる。225-226ページをご覧ください。しかし、このアルゴリズムはリアルタイムシミュレーションではなく、3つのスタック上のダブルエンド待ち行列の線形時間シミュレーションです。
gusbro: 数日前に @Leonel が言ったように、Sedgewick 教授が解決策を知っているか、あるいは何かの間違いかどうかを確認するのがフェアだと思ったのです。そこで私は彼に手紙を書きました。彼は基本的に、3つのスタックと課された他の制約(遅延評価を使わないなど)を使ったアルゴリズムは知らないと言っていました。彼は、6個のスタックを使うアルゴリズムは知っていました。だから私は、問題はまだアルゴリズムを見つける(または1つが見つからないことを証明する)ために開いていると思います。
関連
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] JavaScriptでStackとQueueを実装するには?
-
[解決済み] クレジットカードの番号からカードの種類を判別する方法は?
-
[解決済み] 2次元の配列を回転させる方法は?
-
[解決済み】広さ優先と深さ優先の比較
-
[解決済み] 行または列に 0 が含まれる場合、行列のすべてのセルに 0 を設定します。
-
[解決済み] 2^nとn*2^nは同じ時間複雑性か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] 地図上のA地点からB地点への道順を計算するアルゴリズムは?
-
[解決済み] 素数かどうかを判断するのに、なぜ平方根まで確認するのか?
-
[解決済み] フラットな構造から効率的にツリーを構築する方法とは?
-
[解決済み] 時計回りに並べると?
-
[解決済み] 円形のデータの集合の平均はどのように計算するのですか?[クローズド]
-
[解決済み] ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選べばいいですか?
-
[解決済み] 良いハッシュ関数とは?
-
[解決済み] 3つのスタックを持つ待ち行列を実装するには?