平成25年度 秋期 午前 問7
基礎理論
キーaとbが衝突する条件
自然数をキーとするデータを,ハッシュ表を用いて管理する。キー x のハッシュ関数 h(x) を
h(x) = x mod n
とすると,キー a と b が衝突する条件はどれか。ここで,n はハッシュ表の大きさであり,x mod n は x を n で割った余りを表す。
- アa+b が n の倍数
- イa−b が n の倍数
- ウn が a+b の倍数
- エn が a−b の倍数
答えと解説を見る
✓ これが正解イa−b が n の倍数
解説
余りが等しいことは、差がハッシュ表の大きさの倍数と同じです。
設問は、キーを表の大きさで割った余りをハッシュ関数とするとき、二つのキーが衝突する条件を選ばせています。見る軸は一つで、衝突という言葉を定義どおりに式へ直すことです。衝突とは二つのキーが同じ場所に割り当てられることですから、それぞれの余りが等しいということにほかなりません。そこで、二つのキーを表の大きさで割った商と余りの形に書くと、余りが共通なので、二つのキーの差を取ったときに余りの部分が打ち消し合います。残るのは商の差に表の大きさを掛けた値ですから、差は表の大きさで割り切れます。つまり、二つのキーの差が表の大きさの倍数であることが、衝突するための条件です。表の大きさを 10 として数で確かめると、23 と 13 は余りがどちらも 3 で衝突し、差の 10 は確かに倍数です。23 と 43 も余りが 3 で衝突し、差の絶対値 20 も倍数です。一方、23 と 17 は余りが 3 と 7 で衝突せず、差の 6 も倍数ではありません。
ほかの選択肢はなぜ違うのか
- アa+b が n の倍数:二つのキーの和が表の大きさの倍数だとしていますが、表の大きさを 10 として 23 と 17 を取ると和は 40 で倍数になるのに、余りは 3 と 7 で割り当て先が分かれます。和がそろうのは余りどうしが補い合う別の話です。
- ウn が a+b の倍数:表の大きさが二つのキーの和の倍数だとしており、割る側と割られる側が逆になっています。表の大きさを 10 とすると和は多くの場合それより大きく、10 がその倍数になることはまずありません。
- エn が a−b の倍数:こちらも表の大きさを割られる側に置いた形です。表の大きさを 10 として差が 20 になる組を取ると、この条件は成り立たないのに割り当て先は一致するので、条件として用をなしません。
この問題の用語
- ハッシュ関数どんな長さのものからも決まった長さの値を作り出す計算。少しでも中身が変われば、できあがる値は大きく変わります。
出典:平成25年度 秋期 応用情報技術者試験 午前 問7
同じ用語が出る問題
- 令和7年度 秋期 午前 問5:ベストフィット方式の特徴(ハッシュ関数)
- 令和3年度 春期 午前 問40:つまり一方向性の性質(ハッシュ関数)
- 令和2年度 10月 午前 問5:ポインタを用いた線形リストの特徴(ハッシュ関数)
- 平成30年度 秋期 午前 問27:ハッシュ関数に関する問題(ハッシュ関数)
- 平成27年度 秋期 午前 問5:衝突が起こるキーの組合せ(ハッシュ関数)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)