操作して学ぶ

ハッシュテーブル可視化

辞書・連想配列・Set の裏側にあるハッシュテーブル。 キーをハッシュ値→索引に変えて置くだけなのに、なぜ平均O(1)で出し入れできるのか。 キーを挿入して、衝突の解決(チェイン法/線形探索)と、混んできた時のリサイズを動かして確かめてください。

各バケットが連結リスト。衝突しても同じ索引に繋げるので容量以上に入るが、長い鎖は探索が遅い。

負荷率 0.000 / 80.75超でリサイズ

#0

#1

#2

#3

#4

#5

#6

#7

押さえどころ

  • 衝突は必ず起きる:無限のキーを有限のバケットに写すので、別のキーが同じ索引になる。どう解決するかが方式の違い。
  • チェイン法:各バケットを連結リストに。容量以上に入るが、鎖が長いと探索が遅くなる。
  • 線形探索(オープンアドレス):空きへずらして置く。キャッシュに優しいが、詰まると団子(クラスタ)ができ、負荷率が高いと急に遅くなる。
  • 負荷率とリサイズ:要素数÷バケット数が一定(例: 0.75)を超えたら容量を倍にして全部入れ直す。これで平均O(1)を保つ。