ENGINEER_GUIDANCE: ハッシュ表構築ゲーム
ハッシュ表(Hash Table)は、データを極めて高速(O(1))に検索・追加・削除できる、実務で最も多用されるデータ構造の一つです。連想配列や辞書(Dictionary)の実装に利用されています。
1. ハッシュ関数と衝突 (Collision)
入力データを特定の計算式(このゲームでは「7で割った余り」)に通し、保存するインデックスを決定します。しかし、異なるデータが同じインデックスを指してしまう現象を「衝突(Collision)」と呼びます。この衝突をどう解決するかがシステム設計の鍵となります。
2. オープンアドレス法 (Open Addressing)
衝突が発生した際、隣の空きスロット(インデックス+1)を順番に探してデータを格納する方式です。
- メリット: 追加のメモリ領域(ポインタ等)が不要で、キャッシュ効率が良い。
- デメリット: データが密集すると、衝突が連鎖的に発生する「クラスター化」が起き、検索速度が著しく低下します。
3. チェーン法 (Chaining)
衝突が発生した際、スロット内に連結リスト(Linked List)を作成し、同じインデックスに複数のデータをぶら下げて格納する方式です。
- メリット: 衝突が多くなっても、オープンアドレス法のように他の無関係なスロットを浸食しないため、性能低下が緩やかです。
- デメリット: 連結リストを管理するための追加のメモリ領域(ポインタ)が必要になります。