【おーだーきほう(びっぐおー)】

オーダー記法(ビッグオー) とは?

💡 「データが増えたら何倍遅くなるか」を一言で表す記法
📌 このページのポイント
計算量の成長曲線 データ量 (n) 処理時間 O(1) O(log n) O(n) O(n²) O(1) = 最速 O(log n) = 速い O(n) = 普通 O(n²) = 遅い
データ量が増えると計算量がどのように増加するかを示す曲線
ひよこ ひよこ

O(n)とかO(log n)って何を表しているの?

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

データの個数がnのとき、処理にどのくらいのステップがかかるかを表しているよ。O(n)はデータが2倍になれば処理も2倍かかる。O(log n)はデータが2倍になっても処理はたった1ステップ増えるだけの超効率的な処理。O(n²)はデータが2倍になれば処理は4倍かかる。

ひよこ ひよこ

係数は無視していいの?なんで?

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

ビッグオーは「データが大量になったとき全体の傾向」を見るためのものだから。「2n」と「3n」はどちらもO(n)で、データが100万件になれば「2倍か3倍か」より「n倍かn²倍か」の違いの方がはるかに重要になる。大きな絵を見るための記法だよ。

ひよこ ひよこ

実際の開発でビッグオーを気にする場面はある?

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

パフォーマンスが問題になったときに考えるよ。「なんでこんなに遅いんだろう」と調べると、O(n²)のループが入れ子になっていてデータが増えると急激に遅くなっていた、というケースはよくある。コードレビューでも「これはO(n²)になってない?」という指摘は実際によく出てくるよ。

ひよこ ひよこ

O(n log n)ってよく見るけど、どんなアルゴリズムで出てくるの?

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

ソートアルゴリズムの代表格だね。マージソートクイックソート(平均ケース)がO(n log n)で、これは「比較ベースのソートの理論上の最速」なんだ。面白いのは、O(n log n)は「データをn回処理するけど、毎回半分に分割していくからlog n回で済む」というイメージで理解できること。100万件のデータでもlog₂(1,000,000)≒20だから、O(n²)の1兆回に対してO(n log n)は2000万回程度。この差が実務で「使い物になるかどうか」を分けるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ビッグオー」って出てきたら「データが増えたら処理速度がどう変化するかを表す記号」と思えばだいたいOK!
📖 おまけ:英語の意味
「Big O Notation」 = 大きいオーの記法
💬 数学の「O記法(ランダウ記号)」が由来。19世紀のドイツの数学者エドムント・ランダウが考案した。「Order(程度・規模)」のOとも解釈されるよ
← 用語集にもどる