静的ハッシュとは、確定済みの辞書セット(辞書内のすべてのオブジェクトが確定済みで変更されない)に対してルックアップを実行するハッシュの一種です。
静的ハッシュでは、データベース、そのオブジェクト、および参照が同じままでなければならないため、その適用範囲は限られています。まれに変更される情報を含むデータベースも適しています。これは、まれにデータベース全体を完全に再ハッシュする必要があるためです。その例としては、特定の言語の単語と定義のセット、組織の人員に関する重要なデータのセットなどがあります。[ 1 ]
完全ハッシュはハッシュのモデルであり、任意のセットが要素は同じサイズのハッシュテーブルに格納でき、定数時間で検索を実行できます。これは特にフレドマン、コムロス、セメレディ(1984)によって発見され議論されたため、「FKSハッシュ」というニックネームが付けられました。[ 2 ]
FKSハッシュは、2つのレベルを持つハッシュテーブルを使用し、その最上位レベルにはバケットはそれぞれ独自のハッシュテーブルを含みます。FKSハッシュでは、衝突が発生した場合、最上位レベルでのみ衝突が発生しなければなりません。
最上位レベルにはランダムに生成されたハッシュ関数が含まれています。これは、ユニバーサルハッシュのCarterとWegmanのハッシュ関数の制約内に収まります。そうすることで、最上位レベルには以下が含まれます。ラベルの貼られたバケツこのパターンに従って、すべてのバケットにはサイズのハッシュテーブルが格納されます。およびそれぞれのハッシュ関数ハッシュ関数は、設定によって決定されます。にそして、衝突がなくなるまで関数をランダムに順に処理していく。これは定数時間で実行できる。
なぜなら衝突確率が等しい要素のペアFKSハッシュでは、厳密に以下になることを期待できます。衝突。この事実と各衝突回数が最大で下階の各テーブルのサイズは以下になります。