[解決済み] ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選べばいいですか?
2022-04-26 13:50:39
質問
ハッシュテーブルとプレフィックスツリーのどちらかを選ばなければならない場合、どちらを選ぶべきかの判断材料は何でしょうか。私の素朴な考えでは、トライを使うと配列として保存されないので余計なオーバーヘッドがあるように思えますが、実行時間(最長キーが最長英単語と仮定した場合)については(上限との関係で)本質的に O(1) で済むと思われます。たぶん、最長の英単語は50文字くらい?
ハッシュテーブルは瞬時にルックアップできる インデックスを取得すれば . しかし、キーをハッシュ化してインデックスを取得するのは、50ステップ近くかかると思われます。
どなたか、もっと経験豊富な方の見解をお聞かせください。ありがとうございます。
どのように解決するのですか?
トライのメリット
基本中の基本です。
- 予測可能なO(k)のルックアップ時間(kはキーのサイズ)。
- ルックアップは、それがない場合はk時間未満で可能
- 順序付きトラバーサルをサポート
- ハッシュ関数が不要
- 削除が簡単
新しい操作方法です。
- キーの接頭辞を素早く調べたり、指定した接頭辞を持つすべてのエントリーを列挙したりすることができます。
リンク構造のメリット
- 共通の接頭辞が多数ある場合、それらが必要とするスペースを共有することができる。
- Immutableトライは構造を共有することができます。トライをその場で更新する代わりに、1つのブランチに沿ってのみ異なる新しいトライを構築し、他の場所では古いトライを指すようにすることができます。これは、並行処理や複数バージョンのテーブルを同時に使用する場合などに便利です。
- 不変の三角形は圧縮可能です。つまり サフィックス もハッシュコンシングすることで実現する。
ハッシュテーブルのメリット
- ハッシュテーブルってみんな知ってるよね?あなたのシステムにはすでに最適化された実装があり、ほとんどの用途でtriesより高速に動作します。
- キーは特別な構造を持つ必要はありません。
- 明らかなリンクトライ構造よりもスペース効率が良い( 下記のコメント参照 )
関連
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] JavaScriptでStackとQueueを実装するには?
-
[解決済み] 特定のキーがハッシュ内に存在するかどうかを確認する方法は?
-
[解決済み] Bashでハッシュテーブルを定義する方法は?
-
[解決済み] なぜクイックソートはマージソートより優れているのですか?
-
[解決済み] 木の深さと高さはどう違うのですか?
-
[解決済み】2分木と2分探索木の違いについて
-
[解決済み】広さ優先と深さ優先の比較
-
[解決済み] 緯度・経度・kmの簡単な計算方法は?
最新
-
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)とは具体的にどのような意味ですか?
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] 40 億の整数以外の整数を生成する。
-
[解決済み] 短縮URLの作成方法を教えてください。[クローズド]
-
[解決済み] GenerativeアルゴリズムとDiscriminativeアルゴリズムの違いは何ですか?[クローズド]
-
[解決済み] クレジットカードの番号からカードの種類を判別する方法は?
-
[解決済み] フラットな構造から効率的にツリーを構築する方法とは?
-
[解決済み] 時計回りに並べると?
-
[解決済み] 3つのスタックを持つ待ち行列を実装するには?
-
[解決済み] 配列から、和が指定された数に等しい要素の組を求めよ。