次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数addは、引数で指定された正の整数valueを大域の整数型の配列hashArrayに格納する。格納できた場合はtrueを返し、格納できなかった場合はfalseを返す。ここで、整数valueをhashArrayのどの要素に格納すべきかを、関数calcHash1及びcalcHash2を利用して決める。 手続testは、関数addを呼び出して、hashArrayに正の整数を格納する。手続testの処理が終了した直後のhashArrayの内容は、 である。 〔プログラム〕 大域: 整数型の配列: hashArray ○論理型: add(整数型: value) 整数型: i ← calcHash1(value) if (hashArray[i] = -1) hashArray[i] ← value return true else i ← calcHash2(value) if (hashArray[i] = -1) hashArray[i] ← value return true endif endif return false ○整数型: calcHash1(整数型: value) return (value mod hashArrayの要素数) + 1 ○整数型: calcHash2(整数型: value) return ((value + 3) mod hashArrayの要素数) + 1 ○test() hashArray ← {5個の -1} add(3) add(18) add(11)
衝突時は別ハッシュで再計算。空きが出るまで探す
選択肢
- ア{-1, 3, -1, 18, 11}
- イ{-1, 11, -1, 3, -1}
- ウ{-1, 11, -1, 18, -1}
- エ{-1, 18, -1, 3, 11}
- オ{-1, 18, 11, 3, -1}
正解と解説
正解:エ {-1, 18, -1, 3, 11}
要素数5なので、3は(3 mod 5)+1=4番目に入る。18は(18 mod 5)+1=4番目が埋まっているため第2のハッシュ((18+3) mod 5)+1=2番目に入る。11も(11 mod 5)+1=2番目が埋まっているので((11+3) mod 5)+1=5番目に入り、結果は2番目に18、4番目に3、5番目に11が格納された状態になる。
選択肢ごとの解説
- ア3と18の格納位置が逆で、先に格納される3が4番目に入る点と合わない。
- イ18が格納されずに11が2番目にある形で、追加順の衝突処理と一致しない。
- ウ3が格納されていないが、最初のaddは空きに必ず入るので誤り。
- エ3が4番目、衝突した18が2番目、さらに衝突した11が5番目という正しい結果。
- オ11が3番目に入っており、第2ハッシュの計算結果と合わない。
同じ分野の他の問題
- 次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数searchは、二つ…2025年度 公開問題 科目B 問4
- キーが小文字のアルファベット1文字(a, b, …, z のいずれか)であるデータを、大きさが10のハッシュ表に格納する…2024年度 公開問題 科目A 問2
- 次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数searchは、引数…2022年度 公開問題 科目B 問13
- 10進法で5桁の数a1 a2 a3 a4 a5を、ハッシュ法を用いて配列に格納したい。ハッシュ関数をmod(a1+a2+…2022年度 公開問題 科目A 問7
- 10進法で5桁の数a1 a2 a3 a4 a5を、ハッシュ法を用いて配列に格納したい。ハッシュ関数をmod(a1+a2+…2019年度 秋期 午前 問10
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。