基本情報技術者試験 - 令和6年公開問題 - 問2
キーが小文字のアルファベット1文字(a,b,…,z のいずれか)であるデータを,大きさが10のハッシュ表に格納する。ハッシュ関数として,アルファベットのASCIIコードを10進表記法で表したときの1の位の数を用いることにする。衝突が起こるキーの組合せはどれか。ASCIIコードでは,昇順に連続した2進数が,アルファベット順にコードとして割り当てられている。
| ア | a と i |
|---|---|
| イ | b と r |
| ウ | c と l |
| エ | d と x |
答え : エ
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › アルゴリズム
解説 :
ハッシュ関数を用いたハッシュ表への格納において,衝突が起こるキーの組み合わせを求める問題です。
ハッシュ関数はASCIIコードの10進表記の1の位を使うため,ASCIIコードの下1桁が同じアルファベット同士が衝突します。ASCIIコードはアルファベット順に連続して割り当てられているため,コードの差が10の倍数であるアルファベットの組み合わせが衝突することになります。
選択肢を確認すると,dとxはアルファベット順で20文字離れており,これはちょうど10の倍数であるため,ASCIIコードの下1桁が一致し衝突が発生します。従って,正解は選択肢「エ」です。
「ア」のaとiは8文字離れており10の倍数ではないため衝突しません。「イ」のbとrは16文字,「ウ」のcとlは9文字離れており,いずれも10の倍数ではないため衝突は起こりません。
ハッシュ関数による衝突を考える際は,「アルファベットの位置の差が使用するハッシュ表の大きさの倍数であるかどうか」に着目することがポイントです。
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › アルゴリズム
解説 :
ハッシュ関数を用いたハッシュ表への格納において,衝突が起こるキーの組み合わせを求める問題です。
ハッシュ関数はASCIIコードの10進表記の1の位を使うため,ASCIIコードの下1桁が同じアルファベット同士が衝突します。ASCIIコードはアルファベット順に連続して割り当てられているため,コードの差が10の倍数であるアルファベットの組み合わせが衝突することになります。
選択肢を確認すると,dとxはアルファベット順で20文字離れており,これはちょうど10の倍数であるため,ASCIIコードの下1桁が一致し衝突が発生します。従って,正解は選択肢「エ」です。
「ア」のaとiは8文字離れており10の倍数ではないため衝突しません。「イ」のbとrは16文字,「ウ」のcとlは9文字離れており,いずれも10の倍数ではないため衝突は起こりません。
ハッシュ関数による衝突を考える際は,「アルファベットの位置の差が使用するハッシュ表の大きさの倍数であるかどうか」に着目することがポイントです。