ハッシュテーブルの計算量 — 平均O(1)、最悪O(n)

ハッシュテーブルの時間計算量を深く探ります:検索が平均O(1)である理由、O(n)に劣化する場合、負荷率、リサイズ、衝突解決がパフォーマンスに与える影響。

Data Structures

詳細な説明

ハッシュテーブルの時間計算量

ハッシュテーブルは、**平均O(1)**の検索、挿入、削除を提供します。

操作の計算量

操作 平均 最悪
検索 O(1) O(n)
挿入 O(1)* O(n)
削除 O(1) O(n)
リサイズ O(n) O(n)

*リサイズを考慮した償却O(1)。

衝突解決戦略

戦略 平均検索 最悪検索 キャッシュ効率?
チェイニング O(1) O(n) No
オープンアドレス O(1) O(n) Yes
Robin Hoodハッシング O(1) O(log n) expected Yes
カッコウハッシング O(1) worst case O(1) Moderate

言語別実装

  • Python dict: オープンアドレス + 摂動
  • Java HashMap: チェイニング、バケット8仦超過で赤黒木に変換
  • C++ unordered_map: バケット付きチェイニング
  • Go map: オーバーフローバケット付きハッシュマップ

ユースケース

ハッシュテーブルは、キャッシュ、データベースインデックス、コンパイラのシンボルテーブル、頻度カウント、重複排除、高速なキーバリューアクセスが必要なあらゆるシナリオに不可欠です。

試してみる — Big-O Reference

フルツールを開く