平成20年春期 午前問12
広告
うたこさん
(No.1)
もっと短時間で解きたいです。
mod(データ,8) と、除数が8(=2の3乗)なので、
①9個の16進数の1桁目だけに注目して、それぞれ2進数にする。
②2進数にした値を右に3ビットシフト
③あふれた3ビットを比較すると、
010、101、011、100、110、001、111、010、011
1Aの余り(010)とB2の余り(010) が最初に衝突します。
mod(データ,8) と、除数が8(=2の3乗)なので、
①9個の16進数の1桁目だけに注目して、それぞれ2進数にする。
②2進数にした値を右に3ビットシフト
③あふれた3ビットを比較すると、
010、101、011、100、110、001、111、010、011
1Aの余り(010)とB2の余り(010) が最初に衝突します。
2018.02.06 20:56
通りすがりの者さん
(No.2)
このサイトの解説は正攻法ですが、私はいつも効率的に解くことを考えます。
このハッシュ関数は8で割った余りですが、16進数の左側(16の桁)は必ず8で割り切れますので、右側(1の桁)だけを8で割った余りと一致します。
順番に、
Aは余り2、
5は余り5、
Bは余り3、
4は余り4、
Eは余り6、
1は余り1、
Fは余り7、
2は余り2、
3は余り3
となり、1AとB2が最初に衝突します。
しかし、たまたま8で割った余りの問題だからこのように解けますが、例えば11で割った余りなどで出たら、正攻法しかありません。
このハッシュ関数は8で割った余りですが、16進数の左側(16の桁)は必ず8で割り切れますので、右側(1の桁)だけを8で割った余りと一致します。
順番に、
Aは余り2、
5は余り5、
Bは余り3、
4は余り4、
Eは余り6、
1は余り1、
Fは余り7、
2は余り2、
3は余り3
となり、1AとB2が最初に衝突します。
しかし、たまたま8で割った余りの問題だからこのように解けますが、例えば11で割った余りなどで出たら、正攻法しかありません。
2018.02.06 21:18
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。