自然数をキーとするデータを,を用いて管理する。キー x の h(x) を
h(x) = x mod n
とすると,任意のキー a と b が衝突する条件はどれか。ここで,n はハッシュ表の大きさであり,x mod n は x を n で割った余りを表す。
問題本文
自然数をキーとするデータを,ハッシュ表を用いて管理する。キー x のハッシュ関数 h(x) を h(x) = x mod n とすると,任意のキー a と b が衝突する条件はどれか。ここで,n はハッシュ表の大きさであり,x mod n は x を n で割った余りを表す。
選択肢
ア.a+b が n の倍数
イ.a-b が n の倍数
ウ.n が a+b の倍数
エ.n が a-b の倍数
正解
イ. a-b が n の倍数
解説
ハッシュ関数h(x)=x mod nは、xをnで割った余りを格納位置にする。キーaとbが衝突するのはa mod n=b mod n、すなわち両者をnで割った余りが等しいとき。これはa−bがnで割り切れる、つまりa−bがnの倍数であることと同値で、イが正解。実装上は衝突を完全に避けられないため、チェイン法やオープンアドレス法など衝突解決法とnの選び方(素数など)が性能を左右する。