基本情報技術者試験 令和6年度 科目A 公開問題(過去問) 問2 について解説します。
問題
問2 キーが小文字のアルファベット1文字(a, b, …, z のいずれか)であるデータを、 大きさが10のハッシュ表に格納する。ハッシュ関数として、アルファベットの ASCIIコードを10進表記法で表したときの1の位の数を用いることにする。衝突が起こるキーの組合せはどれか。ASCIIコードでは、昇順に連続した2進数が、アルファベット順にコードとして割り当てられている。
ア a と i
イ b と r
ウ c と l
エ d と x
解説・解答
英小文字のASCIIコードは、a = 97 を起点に 1文字進むごとに +1 ずつ増えます。
したがって 1の位(= ASCIIコード mod 10)の並びは次の周期で回ります。
- 97(a) → 7
- 98(b) → 8
- 99(c) → 9
- 100(d) → 0
- 101(e) → 1 … 122(z) → 2
このため、10文字離れた文字は同じ1の位になります。(97+10=107 など。)
それぞれの選択肢について確認します。
ア: a と i
a(97) → 97 mod 10 = 7
i(105) → 105 mod 10 = 5
⇒ 7 と 5 なので衝突しない。
イ: b と r
b(98) → 98 mod 10 = 8
r(114) → 114 mod 10 = 4
⇒ 8 と 4 なので衝突しない。
ウ: c と l
c(99) → 99 mod 10 = 9
l(108) → 108 mod 10 = 8
⇒ 9 と 8 なので衝突しない。
エ: d と x
d(100) → 100 mod 10 = 0
x(120) → 120 mod 10 = 0
⇒ 0で同じになって衝突する。
以上により、この問題の解答は「エ」になります。