【じかんけいさんりょう】

時間計算量 とは?

💡 アルゴリズムの「速さの格付け」
📌 このページのポイント
時間計算量 — データ量と処理時間の関係 データ量 (n) 処理時間 O(1) O(log n) O(n) O(n²) 定数時間 対数時間 線形時間 二乗時間
時間計算量の比較イメージ
ひよこ ひよこ

O(n)って何を意味するの?

ペンギン先生 ペンギン先生

データがn個の時、処理回数がnに比例するという意味。配列の全要素を1回ずつ見る処理がO(n)。nが2倍になれば処理時間も2倍。O(n²)はデータが2倍になると処理時間が4倍、O(2^n)は1つ増えるだけで2倍になる。定数倍は無視して成長の「傾向」を表すのがO記法のポイントだよ

ひよこ ひよこ

実際にどう使い分けるの?

ペンギン先生 ペンギン先生

データ量1万件でO(n²)だと1億回の処理。O(n log n)なら約14万回。差は約700倍。100万件ならO(n²)は1兆回で実質不可能、O(n log n)なら2000万回で余裕。だから大量データを扱う場面ではO(n²)のアルゴリズムを避けるのが鉄則。「とりあえず動くコード」と「スケールするコード」の違いはここにあるよ

ひよこ ひよこ

定数倍は本当に無視していい?

ペンギン先生 ペンギン先生

理論的にはYes、実務的にはNoだね。O(n)でも定数倍が大きければO(n log n)より遅いことがある。特に小さいnでは定数倍やオーバーヘッドが支配的。キャッシュのヒット率やメモリアクセスパターンも実際の速度に影響する。でもnが大きくなれば成長率が支配するから、まずはO記法で考えるのが正しいアプローチだよ

ひよこ ひよこ

プログラマが覚えておくべき計算量は?

ペンギン先生 ペンギン先生

ハッシュテーブルの検索=O(1)、②ソート済み配列二分探索=O(log n)、③配列の線形探索=O(n)、④効率的ソート=O(n log n)、⑤二重ループ=O(n²)。この5つを覚えておけば「この処理は遅くなりそう」という勘が働くようになる。あとは「O(n²)以上はnが1万を超えると厳しい」という体感値を持っておくと実務で役立つよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「時間計算量」って出てきたら「アルゴリズムがデータ量に対してどれくらい遅くなるかの指標」と思えればだいたいOK!
📖 おまけ:英語の意味
「Time Complexity」 = 時間計算量
💬 Complexity(複雑さ)を時間の観点で測る。空間計算量(メモリ使用量)とセットで考えるよ
← 用語集にもどる