ハッシュ関数
ハッシュテーブルをO(1)検索の複雑性を達成することができます。
ハッシュ関数構築:良いハッシュ関数の設計の二つの基本原則、簡単な分布を計算+
1.ダイレクトアドレッシング方法
独自のキーは線形関数に対処して、F(キー)*キー+ bを=。しかし、我々は、キーワードの分布を知る必要があります。
2.デジタル分析
比較的多数のビットを処理するためのキーワード。キーハッシュアドレスの一部として抽出。
3. 平方取中法
ハッシュアドレスとして数桁の正方形のキー中間を取った後。
4.折りたたみ方法
キーがいくつかの部分に等しい数のビットに分割され、加算重畳これらの部品は、ハッシュアドレスとして、いくつかの長いを取るためにハッシュテーブルを押します。
私が滞在を除き5.
最も一般的に使用されます。ハッシュテーブル長m、F(キー)=キーMOD pは、pはmより少ないと等しいです。P選択は非常に重要であり、選挙が悪いハッシュ衝突する可能性があります。
衝突をハッシュするアプローチ:!キー1 = KEY2が、F(キー1)は、f(KEY2 == )、 ハッシュ衝突を。
1. - アドレス:競合のイベントは、限り、ハッシュテーブルは十分な大きさであるように、常に空のハッシュアドレスを見つけることができ、次の空のハッシュアドレスに行ってきました。
Fiの(キー)=(F(キー)+ DI)MOD P、ジ= 1、2、...、P-1の線形検出方法。
そのような直接比較ジブラインド値は、値ジ方式を変更することによって、例えばスタッキング問題、第二の検出方法を解決しようとするために、二乗しました。
Fiの(キー)=(F(キー)+で)MOD P = 1、2、-1 2、2、2、-2 2 、...、Q 2、Q 2 、Q <= P / 2
直接ランダム関数値DIと、ランダムの検出方法と呼ばれます。
Fiの(キー)=(F(キー)+ DI)MOD P、ランダム関数によって生成されたジ配列。
2.再ハッシュ関数法、ハッシュ関数は、複数の競合が発生した場合、ハッシュ関数への次の呼び出しが計算されます。最後に競合が低いかもしれません。
3.チェーンアドレス方式(方式ジッパー)、一般的に使用される方法。競合が記録紛争前の要素からチェーンへ、次いで、発生した場合、代わりにハッシュテーブルの一本鎖、格納された記録素子が、アドレスのレコードを使用して。
4.継続的にオーバーフローテーブルとの競合を記録するための共通のオーバーフロー領域の方法は、ハッシュ検索でない場合、オーバーフロー領域を見つけるために行く、別々に保存されます。比較的良好なハッシュ関数のため、競合解決のこの方法の高効率。
リスト:実装は、配列もリンクリストすることができ、要素を繰り返すことができることができます。(1)、O(n)を見つけるOを挿入します。
地図:キーと値のペア、キーのキーでは繰り返しません。
SET:重複を許可していません。達成するためにハッシュテーブル(またはバイナリ)、そうO(1)複雑度(又はO(LOGN))を見ます。
ハッシュテーブルの実装、要素の無秩序な配置は、O(1)を見て、二分探索木を使用して実装、比較的規則的要素に配置されている、O(LOGN)見えます。
各言語のハッシュマップ:
各言語のHashSet: