[解決済み] データ構造:挿入、削除、包含、ランダム要素の取得、すべてO(1)
2022-11-26 08:58:39
質問
面接でこの問題を出されました。 あなたならどう答えますか?
以下の操作をO(1)時間で提供するデータ構造を設計せよ。
- 挿入
- 削除
- 含む
- ランダムな要素を取得する
どのように解決するのですか?
ハッシュテーブルHと配列Aからなるデータ構造を考える。ハッシュテーブルのキーはデータ構造中の要素であり、値は配列中の位置である。
- insert(value):値を配列に追加し、Aにおけるそのインデックスをiとし、H[value]=iとする。
- remove(value)を実行します。Aの値を含むセルをAの最後の要素に置き換える。配列Aのインデックスmで最後の要素をdとし、iを削除する値の配列内のインデックスであるH[value]とする。A[i]=d, H[d]=i とし、配列のサイズを1つ小さくし、Hから値を削除する。
- contains(value): H.contains(value)を返す。
- getRandomElement(): let r=random(current size of A). return A[r].
配列は自動でサイズを大きくする必要があるので、要素を追加するのにO(1)の償却が必要になりますが、それでもいいんでしょう。
関連
-
[解決済み] 補助データ構造とは何ですか?
-
[解決済み] フュージョンツリーを理解する?
-
[解決済み】リンクリストのループを検出する方法は?
-
[解決済み】2分木と2分探索木の違いについて
-
[解決済み] lenses, fclabels, data-accessor - 構造体アクセスと突然変異のためのどのライブラリが良いか
-
[解決済み] Clojureでリストが特定の値を含むかどうかをテストする
-
[解決済み] メモリ上でhexile/hexグリッドを表現するにはどうしたらよいですか?
-
[解決済み] 二項探索木トラバーサル戦略(Preorder, Postorder, Inorder)をいつ使うか?
-
[解決済み] ハッシュテーブルに対するバイナリサーチツリーの優位性
-
[解決済み] ヒープを使いたいのはどんなとき?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】最小スパニングツリー。カットプロパティとは何ですか?
-
[解決済み] 補助データ構造とは何ですか?
-
[解決済み] なぜバイナリサーチツリーでHashtableを実装するのか?
-
[解決済み] フュージョンツリーを理解する?
-
[解決済み] 償却期間一定
-
[解決済み】2分木と2分探索木の違いについて
-
[解決済み] lenses, fclabels, data-accessor - 構造体アクセスと突然変異のためのどのライブラリが良いか
-
[解決済み] メモリ上でhexile/hexグリッドを表現するにはどうしたらよいですか?
-
[解決済み] 二項探索木トラバーサル戦略(Preorder, Postorder, Inorder)をいつ使うか?
-
[解決済み] ハッシュテーブルに対するバイナリサーチツリーの優位性