私はハッシュと二分探索木資料と格闘しています。そして、同じハッシュ値を持つエントリを格納するためにリストを使用する代わりに、バイナリサーチツリーを使用することも可能だと私は読んだ。そして、私は操作の最悪の場合と平均の場合の実行時間を理解しようとします
insert
、find
そしてdelete
価値があります。平均的なケース。リストに関しては改善されますか?
私はハッシュと二分探索木資料と格闘しています。そして、同じハッシュ値を持つエントリを格納するためにリストを使用する代わりに、バイナリサーチツリーを使用することも可能だと私は読んだ。そして、私は操作の最悪の場合と平均の場合の実行時間を理解しようとします
insert
、 find
そしてdelete
価値があります。平均的なケース。リストに関しては改善されますか?
回答:
リストの場合、挿入、検索、削除はそれぞれ、、ます。ソートされたリストは悪いです。バイナリ検索自体は、ソートされた配列に対するもので、操作は、、ます。「挿入」および「削除」操作が必要な場合は、バイナリ検索以上のものが必要です。
おそらくバイナリ検索ツリーのようなものが必要でしょう。適切な用語を知っていれば、それに関するリファレンスを見つけるのがはるかに簡単になります。これらの操作はしている使用して実装するための、例えば、最悪の場合の時間AVL木と赤黒木。
最悪の場合、たまたま同じハッシュ値を持つ要素のみを保存すると、ハッシュテーブルはすべての要素を同じバケットに保存します。あなたはバケツの要素を格納するためのリストを使用する場合は、検索で最悪の場合には、(ここで、、テーブル内の要素の数である-より一般的には、の要素の数が最大のバケットです)、テーブルにない要素を検索する場合は、リスト全体をトラバースする必要があるためです。ポジティブルックアップ(要素が存在することがわかっている場合)も同じ複雑さです。リストの最後の要素を検索する場合は、が必要です。削除も同じように複雑です(が必要です)最後の要素を削除している場合のルックアップ)。挿入は、既存の要素を確認する必要がある場合は、重複を許可する場合はです(この場合、リストの先頭に要素を挿入できます)。
バランス二分探索木、最悪の場合の複雑さがに縮小されるバランスの取れた探索木の深さは均衡の定義によって木の大きさに対数的に成長するため、。
データの平均分布では、要素は異なるバケットに分散しており、衝突はほとんどないため、衝突の場合に使用されるデータ構造に関係なく、複雑度は近くなります。
要素がすべて同じバケットにある、敵対的に選択されたデータ分布でのランダムルックアップでは、トラバースする必要があるリストの平均長はであるため、この状況での平均ルックアップ複雑度はです。ツリーでは、最悪の場合と同様に、平均はです。N / 2 Θ (N )Θ (ログN )