【データ構造レビュー】ハッシュテーブル

すべての写真は、データ構造とアルゴリズム財団(青島大学-王卓)のPPTからのものです。ちなみに、アムウェイ、先生の講義はとても良いです、そして壁がお勧めです!

ハッシュ表

1.コンセプト

1.ハッシュテーブルの定義

ハッシュテーブルは、キーコード値に基づいて直接アクセスされるデータ構造ですつまり、キーコード値をテーブル内の場所にマッピングしてレコードにアクセスし、検索を高速化します。このマッピング関数はハッシュ関数と呼ばれ、レコードを格納する配列はハッシュテーブルと呼ばれます

ハッシュ関数:H(key)= Addr。

例:
ここに画像の説明を挿入
上記のように、ハッシュ関数H(key)= keyが与えられた場合、与えられたkey = 9の場合、ハッシュ関数によって計算されたアドレスは9です。つまり、9はハッシュテーブルの9番目の位置に存在する必要があります。

2.ハッシュテーブルの関連概念

  • 競合:異なるキーコードが同じハッシュアドレスにマップされます。つまり、key1!= key2ですが、H(key1)== H(key2)です。
  • 同義語:同じハッシュ関数値を持つキーワード。

第二に、ハッシュ関数の構築方法

一般的に使用されるハッシュ関数:
ここに画像の説明を挿入

1.直接アドレス指定方法

ここに画像の説明を挿入

2.残りの方法に加えて

ここに画像の説明を挿入
pは通常、ハッシュテーブルの長さを取ります。

3.その他

  • 数値分析:従業員グループの生年月日などの一連のデータを分析します。現時点では、生年月日の最初の数桁はほぼ同じであることがわかります。この場合、競合の可能性は次のようになります。非常に高いですが、年、月、日の最後の数桁は月と特定の日付を示しています。次の桁を使用してハッシュアドレスを形成すると、競合の可能性が大幅に減少します。したがって、デジタル分析の方法は、大数の法則を見つけ、これらのデータを可能な限り使用して、競合の可能性が低いハッシュアドレスを構築することです。
  • 真ん中の方法の二乗:キーワードが二乗された後の真ん中の数字をハッシュアドレスとして使用します。
  • 折りたたみ方法:キーワードを同じビット数の複数の部分に分割します。ビット数の最後の部分は異なる場合があり、これらの部分の重ね合わせと(キャリーの削除)をハッシュアドレスとして使用します。
  • 乱数法:ランダム関数を選択し、キーワードをランダム関数のシードとし、ハッシュアドレスとしてランダム値を生成します。通常、キーワードの長さが異なる場合に使用されます。

3.競合を処理する方法

ここに画像の説明を挿入

1.オープンアドレス方式(オープンアドレス方式)

基本的な考え方:競合がある場合は、次の空のハッシュアドレスを見つけます。ハッシュテーブルが十分に大きい限り、空のハッシュアドレスをいつでも見つけることができ、データ要素がそこに格納されます。
ここに画像の説明を挿入

2.チェーンアドレス方式(ジッパー方式)

基本的な考え方:同じハッシュアドレスのレコードが単一リンクリストにチェーンされ、m個のハッシュアドレスがm個の単一リンクリストになり、配列を使用してm個の単一リンクリストのヘッドポインターが格納され、動的構造が形成されます。 。

例:
ここに画像の説明を挿入
チェーンアドレス方式でハッシュテーブルを作成する手順:
ここに画像の説明を挿入

第四に、ハッシュテーブルのルックアップ

ここに画像の説明を挿入
注:ASLは、検索アルゴリズムが成功したときの平均検索長の省略形です。ルックアップテーブル内のレコードの位置を決定するために、指定された値と比較する必要があるキーワード数の期待値です。
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_43424037/article/details/113727318