自然数をキーとするデータを,を用いて管理する。キー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でキーaとbが衝突するのは、h(a)=h(b)すなわちa mod n=b mod nのとき。これはaとbをnで割った余りが等しいことを意味し、差a−bがnで割り切れる(nの倍数になる)条件と同値。イが正しい。衝突はハッシュ表性能を左右するため、表サイズnの選び方や衝突解決法(チェイン法・オープンアドレス法)の理解が実装上重要となる。
選択肢ごとの解説
ア.a+bがnの倍数でも余りが等しいとは限らず、衝突条件と無関係で誤り。
イ.a−bがnの倍数⇔a mod n=b mod nで、両者のハッシュ値が一致し衝突するため正しい。