操作して学ぶ
ハッシュテーブル可視化
辞書・連想配列・Set の裏側にあるハッシュテーブル。 キーをハッシュ値→索引に変えて置くだけなのに、なぜ平均O(1)で出し入れできるのか。 キーを挿入して、衝突の解決(チェイン法/線形探索)と、混んできた時のリサイズを動かして確かめてください。
各バケットが連結リスト。衝突しても同じ索引に繋げるので容量以上に入るが、長い鎖は探索が遅い。
負荷率 0.00(0 / 8)0.75超でリサイズ
#0
#1
#2
#3
#4
#5
#6
#7
押さえどころ
- 衝突は必ず起きる:無限のキーを有限のバケットに写すので、別のキーが同じ索引になる。どう解決するかが方式の違い。
- チェイン法:各バケットを連結リストに。容量以上に入るが、鎖が長いと探索が遅くなる。
- 線形探索(オープンアドレス):空きへずらして置く。キャッシュに優しいが、詰まると団子(クラスタ)ができ、負荷率が高いと急に遅くなる。
- 負荷率とリサイズ:要素数÷バケット数が一定(例: 0.75)を超えたら容量を倍にして全部入れ直す。これで平均O(1)を保つ。