
1:ハッシュ法
ハッシュ法は、データの格納場所を計算によって求め、短時間で目的のデータを探し出す方法です。ハッシュ法を利用するためには、事前にデータをハッシュ表に登録しておく必要があります。
データの格納場所を求める計算式をハッシュ関数と言います。データのキー値(社員番号、口座番号、伝票番号など)をハッシュ関数に入力し、ハッシュ値を得ます。そして、ハッシュ値をアドレス(あるいは要素番号)として扱い、該当箇所にデータを格納します。基本情報技術者試験では、ハッシュ関数として、
キー値%N:キーチをNで割った余り
が使われることが多いです。なお、%は余剰(割った余り)を表す記号です。ハッシュ関数として余剰を使うときには、先頭要素の要素番号が0から始まる配列を用意すると便利です。
2:ハッシュ法における衝突
異なったキーチに対して、同じハッシュ値が計算されることを衝突(コリジョン)と言います。例えば、ハッシュ関数を
ハッシュ値=キー値%11
としましょう。このハッシュ関数を使って、データをハッシュ表に格納します。 はじめに、キー値3のデータをハッシュ表に格納しましょう。この時のハッシュ値は3ですから、ハッシュ表の[3]の場所に格納します。次に、キー値14のデータをハッシュ表に格納します。この時のハッシュ値も三となります。ハッシュ表の[3]にはすでにデータが格納されていますから、ここに格納することはできません。このように、ハッシュ値が衝突するとデータを格納できなくなります。
この場合、後から格納しようとしたキー値14のデータをシノニムと呼びます。シノニムは、本来の場所とは違う場所に格納せざるをえません。シノニムを格納するを格納する代表的な方法には、オープンアドレス方とチェーン法があります。
オープンアドレス法は、本来の場所から下方向へ見ていって、空いていた場所に格納する場所という方法です。
チェーン法は、同じハッシュ値のデータをリストで管理するという方法です。