ホーム › エンジニアコラム › 計算量(Big O記法)入門
ALGORITHM

計算量(Big O記法)入門
プログラムの速さを見積もる

同じ結果を返すコードでも、データが増えたときの速さには大きな差が出ます。その「増え方」をざっくり表すのが計算量(Big O記法)です。難しい数学抜きで、コードを見て速さを見積もる感覚を身につけましょう。

📅 2026-07-23✍ progo編集部

計算量とは「データが増えたときの伸び方」

計算量は、入力データの件数を n としたとき、処理にかかる手数がどれくらいの勢いで増えるかを表します。実際の秒数ではなく「増え方の傾向」を見るのがポイントです。n が10でも100万でも、傾向が分かれば速さを予測できます。

代表的な計算量

記法名前例
O(1)定数時間配列の添字アクセス
O(log n)対数時間二分探索
O(n)線形時間配列を1周する
O(n log n)準線形時間高速なソート
O(n²)二乗時間二重ループ

下にいくほど、データが増えたときに遅くなりやすいと考えてください。

O(1):データ量に左右されない

配列の何番目かを直接取り出す処理は、件数がいくつでも1手で終わります。

function first(arr) {
  return arr[0];  // 件数に関係なく一定
}

O(n):件数に比例して増える

配列を最初から最後まで1回なめる処理は、件数が2倍になれば手数もおよそ2倍です。

function sum(arr) {
  let total = 0;
  for (const x of arr) total += x;  // n回まわる
  return total;
}

O(n²):二重ループに注意

ループの中でさらにループを回すと、件数の二乗で手数が増えます。100件で1万手、1000件で100万手と、一気に重くなります。

// すべてのペアを比較(重い)
for (let i = 0; i < arr.length; i++) {
  for (let j = 0; j < arr.length; j++) {
    compare(arr[i], arr[j]);
  }
}

「配列の中で重複を探す」ような処理は、うっかりO(n²)になりがちです。ハッシュ(オブジェクトやSet)を使うとO(n)に改善できることが多いです。

O(log n):一気に候補を半分にする

ソート済みデータから目的の値を探す二分探索は、1回の比較で候補を半分に絞ります。100万件でも約20回で見つかります。効率のよさが際立つパターンです。

定数や小さい項は無視する

Big Oでは「増え方の主役」だけを見ます。2n + 3 も n も、大きく見ればどちらもO(n)。細かい係数より、n²なのかnなのかという「桁の違い」に注目します。

まとめ

まずは「ループが何重か」を数えるだけでも、計算量の当たりがつきます。二重ループを見たら「O(n²)かも、改善できないか?」と考える——この習慣が、遅いコードに気づく第一歩です。実際に配列処理を書いて、progoのブラウザ実行環境で試してみましょう。

▼ ブラウザですぐにコードを試せます(インストール不要)

▶ エディタでO(n)の最大値探索を実行する