━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ データ構造・アルゴリズム論 確認問題5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
●問 (ハッシュ表) リストの配列(要素数11)とハッシュ関数 h(x) = x mod 11 を使い, 連鎖法に基づく簡単なハッシュ表を実現する.空のハッシュ表に対して, 23, 5, 10, 12, 40, 25, 7, 55, 45, 29 を順に挿入する.ただし,各要素はリストの先頭に追加されるものとする. 全要素の挿入後のハッシュ表を次の形式で示せ. i | table[i] ---+---------- 0 | 1 | 2 | : | : | ────────────────────────────────────── ●答 (ハッシュ表) 挿入結果のハッシュ表 table は次の通り. i | table[i] ---+----------- 0 | [55] 1 | [45,12,23] 2 | [] 3 | [25] 4 | [] 5 | [5] 6 | [] 7 | [29,7,40] 8 | [] 9 | [] 10 | [10] [解説] 11 で割った余りをハッシュ値(配列の添え字)として使うので, ハッシュ表を表す配列は,添え字 0〜10 の 11 要素からなる. 挿入する各要素に対するハッシュ値は,次の通りである. x | 23 5 10 12 40 25 7 55 45 29 ---------+------------------------------------- x mod 11 | 1 5 10 1 7 3 7 0 1 7 ハッシュ値 1 と 7 が複数回現れるため,table[1] と table[7] で 衝突(同じ格納位置への複数のデータの割り当て)が起こる. 衝突の解消法として,この問題では,リストを使う連鎖法を採用した. 要素をリストの先頭に追加する場合には,追加したのと逆順に要素が並ぶ. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 授業のホームページ 山田 俊行 https://www.cs.info.mie-u.ac.jp/~toshi/