

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
o(n^2)とは?初心者にも分かる基礎解説
o(n^2)は、アルゴリズムの実行時間や処理の規模を表す「漸近の成長率」を示す記法のひとつです。ここでの n は入力サイズを指します。小文字の oは little-o と呼ばれ、「n^2 より厳密に小さくなる」ことを意味します。具体的には、ある関数 f(n) が o(n^2) であるとは、任意の正の定数 ε > 0 に対して、十分大きな n について f(n) < ε n^2 が成り立つことを意味します。別の言い方をすれば、f(n)/n^2 の極限が 0 になる、ということです。
o(n^2)とO(n^2)の違い
O(n^2)は「n^2で上限がある」という意味で、実行時間が n^2 以下の成長であることを示します。一方、o(n^2)はそれより更に小さい成長を指します。つまり o(n^2) に含まれる関数は n^2 に対して比が 0 に近づく関係です。具体的な例として、n log n は o(n^2) ですが、n^2 は o(n^2) ではありません。
具体的な例
以下の例を見て違いを実感しましょう。各行の f(n)/n^2 の極限と結論を確認します。
| 関数 f(n) | f(n)/n^2 の極限 | 結論 |
|---|---|---|
| n log n | 0 | o(n^2) である |
| n^2 / log n | 1 / log n | 0 なので o(n^2) |
| n^2 | 1 | o(n^2) ではない |
| n^2 - n | 1 - 1/n | o(n^2) ではない |
| n^3 | n | o(n^2) ではない |
どうやって判定するの?
基本的な判定方法は二つです。
- 極限を使う方法: f(n)/n^2 を n → ∞ で調べ、0 になるかを確認します。
- 比較する方法: f(n) が n^2 より小さい別の関数と比較して、定義範囲で常に小さく保てるかをチェックします。
日常のプログラミングへの影響
o(n^2) の考え方は、アルゴリズムの「成長の上限」を考えるときに役立ちます。例えば、データの規模が大きくなるとき、どの部分が時間を多く占めるのかを分析する際に有効です。もし「ある処理が n^2 より遅く増えるとき」は、それは o(n^2) ではない可能性が高いと判断でき、他のアルゴリズムへ切り替えるヒントになります。
イメージで理解する
難しく感じるときは、山を登るときの「石の数」と考えると伝わりやすいです。n が大きくなるほど、石の数が増えるスピードを比べるとき、n^2よりも遅く増える関数が o(n^2) となります。
よくある誤解と注意点
・ o(n^2) と O(n^2) を混同しない。
・定数係数や低次の対数、平方根などを含む関数が o(n^2) に入るかは、極限を使って判断します。
・f(n) が n^2 に近づくときでも、必ずしも o(n^2) になるわけではありません。
まとめ
要点をまとめると、o(n^2) は n^2 より遅くなる関数を指し、f(n)/n^2 の極限が 0 になることが条件です。O(n^2)」との違いを理解し、極限の考え方を使って判定することが、アルゴリズム分析の第一歩です。
実務での活用ヒント
実務では、問題サイズが大きくなるとき、ボトルネックとなる部分を特定する際にオーダーの概念が役立ちます。例えば、データのソートや検索のアルゴリズムを選ぶとき、n^2 に近い成長を避ける設計を心掛けると、処理時間を大幅に抑えられることがあります。
o(n^2)の同意語
- 小オーダー n^2
- n^2 より厳密に成長が小さい関数を表す。f(n) = o(n^2) の定義に対応。例: f(n) = n log n などは o(n^2) に該当する。
- n^2より低いオーダー
- 関数の漸近的成長が n^2 より小さいことを意味する表現。f(n)/n^2 → 0 が成立することを含意する。
- n^2より遅い成長率
- 成長速度が n^2 に比べて遅いことを指す言い回し。o(n^2) の特徴を説明するときに使われる。
- n^2の下位オーダー
- n^2 に対して下位のオーダーで成長することを示す表現。
- n^2に対して無限小な成長
- f(n)/n^2 が 0 に近づく、すなわち n^2 に比べて成長が無限小であることを表す。
- f(n) = o(n^2)
- 厳密な式表現。関数 f(n) が n^2 に対して無限小の成長をすることを意味する。
- n^2より小さい漸近的成長
- 漸近的な観点で、成長が n^2 より小さいと説明する表現。
- n^2に対して無視できる寄与
- f(n) の成長は n^2 に対して無視できる程度であることを表す。つまり f(n)/n^2 → 0 という性質を含む。
o(n^2)の対義語・反対語
- ω(n^2)
- 意味: f(n) が n^2 よりも速く成長することを表す little-omega。すなわち、f(n)/n^2 → ∞ となる。例: f(n) = n^2 log n や f(n) = n^2 log log n は ω(n^2) に該当します。
- Ω(n^2)
- 意味: f(n) が少なくとも n^2 と同じかそれ以上の成長をすることを表す。すなわち、ある定数 c>0 と N が存在し、n≥N のとき f(n) ≥ c n^2。例: f(n) = 3n^2、f(n) = n^2 + n は Ω(n^2)。
- Θ(n^2)
- 意味: f(n) が n^2 と同程度の成長をすることを表す。すなわち、0 < a ≤ b と N が存在し、n≥N のとき a n^2 ≤ f(n) ≤ b n^2。例: f(n) = 2n^2 + 5、f(n) = n^2 のような関数。
o(n^2)の共起語
- 小o記法
- little-o記法は、ある関数が別の関数よりも成長が遅いことを厳密に表す記法です。f(n) = o(n^2) は、n が大きくなるにつれて f(n)/n^2 が 0 に近づくことを意味します。
- 大o記法
- Big-O記法は、関数の成長を上限として表す記法です。f(n) = O(n^2) なら、十分大きな n に対して f(n) は c·n^2 以下になる常数 c が存在します。
- 漸近記法
- 漸近記法は、n が十分大きくなったときの関数の挙動を表す総称です。小o、大o、Big-Theta などを含みます。
- 時間計算量
- アルゴリズムが実行するのに要する時間を n の関数として表す指標。o(n^2) は時間計算量が n^2 より小さいことを示します。
- 多項式時間
- 時間計算量が多項式関数で表される場合のこと。例として O(n^2)、O(n^3) などが挙げられます。
- 二次成長
- n が大きくなると成長量が二乗の速さになること。o(n^2) はこの二次成長よりさらに遅い成長を意味します。
- nの二乗
- n^2 は n の二乗を意味します。二次関数の典型的な成長の例です。
- 成長率の比較
- 異なる関数同士の成長の速さを比較する考え方。o(n^2) は多くの関数よりも遅い成長を示します。
- 極限値
- リミットの概念。f(n) = o(n^2) の場合、lim_{n→∞} f(n)/n^2 = 0 が成り立つことを意味します。
- 入力サイズ
- n は問題の入力サイズを表します。大きな n に対する挙動を分析する基準となります。
- 小oと大Oの関係
- 小oは大Oの厳密な部分集合です。f(n) = o(g(n)) なら f(n) = O(g(n)) も成り立ちますが、逆は必ずしも成り立ちません。
o(n^2)の関連用語
- O(n^2)
- 入力サイズ n に対して、実行時間が係数を掛けた n^2 に比例する成長率。代表的な例は外側と内側のループをネストして回す処理など、二次的な処理で発生します。
- 平方時間
- 時間計算量が n^2 に比例する状態を指す呼び名。二次時間計算量とも呼ばれます。
- 二次時間計算量
- 計算時間が n^2 に比例することを指す用語。O(n^2) の主な表現です。
- ビッグO記法
- アルゴリズムの『上限』を表す記法。最悪ケースの成長率を示し、O(n^2) のように書きます。
- ビッグΩ記法
- アルゴリズムの『下限』を表す記法。実行時間が最低でもこの量だけかかる、という下限を示します。
- ビッグΘ記法
- 上限と下限が一致する場合の『厳密な成長率』を表す記法。O(n^2) と Ω(n^2) が同じ場合に使われます。
- 小O記法
- little-o 記法。ある関数の成長が別の関数より厳密には小さいことを示します(例: o(n^2) は n^2 より成長が遅い)。
- オーダー記法
- 関数の成長率を表す総称。ビッグO/Θ/Ω/小O などを含みます。
- 二重ループ
- 外側と内側のループをネストして回す構造。データ量 n に対して典型的に O(n^2) の時間を生み出します。
- 多項式時間
- 計算時間が n の次数 k の多項式で表せる場合の総称。例: O(n^2) は二次の多項式時間です。
- 漸近分析
- 入力サイズ n を無限大へと近づけたときの挙動を分析する方法。成長率の比較に使われます。
- 入力サイズ n
- アルゴリズムが処理するデータの量を示す指標。計算量は基本的にこの n に依存します。
- 上界
- 計算量の最大の見積もり。O 記法で表すときの上限に相当します。
- 下界
- 計算量の最低の見積もり。Ω 記法で表すときの下限に相当します。
- 成長率
- 関数が入力サイズに対してどの程度速く大きくなるかの度合い。O(n^2) などが成長率の一例です。
- 最良時間計算量
- 最も良いケースで必要となる計算時間の見積もり。
- 平均時間計算量
- データの分布が一定と仮定したときの平均的な計算時間の見積もり。
- 空間計算量
- アルゴリズムが使用するメモリ量の見積もり。時間計算量と並んで性能指標として重要です。



















