リストの代わりに検索ツリーを使用したハッシュ


11

私はハッシュと二分探索木資料と格闘しています。そして、同じハッシュ値を持つエントリを格納するためにリストを使用する代わりに、バイナリサーチツリーを使用することも可能だと私は読んだ。そして、私は操作の最悪の場合と平均の場合の実行時間を理解しようとします

  1. insert
  2. find そして
  3. delete

価値があります。平均的なケース。リストに関しては改善されますか?


線形連鎖(つまり、線形リスト)を使用したハッシュテーブルのランタイムの厳密な分析にアクセスできる場合は、線形リストの平均コストがプラグインされている部分を、バランスのとれた検索ツリー実装の平均ケース結果で置き換えます。残りは力学です。(明らかに、それが役立ちます。)
ラファエル

回答:


4

リストの場合、挿入、検索、削除はそれぞれ、、ます。ソートされたリストは悪いです。バイナリ検索自体は、ソートされた配列に対するもので、操作は、、ます。「挿入」および「削除」操作が必要な場合は、バイナリ検索以上のものが必要です。O(1)O(n)O(n)O(n)O(logn)O(n)

おそらくバイナリ検索ツリーのようなものが必要でしょう。適切な用語を知っていれば、それに関するリファレンスを見つけるのがはるかに簡単になります。これらの操作はしている使用して実装するための、例えば、最悪の場合の時間AVL木赤黒木O(logn)


1
それはすべて正しいですが、提起された質問にどのように答えるかはわかりません。
rgrig

当時はまったく同じ問題はありませんでした。(編集履歴にも元の質問はありません。奇妙です。)回答を更新することはできますが、Gillesの場合は冗長になります。
jmad

4

最悪の場合、たまたま同じハッシュ値を持つ要素のみを保存すると、ハッシュテーブルはすべての要素を同じバケットに保存します。あなたはバケツの要素を格納するためのリストを使用する場合は、検索で最悪の場合には、(ここで、、テーブル内の要素の数である-より一般的には、の要素の数が最大のバケットです)、テーブルにない要素を検索する場合は、リスト全体をトラバースする必要があるためです。ポジティブルックアップ(要素が存在することがわかっている場合)も同じ複雑さです。リストの最後の要素を検索する場合は、が必要です。削除も同じように複雑です(が必要です)O(n)nnn1=Θ(n)n1最後の要素を削除している場合のルックアップ)。挿入は、既存の要素を確認する必要がある場合は、重複を許可する場合はです(この場合、リストの先頭に要素を挿入できます)。O(n)O(1)

バランス二分探索木、最悪の場合の複雑さがに縮小されるバランスの取れた探索木の深さは均衡の定義によって木の大きさに対数的に成長するため、。O(logn)

データの平均分布では、要素は異なるバケットに分散しており、衝突はほとんどないため、衝突の場合に使用されるデータ構造に関係なく、複雑度は近くなります。O(1)

要素がすべて同じバケットにある、敵対的に選択されたデータ分布でのランダムルックアップでは、トラバースする必要があるリストの平均長はであるため、この状況での平均ルックアップ複雑度はです。ツリーでは、最悪の場合と同様に、平均はです。N / 2 Θ N Θ ログN nn/2Θ(n)Θ(logn)


2
「データの平均分布あり」は、「十分にランダムなハッシュ関数を使用して」と読みます
-JeffE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.