平成27年度 春期 午前 問5
アルゴリズム
キー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 の倍数
解説
余りが等しいことは、差が n の倍数であることと同じです。
設問は、ハッシュ表の大きさ n で割った余りをハッシュ関数とするとき、二つのキーが衝突する条件を選ばせています。衝突するとは、二つのキーから同じ位置が求まること、つまり n で割った余りが等しいことです。ここを式に開きます。a を n で割った商と余り、b を n で割った商と余りをそれぞれ書き、余りが同じだとして引き算をすると、余りが打ち消し合って、n と商の差の積だけが残ります。よって、二つのキーの差が n の倍数であることが条件になります。数で当てます。n を十として、a が 23、b が 43 のときは余りがどちらも 3 で衝突し、差の 20 は十の倍数です。a が 23、b が 47 のときは余りが 3 と 7 で衝突せず、差の 24 は十の倍数ではありません。衝突する組でも衝突しない組でも、言っていることが合います。除算法のハッシュ表で n に素数を選ぶのは、この差が倍数になりにくくするためです。
ほかの選択肢はなぜ違うのか
- アa+b が n の倍数:和で考えた形です。n を十、二つのキーを 4 と 6 とすると和は十の倍数になりますが、余りは 4 と 6 で別々の位置に入ります。衝突しない組を衝突すると言ってしまうので、条件として成り立ちません。
- ウn が a+b の倍数:倍数の向きが逆になっています。表の大きさの側が二つのキーの和で割り切れる場面は、表がキーより大きいときに限られ、ふつうの使い方ではまず起こりません。
- エn が a−b の倍数:こちらも倍数の向きが逆です。X が Y の倍数とは、X が Y に整数を掛けた値であるという意味なので、二つを入れ替えると条件がまったく別のものに変わってしまいます。
この問題の用語
- ハッシュ関数どんな長さのものからも決まった長さの値を作り出す計算。少しでも中身が変われば、できあがる値は大きく変わります。
出典:平成27年度 春期 応用情報技術者試験 午前 問5
同じ用語が出る問題
- 令和7年度 秋期 午前 問5:ベストフィット方式の特徴(ハッシュ関数)
- 令和3年度 春期 午前 問40:つまり一方向性の性質(ハッシュ関数)
- 令和2年度 10月 午前 問5:ポインタを用いた線形リストの特徴(ハッシュ関数)
- 平成30年度 秋期 午前 問27:ハッシュ関数に関する問題(ハッシュ関数)
- 平成27年度 秋期 午前 問5:衝突が起こるキーの組合せ(ハッシュ関数)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)