ITの基礎知識|ITパスポート・基本情報

基本情報技術者 令和6年公開問題 科目A 問2

2026.06.12

キーが小文字のアルファベット 1 文字(a,b,…,z のいずれか)であるデータを,大きさが 10 のハッシュ表に格納する。ハッシュ関数として,アルファベットの ASCII コードを 10 進表記法で表したときの 1 の位の数を用いることにする。衝突が起こるキーの組合せはどれか。ASCII コードでは,昇順に連続した 2 進数が,アルファベット順にコードとして割り当てられている。

  • ア a と i
  • イ b と r
  • ウ c と l
  • エ d と x

Show answer

正解: エ

解説:

衝突(コリジョン)とは,異なるキーに対してハッシュ関数が同じ値(同じ格納位置)を返してしまうことです。

今回は、「キーが小文字のアルファベット1 文字であるデータを,大きさが10 のハッシュ表に格納」ということですが、アルファベットは26文字ありますので、それを大きさ10のハッシュ表に収めようとすると、確実に足りませんね。

また、以下の条件が提示されているので、それを元に実際に衝突する組み合わせを得るのがこの問題です。

  • ハッシュ関数として,アルファベットのASCII コードを10 進表記法で表したときの1 の位の数を用いる
  • ASCII コードでは,昇順に連続した2 進数が,アルファベット順にコードとして割り当てられている

この条件から、「とある文字からアルファベット順で10文字後の文字とは必ず衝突する」ということが分かります。なので、以下のように、横10列のレイアウトでアルファベットの表を作れば、同じ列にあるものが衝突するパターンであることが分かります。*逆に【同じ行】にある者同士は、絶対に衝突しません。

上の表では、同じ選択肢のものを同じ背景にしていますが、これで同じ列に同じ色のものがあれば、それが衝突するデータということが分かります。

なお、ハッシュ値を求めて比較することでも対応できます。その場合、実際の小文字 a の ASCII コードは 10 進で 97 です。これを元に、選択肢にある各文字のコードと「1 の位」(ハッシュ値)は次のようになります。*但し正確なASCII コードの 10 進数値である必要はないので、仮の値でも全然OKです。

  • a=97 → 7
  • b=98 → 8
  • c=99 → 9
  • d=100 → 0
  • i=105 → 5
  • l=108 → 8
  • r=114 → 4
  • x=120 → 0

各選択肢のハッシュ値を比較します。

  • ア:a=7,i=5 → 衝突しない
  • イ:b=8,r=4 → 衝突しない
  • ウ:c=9,l=8 → 衝突しない
  • エ:d=0,x=0 → 衝突する

いずれにしても、アルファベットの文字順は正確に覚えていないと、正解は出来ませんので、その点は注意が必要です。