アルゴリズム(全101問中27問目)
No.27解説へ
キーが小文字のアルファベット1文字(a, b, …,z のいずれか)であるデータを,大きさが10のハッシュ表に格納する。ハッシュ関数として,アルファベットのASCIIコードを10進表記法で表したときの1の位の数を用いることにする。衝突が起こるキーの組合せはどれか。ASCIIコードでは,昇順に連続した2進数が,アルファベット順にコードとして割り当てられている。
出典:平成27年秋期 問 5
- a と i
- b と r
- c と l
- d と x
広告
解説
設問で説明されているように、ASCIIコード上のアルファベットは並び順どおりに連続した位置に配置されています。ハッシュ表の大きさが10であり、ASCIIコードを10進表記法で表したときの1の位の数を格納位置として使うとあります。例えばアルファベットのaのアスキーコードは16進数で61、10進数では97なので、ハッシュ表の7番目に格納されるということです。
格納対象のデータ数に対してハッシュ表が小さい場合、異なるデータの格納位置が同じ場所になってしまうことがあります。これが衝突です。設問のハッシュ表では、10進表現の1の位が同じとなるアルファベット同士で衝突が発生することになります。ASCIIコード上のアルファベットは順番に並んでいるので、2つの文字の距離が10の倍数になっているものが衝突が起こるキーの組合せです。
格納対象のデータ数に対してハッシュ表が小さい場合、異なるデータの格納位置が同じ場所になってしまうことがあります。これが衝突です。設問のハッシュ表では、10進表現の1の位が同じとなるアルファベット同士で衝突が発生することになります。ASCIIコード上のアルファベットは順番に並んでいるので、2つの文字の距離が10の倍数になっているものが衝突が起こるキーの組合せです。
- a と i の距離は8なので衝突は発生しません。
- b と r の距離は16ので衝突は発生しません。
- c と l の距離は9ので衝突は発生しません。
- 正しい。d と x の距離は20であり、10の倍数なので衝突が発生します。
広告