【ハッシュ】
例)
下図に示す番号をキーとする10件のレコードを直接編成ファイルに記録することを考える。
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│ 2│ 4│ 6│ 8│10│12│14│16│18│20│
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
ハッシング(アドレス変換)の方法として、7を除数とする除算法を用いたとき、
シノニムレコードは何件か。
尚、除算法によるハッシングでは
キー値÷除数=X余りY
としたときのYがレコードアドレスとなる。
解説)
まず10レコードそれぞれのレコードアドレスを計算する。
キー アドレス
---- --------
2 2 ( 2÷7=0余り2 より)
4 4 ( 4÷7=0余り4 より)
6 6 ( 6÷7=0余り6 より)
8 1 ( 8÷7=1余り1 より)
10 3 (10÷7=1余り3 より)
12 5 (12÷7=1余り5 より)
14 0 (14÷7=2余り0 より)
16 2 (16÷7=2余り2 より)
18 4 (18÷7=2余り4 より)
20 6 (20÷7=2余り6 より)
これを逆に見ると、
アドレス レコードのキー
-------- --------------
0 14
1 8
2 2,16 →シノニムレコード
3 10
4 4,18 →シノニムレコード
5 12
6 6,20 →シノニムレコード
シノニムレコード、すなわち重複しているレコードは3レコードである。
なぜ、このようなキー項目の値に基づくアドレス変換を行うかといえば、処理が高速であるから
である。
つまり、キー項目をハッシュ関数(類題の場合は7で割った余り)でアドレスに変換すれば
ダイレクトにそのレコードにアクセスできる。
二分探索のようにデータを昇順又は降順に並べてなくても検索できる。
ただし、ハッシュ関数の答えがキーの値によっては当然重複する。
それをシノニムと呼んでいる。
この「重複」が発生すると言うことがハッシュ法の特徴であり、試験でも出題される。