この概念が出た関連問題

この試験の対策ガイド

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

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

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

正解は イ

解説

ハッシュ法の基本問題です。ハッシュ法とは、データの値から一定の計算(ハッシュ関数)で格納位置を求めて配列に格納する手法で、探索を高速化する代表的なテクニックです。本問のハッシュ関数は mod(a₁+a₂+a₃+a₄+a₅, 13)、すなわち「5桁の各桁の数字の和を13で割った余り」と定義されています。54321 の各桁は 5、4、3、2、1 なので、その和は 5+4+3+2+1 = 15 です。15 を13で割ると商1余り2なので、mod(15, 13) = 2 となり、54321 は配列の位置2に格納されます。イが正解です。ハッシュ問題で最も注意すべきは、ハッシュ関数の定義を正確に読み取ることです。本問では「数値全体を13で割る」のではなく「各桁の和を13で割る」と定義されている点がポイントで、ここを読み違えると 54321 mod 13 = 7(ウ)という誤答に誘導されます。異なるデータが同じハッシュ値になる「衝突(シノニム)」の概念も頻出なので、併せて理解しておきましょう。

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

選択肢 ア
位置1に格納されるのは、各桁の和を13で割った余りが1になる場合です。しかし本問では 5+4+3+2+1=15 で、15 mod 13 = 2 ですから余りは1にはなりません。桁の和の計算か、13で割った余りの計算のどちらかを誤った結果と考えられます。mod の計算は 15−13=2 という単純な引き算で検算できるので、焦らず確かめる習慣をつけましょう。
選択肢 ウ
7 という値は「54321 という数値そのものを13で割った余り」(54321 mod 13 = 7)に一致します。しかし本問のハッシュ関数は「各桁の数字の和を13で割った余り」と定義されており、数値全体を割るのは関数定義の読み違いです。問題文に与えられたハッシュ関数の式を一字一句正確に適用することがハッシュ問題の核心であり、もっとも引っかかりやすく作られたダミー選択肢です。
選択肢 エ
位置11に格納される計算根拠はありません。各桁の和は15で、15 を13で割った余りは2です。ハッシュ値は mod 13 なので0〜12の範囲を取り得ますが、正しい手順で計算すれば2にしかなりません。仮に桁の和を 5+4+3+2+1 ではなく別の組合せで計算したり、割る数を取り違えたりするとこうした値が出ることがあります。迷ったら割り算の筆算を書き出して検算するのが確実です。

解くときのポイント

ハッシュ問題は関数定義の読解がすべて。「桁の和を割る」のか「数値を割る」のかを最初に確認し、mod の計算は引き算(15−13=2)で検算する。