メインコンテンツへ
アルゴリズムとプログラミング

ハッシュ表のサイズ m=7 とし、ハッシュ関数を h(k) = k mod 7 で定義する。キー集合 {15, 22, 8, 36, 25} を順に挿入したとき、衝突が発生する組み合わせとして正しいものはどれか。

ア.15と22はスロット2に衝突する
イ.15、22、8、36の4つすべてが同じスロット1に衝突する正解
ウ.8と36はスロット4に衝突する
エ.衝突は発生しない

解説

除算法は「mod でロッカー番号を決める」シンプルな方式。同じロッカーに別の人が来たら衝突。表サイズに素数を選ぶのは、規則的な衝突パターンを避けるための古くからの知恵です。

なぜ イ が正解か

イが正解。各キーを h(k) = k mod 7 で計算:①h(15) = 15 mod 7 = 1(15 = 7×2+1)、②h(22) = 22 mod 7 = 1(22 = 7×3+1)、③h(8) = 8 mod 7 = 1(8 = 7×1+1)、④h(36) = 36 mod 7 = 1(36 = 7×5+1)、⑤h(25) = 25 mod 7 = 4(25 = 7×3+4)。15, 22, 8, 36 がすべてスロット1に集中し、4個同時衝突する。25だけがスロット4で単独。

なぜ ア は間違いか

15と22は確かに衝突するが、スロット2ではなくスロット1(15 mod 7 = 1、22 mod 7 = 1)。スロット番号が誤っている。

なぜ ウ は間違いか

8と36は確かに衝突するが、スロット4ではなくスロット1(8 mod 7 = 1、36 mod 7 = 1)。スロット番号が誤っている。

なぜ エ は間違いか

衝突は実際に発生する。手計算でmod 7を確実に求めれば見抜ける。

出典: AI生成問題(学習用)