令和4年度 秋期 応用情報技術者試験 午前 問5

自然数をキーとするデータを,ハッシュ表を用いて管理する。キー xx のハッシュ関数 h(x)h(x) を

h(x)=x mod nh(x) = x \bmod n

とすると,任意のキー aa と bb が衝突する条件はどれか。ここで,nn はハッシュ表の大きさであり,x mod nx \bmod n は xx を nn で割った余りを表す。

解答・解説

正解: イ. a−ba-b が nn の倍数

ハッシュ表において、異なるキーからハッシュ関数によって同じハッシュ値が算出されることを衝突(シノニム)と呼びます。

今回のハッシュ関数は h(x)=x mod nh(x) = x \bmod n と定義されています。
したがって、任意のキー aa と bb が衝突する条件は、h(a)=h(b)h(a) = h(b) すなわち a mod n=b mod na \bmod n = b \bmod n が成り立つことです。
これは、「aa を nn で割った余り」と「bb を nn で割った余り」が等しいことを意味します。

2つの自然数を同じ数で割った余りが等しい場合、その2つの数の差は必ず割る数の倍数になります。
よって、a−ba - b(または b−ab - a)は nn の倍数となります。

各選択肢の解説

  • ア: 「a+ba+b が nn の倍数」は誤りです。例えば n=10,a=3,b=7n=10, a=3, b=7 の場合、a+b=10a+b=10 で nn の倍数になりますが、3 mod 10=33 \bmod 10 = 3、7 mod 10=77 \bmod 10 = 7 となりハッシュ値は異なり、衝突しません。
  • イ: 「a−ba-b が nn の倍数」は正しいです。これがハッシュ値が衝突する条件です。
  • ウ: 「nn が a+ba+b の倍数」は誤りです。例えば n=10,a=2,b=3n=10, a=2, b=3 の場合、a+b=5a+b=5 で n(10)n(10) は a+b(5)a+b(5) の倍数になりますが、2 mod 10=22 \bmod 10 = 2、3 mod 10=33 \bmod 10 = 3 となり衝突しません。
  • エ: 「nn が a−ba-b の倍数」は誤りです。例えば n=10,a=7,b=2n=10, a=7, b=2 の場合、a−b=5a-b=5 で n(10)n(10) は a−b(5)a-b(5) の倍数になりますが、7 mod 10=77 \bmod 10 = 7、2 mod 10=22 \bmod 10 = 2 となり衝突しません。

Spineチーム