はじめに
今回はオーダー記法の定義について書いていきたいと思います。
オーダー記法とは関数の値の発散の速さを漸近的に評価するものです。
実用の仕方というよりはどのように定義をされているかという視点からみていきます。
O記法
O記法(ビックオー)は関数f(n) の発散のスピードは早くても g(n) と同じくらいという意味で用います。いわゆる関数の上界。
例:,
(本来ならは集合なのでが正しいですが、=
で書くことが多い)
条件を満たすような正定数を見つけられるかが一番の鍵となります。
簡単な例を用いて、証明をしてみましょう。
関数がに含まれるか?
証明:全ての整数に対して,.
Ω記法
Ω記法(ビック・オメガ)は関数f(n) の発散のスピードは遅くても g(n) と同じくらいという意味で用います。いわゆる関数の下界。
例:,
最後の方にあるが大切な箇所で,O記法と逆向きになっています。
Θ記法
Θ記法は関数の上界と下界が一致するという意味で用います。
例:
多項式時間と超多項式時間
計算時間が入力サイズnの多項式(定数cに対して)で表されるアルゴリズムを多項式時間アルゴリズムという.
逆に多項式時間アルゴリズムでないものを超多項式時間アルゴリズムと呼びます。
例)多項式時間:, ,
超多項式時間:, ,
これらを比べると圧倒的に多項式時間のほうが優秀です。
付録
ざっくりオーダー記法についてまとめましたが、そもそも関数f(n)のnはなにを指しているのでしょうか。
これは一般的に入力サイズ(入力長)を指します。
例えば入力が数字の10だったときは2桁の数ですが、2進数で表したら1010
の4bitです。
つまりコンピューター上では2進数で動作するので入力サイズは()となります。
そこで入力パラメーターにn,K
においてであったとしても、入力サイズがならnに対しては多項式であってもに対しては多項式ではなくなってしまいます(とすると。
このように入力サイズに基づいて考察すると、指数時間であるアルゴリズムを擬多項式時間アルゴリズムといったりします。
入力における数値がすべて一進数で与えられるものとしたときに、その入力サイズの多項式時間で動作するアルゴリズムのことを擬多項式時間アルゴリズムという。