ハッシュ表(ハッシュ法)とは?はっしゅひょう
ハッシュ表(ハッシュ法)とは、キーをハッシュ関数に通して得た値をそのまま格納位置の添字にし、計算だけで場所を決める方式。表の中を順に見比べる必要がないので、件数が増えても探索・追加・削除の手間がほとんど増えず、理想的には一定時間で済む。別のキーが同じ位置になる衝突をどう捌くかが設計の要点になる。
最終更新:2026-10-09
この語が出る過去問を解く →背景
線形探索は件数に比例して遅くなり、2分探索は先に整列しておく必要がある。件数がいくら増えても一定時間で見つけたいなら、順に比べるのをやめて「どこにあるかを計算で求める」しかない。実際に使う分より広く表を取り、空きを残しておくことで衝突を減らす。記憶領域を余分に払って速度を買う交換であり、どこで折り合いを付けるかが設計の判断になる。
具体例
ハッシュ関数を「キーを13で割った余り」とすると、キー100は100 mod 13 = 9なので添字9の位置へ入れる。探すときも同じ計算をするだけで位置が分かる。Pythonの辞書やJavaのHashMapは、内部でこの方式を使って高速な検索を実現している。
試験での引っ掛け
「常に一定時間」ではない。衝突が特定の位置に集中すると、そこに連なった要素を順にたどることになり、最悪は件数に比例するまで劣化する。また順序を保持しないので、範囲検索や整列順の取り出しには向かない。衝突自体は関数の欠陥ではなく、チェイン法(同じ位置になった要素をリストでつないで並べる方法)やオープンアドレス法(空いている別の位置を探して入れる方法)で処理する前提である。
関連用語
出た過去問
出典:平成30年度 春期 基本情報技術者試験 午前 問7(IPA)
表探索におけるハッシュ法の特徴はどれか。
正解:キーの関数値によって格納場所を決める。
要点:ハッシュ法はキーの関数値で格納位置を決め、衝突対策が要る
ハッシュ法は、キーにハッシュ関数を適用して得た値から格納位置を直接決める方式である。キーを比較しながら探すのではなく計算で位置が求まるため、理想的にはデータ件数によらず一定時間で探索できる。ただし異なるキーが同じ位置に割り当てられる衝突(シノニム)は起こり得るので、チェイン法やオープンアドレス法などの対策が必要になる。
出典:平成31年度 春期 基本情報技術者試験 午前 問18(IPA)
データ検索時に使用される、理想的なハッシュ法の説明として、適切なものはどれか。
正解:データを特定のアルゴリズムによって変換した値を格納アドレスとして用いる、高速でスケーラビリティの高いデータ検索技術である。
要点:ハッシュ法はキーを計算した値を格納位置に使う
ハッシュ法は、キーの値を一定の計算式(ハッシュ関数)で変換し、得られた値を格納位置として直接使う方式である。理想的には1回の計算で目的の位置が定まるため、データ量が増えても探索時間がほとんど変わらない。衝突が起きにくい関数を選ぶことが性能維持の鍵になる。
出典:令和4年度 公開問題 基本情報技術者試験 科目A 問7(IPA)
10進法で5桁の数a1 a2 a3 a4 a5を、ハッシュ法を用いて配列に格納したい。ハッシュ関数をmod(a1+a2+a3+a4+a5, 13)とし、求めたハ…
正解:2
要点:ハッシュ値は各桁の和を除数で割った余りで求める
ハッシュ関数は各桁の数字を足した合計を13で割った余りを返す。5桁の数の各桁を合計すると5+4+3+2+1で15になる。15を13で割ると商1・余り2なので、ハッシュ値は2となり、配列の位置2に格納される。
出典:令和6年度 公開問題 基本情報技術者試験 科目A 問2(IPA)
キーが小文字のアルファベット1文字(a, b, …, z のいずれか)であるデータを、大きさが10のハッシュ表に格納する。ハッシュ関数として、アルファベットのA…
正解:dとx
要点:下1桁のハッシュは10文字離れた文字どうしが衝突する
アルファベットのASCIIコードは連続しているので、下1桁は文字が10個進むごとに同じ値に戻る。つまりアルファベット順で10文字離れた文字どうしがハッシュ値が等しくなり衝突する。dとxはd、e、…、xと数えてちょうど20文字離れているため下1桁が一致し、衝突が起こる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。