この回答では、TAoCP Vol 3、Ch 6.4の一部を要約しています。
我々は、値のセットがあると仮定、N我々は、アレイに格納したいのAサイズのM。ハッシュ関数hを使用します:V → [ 0 .. M ) ; 一般的に、M « | V | 。α = nと呼ぶVnAmh :V→ [ 0 .. M)M≪ | V|負荷率のAを。ここでは、自然なm=Mを仮定します。実用的なシナリオでは、我々は持っているメートルの«Mは、しかし、とまでマッピングする必要がありメートル自分自身を。α = nmAm = Mメートル« Mm
最初の観測は、が均一な特性¹を持っている場合でも、同じハッシュ値を持つ2つの値の確率が高いということです。これは本質的に悪名高い誕生日のパラドックスの一例です。したがって、通常は競合に対処する必要があり、O(1 )最悪の場合のアクセス時間の希望を放棄できます。hO (1 )
しかし、平均的なケースはどうですか?すべてのキーが同じ確率で発生すると仮定します。チェックされたエントリの平均数C S n(成功した検索)または。C U n(検索の失敗)は、使用される競合解決方法によって異なります。[ 0 .. M)CSnCうんn
連鎖
すべての配列エントリには、リンクリスト(の先頭へのポインター)が含まれます。予想されるリストの長さは短い()衝突する可能性が高い場合でも。最後に、我々が得る
C S N ≈1+αをnm
これは、テーブル内にリストを(部分的または完全に)格納することでわずかに改善できます。
CSn≈ 1 + α2 そして Cうんn≈ 1 + α22。
線形探査
(それぞれの値を検索する。)挿入するとき、位置確認
時間(V )、H (V )- 1 、... 、0 、M - 1 、... 、H (V )+ 1
をこの順に空の位置まで(RESP 。V)発見されました。利点は、ローカルで二次データ構造なしで作業することです。しかし、平均アクセス数は、のために発散α → 1:
C S N ≈ 1v
h (v )、h (v )− 1 、… 、0 、m − 1 、… 、h (v )+ 1
vα → 1
以下のために
α<0.75、しかし、パフォーマンスがchaining²に匹敵します。
CSn≈ 12( 1 + 11 - α) そして Cうんn≈ 12( 1 + (11 - α)2)。
α < 0.75
ダブルハッシュ
線形探査に似ていますが、検索ステップサイズはと互いに素な2番目のハッシュ関数によって制御されます。正式な導出は与えられていないが、経験的な観察が示唆された
C SをN ≈ 1M
CSn≈ 1αln(11 - α) そして Cうんn≈ 11 - α。
テーブルから要素を削除したりテーブルを拡張したりすると、それぞれの方法で難易度が異なることに注意してください。
O (1 )αh
h
Hashtable