※本情報は解説作成時点のもので、閲覧時点では法改正等により情報が変更になっている場合がございます。あらかじめご理解いただければ幸いです。
正解は「D. {-1,18,-1,3,11}」です。
この問題は、二重ハッシュ法(double hashing)を用いたハッシュテーブルへの値格納の結果を問う問題です。
この記事では、基本情報技術者試験(FE)試験(令和5年度)で出題された過去問の第4問「二重ハッシュ法による配列格納」について、試験対策の観点からわかりやすく解説します。
Contents
二重ハッシュ法の仕組み
calcHash1(value) = (value mod 配列サイズ) + 1
calcHash2(value) = ((value + 3) mod 配列サイズ) + 1
add(value) 関数は、まず calcHash1 で得た位置 i を確認し、空きなら格納。空きでなければ calcHash2 で算出した位置に格納します。両方埋まっていれば格納失敗です。
各値の格納手順
- hashArray 初期状態:{-1, -1, -1, -1, -1}
- add(3):calcHash1(3) = (3 mod 5)+1 = 4 → 空き → hashArray[4] = 3
- add(18):calcHash1(18) = (18 mod 5)+1 = 4 → 埋まっている → calcHash2(18) = ((18+3) mod 5)+1 = 1 → 空き → hashArray[1] = 18
- add(11):calcHash1(11) = (11 mod 5)+1 = 2 → 空き → hashArray[2] = 11
したがって、test() 実行後の hashArray は {-1,18,-1,3,11} となります。
他の選択肢との違い
- {-1,3,-1,18,11}:calcHash1 と calcHash2 の適用順序を誤っている
- {-1,11,-1,3,-1}:18 の格納位置が間違い
- {-1,11,-1,18,-1}:3 の格納位置が誤り
- {-1,18,11,3,-1}:順序が正しくない
正しい格納結果は D の {-1,18,-1,3,11} です。
問われているポイント
この問題では、二重ハッシュ法による衝突解消の理解と、配列インデックスの計算が正確にできるかが問われています。
気を付けてほしい点(勘違いしやすいポイント)
- calcHash1 の位置が埋まっていた場合に calcHash2 へ移る順序を間違えない
- 配列の要素番号は 1 から始まることに注意
補足
ハッシュテーブルの衝突処理として二重ハッシュ法を理解することが重要です。
基本情報技術者試験(FE)試験での出題パターン
ハッシュ法や衝突解消法はアルゴリズム問題として頻出です。
計算手順を正確に追う練習が重要です。
この知識が使われている問題
まとめ
- 二重ハッシュ法を用いた add() の結果、hashArray は {-1,18,-1,3,11}
- calcHash1 → 空き確認 → calcHash2 の順序を正しく理解することが重要