ハッシュテーブルとは何ですか?
コンピューターサイエンスでは、ハッシュテーブルは、キーと呼ばれる値のリストで構成されるデータを保存するためのデータ構造であり、配列と呼ばれる対応する値のリストとペアになります。たとえば、ビジネス名はアドレスとペアになる場合があります。通常、配列内の各値には、ハッシュと呼ばれる位置番号があります。ハッシュ関数は、通常、各キー値をハッシュにマッピングする一連の命令またはアルゴリズムであり、例えば、ビジネス名、電話番号、ビジネスカテゴリにビジネス名を接続します。ハッシュ関数の目的は、各キーを配列内の一意の対応する値に割り当てることです。これは一般にハッシュと呼ばれます。ハッシュ機能が適切に機能するには、ハッシュ関数を適切にフォーマットする必要があります。
一連のデータ上のハッシュテーブルのパフォーマンスは、ハッシュ関数の効率に依存します。 適切なハッシュ関数の典型Allyは、キーの均一な検索と、対応する配列内のマッピングの均一な分布を提供します。 2つのキーが同じ対応する値に割り当てられている場合、ハッシュ衝突が発生します。 ハッシュ衝突が発生すると、ハッシュ関数は通常、一意の対応する値が見つかるまで再び実行されます。これにより、通常、ハッシュ時間が長くなります。 ハッシュテーブルのキーの数は通常固定されていますが、時にはキーが重複する場合があります。 それでも、適切に設計されたハッシュテーブルには、各キーを配列内の一意の対応する値にマッピングする効果的なハッシュ関数があります。
ハッシュテーブル内の非効率的なハッシュ関数も、マッピングのクラスターを生成する場合があります。 ハッシュ関数が既存のキーのマッピングのクラスターを作成すると、対応する値を検索するのにかかる時間を増やすことができます。 これにより、ほとんどのハッシュ関数は一般にアレイで次に利用可能な位置を探すため、将来のキーのハッシュを遅くすることができます。大きなクラスターの場合値はすでに割り当てられていますが、通常、新しいキーの未割り当ての値を探すのにはるかに時間がかかります。
負荷係数は、ハッシュ関数の効率に関連する別の概念です。負荷係数は、ハッシュテーブルの対応する配列の全体的なサイズに関連して、すでに既存のハッシュの量です。通常、既に割り当てられたキーの数を対応する配列のサイズで割ることによって定義されます。 負荷係数が増加すると、適切なハッシュ関数は通常、一定数の衝突とクラスターを特定のポイントまで維持します。 多くの場合、このしきい値を使用して、特定の数のキーでハッシュ関数がどれだけ効率的であるか、新しいハッシュ関数が必要な場合を決定できます。
多くのコンピューターサイエンスの研究者は、完全なハッシュ関数を生成しようと努力してきました。これは、増加する負荷係数を与えられた衝突やクラスターを生成しないものです。 理論的には、完璧なハッシュテーブルを生成するための鍵はプロすることです完璧なハッシュ関数を溶かします。 一般に、研究者は、完全なハッシュ関数には、荷重係数が増加する一定のパフォーマンス(衝突とクラスターの数)が必要であると考えています。 最悪のシナリオでは、完全なハッシュ関数は、しきい値に到達せずに一定のハッシュを可能にします。