この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

ハッシュ表(Hash Table)における衝突(collision)の概念を問う問題です。ハッシュ関数とは、データのキーから格納位置(ハッシュ値)を計算する関数です。この問題では「小文字アルファベットのASCIIコードの1の位」をハッシュ値として使います。小文字アルファベットのASCIIコード:a=97, b=98, c=99, d=100, e=101, f=102, g=103, h=104, i=105, j=106, k=107, l=108, m=109, n=110, o=111, p=112, q=113, r=114, s=115, t=116, u=117, v=118, w=119, x=120, y=121, z=122。1の位(10で割った余り)を計算すると:d=100→ハッシュ値0、x=120→ハッシュ値0。dとxのハッシュ値が同じ(0)であるため衝突が発生します。衝突とは異なるキーが同一のハッシュ値を持つ現象で、チェイン法(連結リスト)やオープンアドレス法(線形探索)で解決します。

なぜ他の選択肢は違うのか

選択肢 ア
aのASCIIコードは97(1の位=7)、iのASCIIコードは105(1の位=5)です。7≠5のため異なるハッシュ値が生成され、衝突は発生しません。アルファベット順に連続したコードが割り当てられているのでa=97から1ずつ加算すれば計算できます。
選択肢 イ
bのASCIIコードは98(1の位=8)、rのASCIIコードは114(1の位=4)です。8≠4のため衝突は発生しません。aからbへ+1、bからrへは+16(a=97からr=114なので17番目)なので114となり、1の位は4です。
選択肢 ウ
cのASCIIコードは99(1の位=9)、lのASCIIコードは108(1の位=8)です。9≠8のため衝突は発生しません。アルファベットのa〜zに連続したASCIIコードが割り当てられているという知識から計算できます。

解くときのポイント

小文字aのASCIIコードは97(0x61)と覚えておく。各文字のコードはaから何番目かを97に足すだけ(b=98, c=99...)。ハッシュ値=ASCIIコード mod 10(1の位)。同じ1の位の組み合わせを探す問題。