定数時間 O(1) — 永遠に遅くならない操作

O(1)定数時間計算量を理解します。配列、ハッシュマップ、スタックの例とともに、入力サイズに関係なく定数時間で実行される操作を学びます。

Complexity Classes

詳細な説明

O(1)定数時間とは?

操作がO(1) — 定数時間 — で実行されるとは、必要なステップ数が入力サイズに依存しないことを意味します。データセットが10要素でも1000万要素でも、操作はほぼ同じ時間で完了します。

一般的なO(1)操作

操作 データ構造 O(1)の理由
インデックスによるアクセス 配列 メモリオフセットの直接計算
先頭への挿入/削除 連結リスト ポインタの更新のみ
Push / Pop スタック トップポインタのみ変更
Enqueue / Dequeue キュー(双方向) 先頭/末尾ポインタの更新
キーによる検索 ハッシュテーブル(平均) ハッシュ関数 + 1バケットアクセス

定数時間が重要な理由

O(1)はパフォーマンスのゴールドスタンダードです。重要な操作をO(1)にできれば、スケーリングの懸念を完全に排除できます。

償却O(1)

一部の操作は償却O(1)です。つまり、個々の操作が時々遅くなっても、平均するとO(1)です。動的配列のpush()が典型的な例です。

注意点

  • ハッシュテーブルの検索は平均O(1)ですが、多くのキーが同じバケットにハッシュされると**最悪O(n)**になります。
  • 「定数時間」は「瞬時」を意味しません — 定数係数が大きい場合もあります。

ユースケース

キャッシュ検索、設定アクセス、スタックベースの解析、パフォーマンスクリティカルなコードのホットパスなど、効率的なデータアクセスパターンの設計に不可欠です。

試してみる — Big-O Reference

フルツールを開く