メインコンテンツへ
アルゴリズムとプログラミング

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

ア.aとi
イ.bとr
ウ.cとl
エ.dとx正解

解説

ハッシュ関数は「棚番号の計算機」。同じ棚番号を出したら、それが衝突(バッティング)です。今回の棚番号ルールは「ASCIIコード(10進)の1の位だけ使う」というシンプルなもの。

なぜ エ が正解か

d のASCIIコードは 100 → 1の位は「0」。x のASCIIコードは 120 → 1の位も「0」。つまり二人とも「棚番号0番」に突っ込もうとする。コインロッカーで同じ番号を引いたようなもので、これが衝突です。差は20(アルファベット20文字分)なので、10の倍数だけ離れた文字は必ず同じ棚に入ることになります。

なぜ ア は間違いか

a=97(1の位7)、i=105(1の位5)→それぞれ棚7番と棚5番で別々に収まります。「a と i、仲良さそうな二文字」という見た目のトラップ。

なぜ イ は間違いか

b=98(1の位8)、r=114(1の位4)→棚8番と棚4番で仲良く別居。なぜか「b・r」ペアはいつも衝突しない運命。

なぜ ウ は間違いか

c=99(1の位9)、l=108(1の位8)→惜しい!隣の棚9番と8番で1つしかズレていないのに、衝突にならない。「惜しい!でも衝突は0か1か、グレーはない」と覚えましょう。

出典: 基本情報技術者試験 令和6年 公開問題