基本情報技術者試験 令和6年度 科目A 公開問題 問2
キーが小文字のアルファベット1 文字(a、b、…、z のいずれか)であるデータを、大きさが10 のハッシュ表に格納する。ハッシュ関数として、アルファベットのASCII コードを10 進表記法で表したときの1 の位の数を用いることにする。衝突が起こるキーの組合せはどれか。ASCII コードでは、昇順に連続した2 進数が、アルファベット順にコードとして割り当てられている。
選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】エ
ハッシュ関数はASCIIコードの十進表記の1の位、すなわちASCIIコードを10で割った余りを使います。小文字のaのASCIIコードは97で、以後はアルファベット順に1ずつ増えます。エのdは、97+3=100なのでハッシュ値は0です。xはaから23文字後で、97+23=120なのでハッシュ値は同じく0です。二つのキーが同じ格納位置を示すため衝突が発生し、エが正解です。
アは誤りです。aのコードは97なのでハッシュ値は7、iのコードは105なのでハッシュ値は5です。格納位置が異なり、衝突しません。
イは誤りです。bのコードは98なのでハッシュ値は8、rのコードは114なのでハッシュ値は4です。1の位が一致しません。
ウは誤りです。cのコードは99なのでハッシュ値は9、lのコードは108なのでハッシュ値は8です。こちらも異なる位置に格納されます。
【ポイント】 ハッシュ衝突とは、異なるキーから同じハッシュ値が得られることです。キー自体が同じという意味ではありません。 連続する文字コードでは、各文字が先頭の文字から何文字後にあるかを加えると、コードを効率よく求められます。 表の大きさが10で1の位を使う処理は、「ASCIIコード mod 10」と同じです。
出典:令和6年度 基本情報技術者試験 科目A 公開問題 問2
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の20問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる