令和4年度 秋期 午前 問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 で割った余りとしたとき、2 つのキーが衝突する条件を選ばせています。軸になるのは、衝突するとは格納先が同じになること、すなわち 2 つのキーを n で割った余りが等しいことだと読み替える点です。a を商と余りの形で書き、b も同じ余りを持つとすると、a から b を引いた値は商の差に n を掛けた形になります。つまり差が n の倍数であることが、衝突するための条件です。n を 7 として確かめると、10 と 24 はどちらも余りが 3 で同じ場所に入り、差は −14 で 7 の倍数になります。正解は、2 つのキーの差が n の倍数であるという記述です。
ほかの選択肢はなぜ違うのか
- アa+b が n の倍数:2 つのキーの和に着目した条件です。n を 7 とすると、同じ場所に入る 10 と 24 の和は 34 で 7 の倍数になりません。逆に別の場所に入る 3 と 4 の和は 7 の倍数になります。
- ウn が a+b の倍数:倍数の向きが入れ替わっています。ある数が別の数の倍数であるとは、後者に整数を掛けて前者になることなので、この記述は表の大きさの側が和で割り切れることを求めています。
- エn が a−b の倍数:こちらも倍数の向きが逆です。n を 7、キーを 10 と 24 とすると差は −14 ですが、7 は −14 に整数を掛けて得られないため、同じ場所に入る組でも成り立ちません。
この問題の用語
- ハッシュ関数どんな長さのものからも決まった長さの値を作り出す計算。少しでも中身が変われば、できあがる値は大きく変わります。
出典:令和4年度 秋期 応用情報技術者試験 午前 問5
同じ用語が出る問題
- 令和7年度 秋期 午前 問5:ベストフィット方式の特徴(ハッシュ関数)
- 令和3年度 春期 午前 問40:つまり一方向性の性質(ハッシュ関数)
- 令和2年度 10月 午前 問5:ポインタを用いた線形リストの特徴(ハッシュ関数)
- 平成30年度 秋期 午前 問27:ハッシュ関数に関する問題(ハッシュ関数)
- 平成27年度 秋期 午前 問5:衝突が起こるキーの組合せ(ハッシュ関数)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)