この概念が出た関連問題

この試験の対策ガイド

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

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

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

正解は エ

解説

このプログラムはハッシュテーブルの衝突解決法の一つである「ダブルハッシング法」を実装したものです。ハッシュテーブルとは、データを格納する際に特定の計算(ハッシュ関数)を用いて格納位置を決定するデータ構造です。 まず、配列hashArrayは5個の-1で初期化されます。その後、add関数で3、18、11の順に格納を試みます。格納プロセスは以下の通りです: 1. 3を格納:calcHash1(3) = 4で4番目に格納 2. 18を格納:calcHash1(18) = 4で衝突→calcHash2(18) = 2で2番目に格納 3. 11を格納:calcHash1(11) = 2で衝突→calcHash2(11) = 5で5番目に格納 結果として、hashArrayは[-1, 18, -1, 3, 11]となります。この問題は、ハッシュテーブルにおける衝突解決の仕組みと、複数のハッシュ関数を使用する手法の理解を問うています。

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

選択肢 ア
配列の初期値である[-1, -1, -1, -1, -1]を選択している可能性があります。これは値が全く格納されていない状態を示しており、add関数による3つの値の格納が反映されていません。ハッシュ関数による位置の計算と実際の格納処理を追跡できていないことが原因です。
選択肢 イ
格納順序(3, 18, 11)をそのまま配列の位置に当てはめた[3, 18, 11, -1, -1]を選択している可能性があります。これはハッシュ関数による位置計算を無視した誤った解釈です。実際にはcalcHash1とcalcHash2による位置決定が行われます。
選択肢 ウ
ハッシュ値の計算は行っているものの、衝突時の処理(calcHash2の使用)を考慮していない結果を選択している可能性があります。衝突が発生した場合は第2のハッシュ関数を使用して新しい位置を計算する必要があります。
選択肢 オ
{-1, 18, 11, 3, -1}は、add(11)の格納先の計算を誤った結果です。add(11)ではcalcHash1(11) = (11 mod 5)+1 = 2で衝突するため、calcHash2(11) = ((11+3) mod 5)+1 = (14 mod 5)+1 = 5番目に格納されます。3番目ではなく5番目に11が入るため、この選択肢は誤りです。

解くときのポイント

ハッシュテーブルの問題を解く際は、以下のステップで考えましょう: 1. まず配列の初期状態を確認(この場合は全て-1) 2. 各値に対して: - 第1ハッシュ関数で位置を計算 - その位置が埋まっている場合は第2ハッシュ関数を使用 3. 値を1つずつ追跡して最終状態を導出 また、mod演算の結果に1を加えることで、配列の添字が1から始まることに注意してください。実務でも使用される重要なデータ構造なので、基本的な仕組みをしっかり理解しておきましょう。