コンセプトに基づいてハッシュテーブル(ハッシュテーブル)

ハッシュとは何ですか

はじめに:我々は配列を知る場合、要素にアクセスするための配列要素のインデックス値を使用するが、費やされる時間はO(1)、ハッシュ法の中核である配列要素の数n、とは関係ありません私は思いました。

ハッシュ法:キー値Kには、特定の関数H(K)(を通じて、独立変数であるハッシュ関数この値は、ノードの格納アドレス、ノードのキーとして解釈され、対応する関数の値を計算します) (キー)と属性データ(と共に、メモリセルに格納されています)。検索された場合、アドレスは、対応するデータを見つけるために、同じ関数を用いて計算されます。

ハッシュテーブル:ハッシュテーブルから構成される記憶構造を記憶することによって、ハッシュ(ハッシュ・テーブル)と呼ばれます

例:線形キー値テーブルセットは{と、実行、開始S =知られている 、golangために他、} 、ハッシュ関数は鍵Kはアルファベットのシーケンス番号の最初の文字であると仮定されることができ以下のハッシュテーブルを確立します。

ハッシュ表

もちろん、この例は特に簡単である、行き届いた学生はすぐに二つの問題を発見しました:

  1. それは類似しており、リンゴのようなキーこれで、この表はまた、保管方法S、またはアップルストアと1位が存在する場合は?(として知られる現象コンフリクト
  2. 割り当てられた空間一般に(大きく、スペースの無駄であるが、しかし、検索効率と引き換えに、前記するように、実際に、必要とされるよりも接合より大きい(M)ハッシュテーブルスペース(H)の組α = M / Hはハッシュテーブルである負荷率

実際には、これは選択であり、次の紛争解決戦略ハッシュ関数についてお話したいと思います。

ハッシュ関数

選択されたハッシュ関数は、コアであるハッシング、ハッシュ関数は、ノードが「均一に分布」、少ない衝突が理想的であるべきです

簡単にするために、我々は以下のハッシュ関数キー値が整数であると仮定(も整数に変換するための具体的な方法を持っている整数は、すべての後に、コンピュータの世界では、すべてが01の文字列で構成されていない場合)

Conormalに加えて:

キーコードのK m(しばしば取らハッシュテーブルの長さ)で割った値、およびハッシュアドレスとし、残り。

丸め方法以上かかります

ましょう定数A(0 <A <1)、抽出された生成物の小数部分を乗じ鍵K。その後、この値は、整数nで乗算され、結果は、ハッシュアドレスに切り捨てされます。

そこから、その適用のシナリオと、それぞれを選択するハッシュ関数の多くの種類がありますが、高い確率数学者であるシーンが何ハッシュ関数を選択するものに限り、我々はそれが可能だろうと思ったのか理解としてのソフトウェア開発技術者は、検討されるべきです質問。

紛争解決の戦略について話を隣である、優れたハッシュ関数は、競合を回避することが可能かもしれないが、競合は避けられません

紛争解決の戦略

競合解決技法は、これらの2つの方法、方法ジッパーキーストア競合がハッシュテーブル内のメインテーブル外で発生は、方法は開き、アドレスが生じることを除いて、ファスナー法とアドレス方式を開き、2つのカテゴリに分けることができます別のテーブル貯蔵タンクキーの競合インチ

ジッパーの法則

簡単な方法は、ハッシュテーブルのリストヘッダとして定義された各ファスナーのスロットを形成することで、すべてのこのリストの特定のトラックにハッシュが溝内に配置されています。

{golang、行く、のために、他に、犬を行い、そして、リンゴ、開始} Sは=とし、ハッシュ関数またはキー番号K、アルファベットの最初の文字。ハッシュテーブルを次のようにそれを確立することができます。

ジッパーの法則

送付方法を開きます

ハッシュテーブルに直接格納されているすべてのレコードを送付方法を開きます。各レコードは、ハッシュ関数群の位置によって算出鍵K、すなわち、H(k)を有します。あなたが鍵K、および他のアドレステーブルの位置k(競合)を占拠している別のレコード・グループのキーを挿入したい場合は、他のストレージを選択するためにどのようにk個のアドレスを入れて、様々なアルゴリズムは、我々は、そこにありますでメソッドを検出するために、一例として。

所与のキーのセットは、ハッシュテーブルの長さL = 15 {26,36,41,38,44,15,68,12,06,51,25}であり、リニアプローブメソッドハッシュテーブルによって競合を解決するように構成されています次のようにプロセスは次のとおりです。

用いた除算の余りを H(K)= Kの%:ハッシュ関数として、それがM = 13とし、ハッシュ関数として 、13 の各ノードは、オーダー。

H(26)= 0、H(36)= 10、H(41)= 2、H(38)= 12、H(44)= 5、

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
26 25 41 44 36 38

H(15)= 0、衝突が発生し、それは3つのユニットに配置することができるので、明らかにフリーアドレス3は、開放されて、検出方法のために、プローブされる必要があります。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
26 25 41 15 44 36 38

次のように68と12は、同様に、最終的なハッシュテーブルは、次のとおり

1 2 3 4 5 6 7 8 9 10 11 12 13 14
26 25 41 15 68 44 6 36 38 12 51

概要

本論文では、ソフトウェアエンジニアとして、十分にこの知識は、私たちはいくつかのこのような分析のハッシュ方式の効率として偏っ数学の知識だけでなく、関連する最適化の一部として、プロジェクトの開発に従事するために、基本的な概念やアイデアハッシュテーブルを記述記事もはや話をしません。

Shenkaoziliao:「データ構造とアルゴリズム」チャンが編集

おすすめ

転載: www.cnblogs.com/yahuian/p/11575672.html