過去問解きまくり研究所 ホーム

平成30年度 秋期 午前 問27

アルゴリズム

ハッシュ関数に関する問題

自然数を除数とした剰余を返すハッシュ関数がある。値がそれぞれ 571,1168,1566 である三つのレコードのキー値を入力値としてこのハッシュ関数を施したところ,全てのハッシュ値が衝突した。このとき使用した除数は幾つか。

答えと解説を見る

✓ これが正解ウ199

解説

三つの差をすべて割り切る199です。

自然数で割った余りを返すハッシュ関数に三つのキー値を入れたところ、ハッシュ値が全て同じになった、という場面から、使った除数を求める問いです。キーの値から格納位置を決めるこの仕組みはハッシングと呼ばれます。手がかりは一つだけで、余りが同じという条件を引き算に言い換えられるかどうかです。ある二つの数を同じ数で割った余りが等しいなら、その二つの差は割り切れます。理由は簡単で、二つの数を除数の倍数と余りの和として書いてから引くと、余りが打ち消し合って除数の倍数だけが残るからです。そこで三つのキー値から差を作ります。1168から571を引くと597、1566から1168を引くと398、1566から571を引くと995です。求める除数は、この三本をすべて割り切る数でなければなりません。素因数に分けると、398は2と199の積、597は3と199の積、995は5と199の積ですから、三本に共通する約数は199だけです。よって除数は199です。検算します。571を199で割ると商が2で余りが173、1168なら商が5で余りが173、1566なら商が7で余りが173となり、三つとも同じ余りになります。見分けの軸は、差を割り切れるかどうかの一点です。選択肢が全て素数で並べられているときは、差を一度素因数分解すれば決まります。

ほかの選択肢はなぜ違うのか

この問題の用語

出典:平成30年度 秋期 応用情報技術者試験 午前 問27

同じ用語が出る問題

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)