計算量とO記法をやさしく図解 — O(n)・O(log n)・O(n²)とは

公開: 2026年7月 カテゴリ: アルゴリズム

「O(n) と O(log n) ってどっちが速いの?」——計算量は、データが増えたとき処理がどれだけ遅くなるかを表すモノサシです。細かい秒数ではなく「増え方の型」で比べるのがコツ。この記事では、代表的なオーダーを速い順に整理します。実際の速さの差を体感するなら 探索の可視化ソートの可視化 もどうぞ。

計算量とは — 「増え方の型」で比べる

同じ処理でも、パソコンの性能やプログラミング言語で実際の秒数は変わります。そこで、データの個数 n が増えたときに手数がどんな勢いで増えるかという「型」だけを取り出して比較します。これを計算量(オーダー)といい、O( ) で書くのでO記法(ビッグオー)と呼びます。定数倍や小さい項は無視し、いちばん効く部分だけを見ます。

代表的なオーダー(速い順)

オーダー呼び方n が2倍になると代表例
O(1)定数時間変わらない配列の添字アクセス a[i]
O(log n)対数時間+1回だけ増える二分探索
O(n)線形時間2倍線形探索、合計を求める
O(n log n)準線形2倍より少し多いクイックソート、マージソート
O(n²)2乗時間4倍バブルソート(二重ループ)
O(2ⁿ)指数時間2乗になる総当たり(全組み合わせ)

上ほど「データが増えても平気」、下ほど「データが増えると急に遅くなる」オーダーです。

データ数 n が増えたときの手数の伸び方 データ数 n → 手数 → O(1) O(log n) O(n) O(n log n) O(n²)
図1: 同じ出発点でも、下のオーダーほど急カーブで手数が跳ね上がる。nが大きいほど差が開く

数で見る — n が増えたときの手数

「どれくらい違うのか」を具体的な数で見ると、差の大きさが実感できます。

nO(log n)O(n)O(n log n)O(n²)
10約310約33100
100約7100約66410,000
1,000約101,000約9,9661,000,000
1,000,000約20100万約2,000万1兆

100万個のデータでも、O(log n) なら約20手。一方 O(n²) は1兆手——現実的な時間で終わりません。「整列してから二分探索」が速い理由が、この数字に表れています。

🔍 差を体感するなら:探索アルゴリズム可視化で、線形探索 O(n) と二分探索 O(log n) の比較回数を並べて見られます。個数を31個にすると、線形は最大31回・二分は最大5回。ソートアルゴリズム可視化では、O(n²)のバブルソートとO(n log n)のクイック・マージソートの手数の違いをアニメと数字で確かめられます。

なぜ定数や小さい項を無視するの?

O記法は「nがとても大きいときの振る舞い」を見る道具だからです。たとえば 3n + 100 という手数でも、nが十分大きければ +100 や係数 3 より n の大きさが結果を支配します。だから O(n) とだけ書きます。同様に n² + nO(n²)いちばん速く伸びる項だけを残すのがO記法のルールです。

時間計算量と空間計算量

計算量には、処理時間の伸びを表す「時間計算量」と、使うメモリ量の伸びを表す「空間計算量」があります。速さとメモリはトレードオフになることが多く、たとえばマージソートは高速(O(n log n))ですが、作業用の配列に追加メモリ(O(n))が要ります。アルゴリズム選びは「時間 vs メモリ」の兼ね合いでもあります。

基本情報技術者試験ではこう出る

「線形探索と二分探索の計算量」「バブルソートの計算量(O(n²))」「データ数が増えたときの処理時間の増え方」「最悪・平均計算量の違い」が定番です。押さえるべきは、速い順に O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) の並びと、二分探索=O(log n)、単純な二重ループ=O(n²) という代表例。可視化で比較回数を見ておくと、選択問題で迷いません。

よくある質問

Q. O(n log n) より速いソートはないの?
A. 「値を比較して並べる」タイプのソートは、原理的に最速でも O(n log n) です。ただし、値の範囲が限られている場合は、比較を使わない特殊なソート(バケットソート・基数ソートなど)で O(n) に近づけることもあります。

Q. O(1) は「一瞬」という意味?
A. 「データ数が増えても手数が変わらない(一定)」という意味で、必ずしも高速とは限りません。定数が大きければ遅いこともあります。あくまでnに対して増えないことを表す記号です。

Q. 実務で計算量を気にする場面は?
A. データ件数が将来大きく増える処理(ログ集計、検索、一覧表示など)です。件数が少ないうちは O(n²) でも動きますが、増えると突然重くなります。設計時に「n が大きくなったらどうなるか」を見積もるのに使います。

まとめ

計算量は、データが増えたときの手数の伸び方を型で表したもの。O(1)<O(log n)<O(n)<O(n log n)<O(n²)<O(2ⁿ) の順を覚え、代表例(二分探索=O(log n)、二重ループ=O(n²))と結びつければ、試験でも実務でも役立ちます。数字と可視化で「差の大きさ」を体で覚えておきましょう。

関連ページ: 探索アルゴリズム可視化ソートアルゴリズム可視化データ構造をやさしく図解記事一覧