手帳と試行

学んだことをアウトプットしていきます。 日々、ノートあるのみ。

ビッグオー記法

計算量の理論で頻繁に登場するビッグオー記法を導入する。

ざっくりとした定義

まずはざっくりと定義を説明する。

以下、実数を入力して実数を出力する関数 f:RRf: \R \to \R を考える。

ビッグオー記法
The big-O\mathcal O notation

関数の入力値 xx が十分に大きい場合に、有限確定値 MM が存在して

f(x)Mg(x)\begin{aligned} |f(x)| \le M |g(x)| \end{aligned}

が成り立つことを

f(x)=O(g(x)) (x),f(x)O(g(x)),f(x)O(g(x))\begin{aligned} f(x) ={}& \mathcal O(g(x))~(x \to \infty), \\ f(x) \le{}& \mathcal O(g(x)), \\ f(x) \in{}& \mathcal O(g(x)) \\ \end{aligned}

などと表す。

このような表現方法は xx \to \infty のみならず、定数 aa に対して xax \to a であるような場合に対しても定義することができる。

The big-O\mathcal O notation

関数の入力値 xx が限りなく定数 aa に近づく際に、有限確定値 MM が存在して

f(x)Mg(x)\begin{aligned} |f(x)| \le M |g(x)| \end{aligned}

が成り立つことを

f(x)=O(g(x)) (xa)\begin{aligned} f(x) ={}& \mathcal O(g(x))~(x \to a) \end{aligned}

などと表す。

以上のような表記をビッグオー記法 (Big-O\mathcal O notation) という。

ビッグオメガ記法
The big-Ω\Omega notation

関数の入力値 xx が十分に大きい場合に、有限確定値 mm が存在して

f(x)mg(x)\begin{aligned} |f(x)| \ge m |g(x)| \end{aligned}

が成り立つことを

f(x)=Ω(g(x)) (x),f(x)Ω(g(x)),f(x)Ω(g(x))\begin{aligned} f(x) ={}& \Omega(g(x))~(x\to\infty), \\ f(x) \ge{}& \Omega(g(x)), \\ f(x) \in{}& \Omega(g(x)) \end{aligned}

などと表す。

ビッグオー記法とは不等号の向きが反対であることに注意しよう。ビッグオー記法と同様に、xx \to \infty のみならず定数 aa に対して xax \to a であるような場合に対しても定義することができる。

The big-Ω\Omega notation

関数の入力値 xx が限りなく定数 aa に近づく際に、有限確定値 mm が存在して

f(x)mg(x)\begin{aligned} |f(x)| \ge m |g(x)| \end{aligned}

が成り立つことを

f(x)=Ω(g(x)) (xa)\begin{aligned} f(x) ={}& \Omega(g(x))~(x \to a) \end{aligned}

などと表す。

以上のような表記をビッグオメガ記法 (Big-Ω\Omega notation) という。

ビッグシータ記法

ビッグオー記法による g(x)g(x) と、ビッグオメガ記法による g(x)g(x) が一致する場合には、しばしば

f(x)=Θ(g(x)) (x)f(x)=Θ(g(x)) (xa)\begin{aligned} f(x) ={}& \Theta(g(x)) ~ (x \to \infty)\\ f(x) ={}& \Theta(g(x)) ~ (x \to a) \end{aligned}

などと表される。この表記をビッグシータ記法という。

注意

等号により表現されていることからしばしば混乱を招く。たとえば

x2=O(x2) (x)2x2=O(x2) (x)\begin{aligned} x^2 ={}& \mathcal O(x^2) ~ (x\to\infty) \\ 2x^2 ={}& \mathcal O(x^2) ~ (x\to\infty) \end{aligned}

ではあるが、

x2=2x2x^2 = 2x^2

ではない。また、通常は xx\to\infty などは省略して

ex=O(2x)\begin{aligned} e^x ={}& \mathcal O(2^x) \end{aligned}

などと表現されるため、それが xx \to \infty なのか x0x \to 0 なのかは状況に応じて判断する必要がある。

具体的な使い方の例

  1. 入力が大きくなった場合の関数値の振る舞いを記述する
    2lognO(n2),2lognO(logn),2lognΘ(logn),2lognΩ(logn),2lognΩ(1)\begin{aligned} 2 \log n \in{}& \mathcal O(n^2),\\ 2 \log n \in{}& \mathcal O(\log n),\\ 2 \log n \in{}& \Theta(\log n),\\ 2 \log n \in{}& \Omega(\log n),\\ 2 \log n \in{}& \Omega(1) \end{aligned}

    以上のことから確認できるように、ビッグオー記法やビッグオメガ記法はそれぞれ関数の近似的な上界と下界を記すものであり、ビッグシータ記法に近いものほど意味を成す。

  2. 無限級数の振る舞いを記述する

    指数関数を3次の項までマクローリン展開すると

    exp(x)=1+11!x+12!x2+13!x3+O(x4) (x0)\exp(x) = 1 + \frac{1}{1!}x + \frac{1}{2!}x^2 + \frac{1}{3!}x^3 + \mathcal O(x^4)~(x \to 0)
  3. アルゴリズムの性能の限界を理論的に記述する

    多腕バンディット問題に対し、期待リグレット E[regret(n)]\mathrm{E} [\mathop{\rm regret}(n)] を最小化するというアプローチを取る場合、第 NN 回目の試行における期待リグレット E[regret(N)]\mathrm{E} [\mathop{\rm regret}(N)] の下界は

    E[regret(N)]=Ω(logN) (N)\mathrm{E} [\mathop{\rm regret}(N)] = \Omega(\log N) ~ (N \to \infty)

    であることが知られている。

より厳密な定義

より厳密には、イプシロン-デルタ論法を用いて次のように定義する。

The big-O\mathcal O notation and the big-Ω\Omega notation
f(x)=O(g(x)) (x)    defx0>0, M>0, [x>x0    f(x)Mg(x)]f(x)=O(g(x)) (xa)    defx0>0, M>0, [xa<x0    f(x)Mg(x)]f(x)=Ω(g(x)) (x)    defx0>0, m>0, [x>x0    f(x)mg(x)]f(x)=Ω(g(x)) (xa)    defx0>0, m>0, [xa<x0    f(x)mg(x)]\begin{aligned} &f(x) = \mathcal O(g(x)) ~ (x \to \infty) \\ &\qquad\overset{\rm def}\iff {}^\forall x_0\gt0,~ {}^\exists M\gt0,~ \left[ x \gt x_0 \implies |f(x)| \le M|g(x)| \right] \\ \\ &f(x) = \mathcal O(g(x)) ~ (x \to a) \\ &\qquad\overset{\rm def}\iff {}^\forall x_0\gt0,~ {}^\exists M\gt0,~ \left[ |x - a| \lt x_0 \implies |f(x)| \le M|g(x)| \right] \\ \\ &f(x) = \Omega(g(x)) ~ (x \to \infty) \\ &\qquad\overset{\rm def}\iff {}^\forall x_0\gt0,~ {}^\exists m\gt0,~ \left[ x \gt x_0 \implies |f(x)| \ge m|g(x)| \right] \\ \\ &f(x) = \Omega(g(x)) ~ (x \to a) \\ &\qquad\overset{\rm def}\iff {}^\forall x_0\gt0,~ {}^\exists m\gt0,~ \left[ |x - a| \lt x_0 \implies |f(x)| \ge m|g(x)| \right] \end{aligned}

別の理解

十分大きな xx に対して g(x)>0g(x) \gt 0 が成り立つ場合には、次のように書き換えることができる。

f(x)=O(g(x)) (x)    lim supxf(x)g(x)<f(x)=Ω(g(x)) (x)    lim infxf(x)g(x)>0\begin{aligned} f(x) &= \mathcal O(g(x))~(x\to\infty) & \iff && \limsup_{x\to\infty}\frac{|f(x)|}{g(x)} &\lt \infty \\ f(x) &= \Omega(g(x))~(x\to\infty) & \iff && \liminf_{x\to\infty}\frac{|f(x)|}{g(x)} &\gt 0 \end{aligned}