フェーズの概要(3) - なぜ我々は、ハッシュバイナリツリーを持っている必要があります

二分探索木は最大の特徴は、すぐに操作を見つけ、削除、挿入するために動的データ・セットのサポートです。

ハッシュテーブルはまた、これらの操作をサポートし、バイナリ検索ツリーよりも、これらの操作のハッシュテーブルは、より効率的で、時間計算量はO(1)です。

その効率的なハッシュテーブルので、その後、ハッシュテーブルは、バイナリツリーではない、それを完全に置き換えることができます。

か行われていないハッシュテーブルを使用する場所がないこと、それは、バイナリツリーでなければなりませんか?

 

ハッシュテーブルの挿入、削除、操作の時間計算量は非常に効率的なO(1)、一定のレベルを行うことができます。

二分探索木は、よりバランスのとれた状況、挿入、削除で、動作時間の複雑さがある検索O(LOGN)。

 

しかし、なぜ我々はそれを置き換えるために、ハッシュテーブルを二分木を完了することはできませんか?

 

A

出力データであることを注文した場合、データのハッシュテーブルは、障害を格納している、あなたはソートする必要があります。

二分探索木のために、我々はトラバーサルINORDERのみ必要、O(n)との時間複雑内とすることができる、出力データシーケンスは、注文しました。

 

二つ

ハッシュテーブルの多くを消費拡大が、ハッシュ衝突、不安定なパフォーマンスに直面したとき。

二分探索木のパフォーマンスが安定していないが、プロジェクトではあるが、最も一般的に使用されるバランスのバイナリ検索ツリーの性能は非常に安定し、時間計算量O(LOGN)で安定しています。

 

三つ

ハッシュテーブルルックアップ動作は、複雑さの一定レベルであるが、ハッシュの衝突があるため、実際の速度は、必ずしも(LOGN)を探してないかもしれないので、これは、LOGNより小さい必ずしも一定ではないので、速いO.よりも時間にもかかわらず、及び プラス時間のかかるハッシュ関数、バランスの取れたバイナリ効率よりも必ずしも高い探索木。

 

4つの

バイナリツリーより複雑なハッシュテーブルのルックアップを構築し、多くのことを検討します。例えば、ハッシュ関数の設計、競合解決、容量拡張、容量減少など。

固定、平衡二分探索木は、この問題のバランスを考慮する必要があり、この問題を解決するには、比較的成熟しています。

 

5

過度のハッシュ衝突を回避するために、ハッシュテーブルの負荷率がオープンアドレシングハッシュテーブルに基づいて、特に競合解消方法では、あまりにも多くのことができない、またはあなたには、いくつかのストレージスペースを無駄にします。ハッシュテーブルに優れたいくつかの点で、これらの点、平衡二分探索木を取ります。

 

だから、両者の間に矛盾が存在しないこと。私たちは、実際の使用では、使用するかを選択するために、特定のニーズの組み合わせを必要とします。

公開された113元の記事 ウォン称賛25 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_42006733/article/details/104640962
おすすめ