地図&コレクション

ハッシュ関数

ハッシュテーブルを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:

 

おすすめ

転載: www.cnblogs.com/chaojunwang-ml/p/11333207.html