クラスノート:ハッシュテーブル検索テクノロジ

ハッシュ関数の構成:直接アドレス指定方法、Iステー、番号分析、ミドル二乗法、プロセスを折る(セグメント重ね合わせ)に加えて、
紛争処理方法:オープン・アドレス指定可能、チェーンアドレス方式、共通オーバーフロー領域の確立
概要
パウダー列の基本的な考え方:記録されたストレージアドレスとそのキーコードの間の明確な対応を確立します。このようにして、検索された要素の検索方法は、比較することなく1回の読み取りで取得できます。
ハッシュテーブル:ハッシュテクノロジは、連続ストレージスペースにレコードを格納するために使用されます。この連続ストレージスペースは、ハッシュテーブルと呼ばれます。
ハッシュ関数:キーコードをハッシュテーブルの適切な格納場所にマップする関数
ハッシュアドレス:ハッシュ関数で取得した格納場所アドレス。
ハッシュ技術は単なるルックアップ技術ですか?
ハッシュは、ルックアップ手法とストレージ手法の両方です。
ハッシュは完全なストレージ構造ですか?
ハッシュは、レコードのキーコードによってレコードを特定するだけであり、レコード間の論理的な関係を完全に表すものではないため、主にハッシュは検索指向のストレージ構造です。
ハッシュ検索の制限
ハッシュテクノロジーは、複数のレコードが同じキーを持つ場合には一般に適していません。競合があり、検索の効率が低下し、計算による
検索の利点が反映されません。最大値と最小値を探すと、特定の範囲内のレコードを見つけることは不可能です。
ハッシュ技術の重要な問題:(
1)ハッシュ関数の設計。シンプルで統一された、高いストレージ使用率のハッシュ関数を設計する方法。
conflict対立の処理。競合を解決するために適切な競合処理方法をとる方法。
紛争:2つの異なるキーコードki≠kjの場合、H(ki)= H(kj)、つまり、2つの異なるレコードを同じ格納場所に格納する必要があります。kiとkjは、Hの同義語と呼ばれます。
ハッシュ関数ハッシュ関数の
設計は、一般に次の原則に従う必要があります:(
1)単純な計算。ハッシュ関数は大量の計算を行うべきではありません。そうしないと、検索効率が低下します。⑵関数値、つまりハッシュアドレスが均等に分散されます。関数値は、アドレス空間で可能な限り均等に分散させて、ストレージ領域の効果的な使用を保証し、競合を減らす必要があります。
ハッシュ関数直接アドレッシング方式
ハッシュ関数はキーの線形関数です。つまり、
H(キー)= aキー+ b(a、bは定数)は
適用できますか?
事前にキーコードを知っているため、キーコードセットはそれほど大きくなく、継続性が良好です。
ハッシュ関数除算剰余法
ハッシュ関数は次のとおりです:H(キー)=キーmod p。
適切なpを選択して同義語の数を減らす方法は?
一般に、pはテーブルの長さ以下(できればテーブルの長さに近い)の最大素数として選択します

除算剰余法は、ハッシュ関数を作成するための最も単純で最も一般的に使用される方法であり、事前にキーの配布を知っておく必要はありません。
ハッシュ関数-デジタル分析法
各ビットのキーコードの分布に従って、比較的均一な分布を持つビット数を選択して、ハッシュアドレスを形成します。
アプリケーション?
キーコードの分布を事前に把握し、キーコードの分布は均一な
ハッシュ関数-二乗法です。
キーコードを二乗し、ハッシュテーブルのサイズに応じて、中央の数ビットをハッシュアドレス(四角形の後に切り取り)として取得します。
アプリケーション?
キーコードの配布は事前にわかっておらず、キーコードの数はそれほど多くありません。
ハッシュ関数の折りたたみ方法で
は、キーコードを左から右にビット数が等しい部分に分割し、これらの部分を重ね合わせて合計し、最後の数ビットをハッシュアドレスとして使用します。
アプリケーション?
キーコードは多数あり、キーコードの配布は事前にわかりません。
競合の処理パブリックオーバーフロー確立するための
オープンハッシュ(オープンハッシュ、ジッパーメソッド、個別チェーン、チェーンアドレスメソッド)
クローズドハッシュ(オープンアドレッシングメソッド、オープンアドレス、オープンアドレスメソッドとも呼ばれるクローズドハッシュ)コンフリクトオープンアドレッシング方式の処理方法キーコードから取得したハッシュアドレスがコンフリクトしたら、次の空のハッシュアドレスを見つけてレコードを保存します。次の空のハッシュアドレスを見つける方法は?(1)線形検出法(2)二次検出法(3)ランダム検出法(4)次にハッシュ法オープンアドレス法を使用して競合に対処することによって得られるハッシュテーブルは、クローズドハッシュテーブルと呼ばれます線形検出方法競合が発生した場合、競合する位置の次の位置から、空のハッシュアドレスを順番に探します。キー値について、H(キー)= dとすると、閉じたハッシュテーブルの長さはmです。競合が発生した場合、次のハッシュアドレスを見つけるための式は、Hi =(H(キー)+ di)%m(di = 1、2、...、m-1)スタッキング:競合の処理中に発生する、非同義語間の同じハッシュアドレスの競合現象。二次検出












競合が発生した場合、次のハッシュアドレスを見つけるための式は、
Hi =(H(キー)+ di)%m(di = 12、-12、22、-22、...、q2、-q2およびq≤m/ 2)
ランダム検出方法
競合が発生した場合、次のハッシュアドレスの変位は乱数列です。つまり、次のハッシュアドレスを見つけるための式は次のとおりです
。Hi =(H(key)+ di)%m(di is a乱数列、i = 1、2、...、m-1)
競合ジッパー方式(チェーンアドレス方式)の処理方法
基本的な考え方:すべてのレコードを同じハッシュアドレスで格納する、つまり、すべての同義語のレコードを1つに格納するリンクリスト(同義語サブテーブルと呼ばれます)では、すべての同義語サブテーブルのヘッドポインターがハッシュテーブルに格納されます。
ジッパー方式を使用して競合に対処するハッシュテーブルは、オープンハッシュテーブルと呼ばれます
nレコードが長さmのハッシュテーブルに格納されている場合、シノニムサブテーブルの平均長はn / mです。
競合に対処する方法-共通オーバーフロー領域の
基本的な考え方:ハッシュテーブルには基本テーブルとオーバーフローテーブルが含まれ(通常、オーバーフローテーブルと基本テーブルは同じサイズです)、競合するレコードはオーバーフローテーブルに格納されます。検索するときは、ハッシュ関数を使用して、指定された値のハッシュアドレスを計算します。最初に基本テーブルの対応する単位と比較し、それらが等しい場合、検索は成功します。それ以外の場合は、オーバーフローテーブルに移動して順次検索します。
ハッシュ検索のパフォーマンス分析
競合が存在するため、競合後の検索は、指定された値をキーと比較するプロセスです。
検索プロセス中のキー比較の数は、競合の確率に依存します。競合に影響を与える要因は次のとおりです。
(1)ハッシュ関数が均一かどうか
(2)競合を処理する方法
(3)ハッシュテーブルの負荷係数:α=テーブルに入力されたレコード数/テーブルの長さ
競合に対処するためのいくつかの異なる方法
ここに画像の説明を挿入
の平均検索長等しい確率で成功した検索の平均検索長手動計算は次のとおりです。
ここに画像の説明を挿入
ここで、Ciは各要素を配置するために必要な比較の数です。
等確率で
ここに画像の説明を挿入
検索が失敗した場合の平均検索長ルールの手動計算は次のとおりです。ここで、Ciは、関数値がiのときに検索が失敗した場合の比較の数です。
オープンハッシュリストとクローズドハッシュリストの比較
ここに画像の説明を挿入

公開された48件の元の記事 いいね25 2453にアクセス

おすすめ

転載: blog.csdn.net/qq_43628959/article/details/104328645