ランダウの記号
ランダウの記号（ランダウのきごう、）は、関数の極限における値の変化度合いに、おおよその評価を与えるための記法である。
ランダウの漸近記法 、ランダウ記法 あるいは主要な記号として "O" （オーもしくはオミクロン "Ο"。数字の0ではない）を用いることから（ランダウの）"O"-記法、ランダウのオミクロンなどともいう。
記号 "O" は「程度」の意味のオーダー（Order）から。
なおここでいうランダウはエドムント・ランダウの事であり、『理論物理学教程』の著者であるレフ・ランダウとは別人である。
ランダウの記号は数学や計算機科学をはじめとした様々な分野で用いられる。
ランダウの記号
は変数 "x" を極限に飛ばした時の関数 "f" の振る舞い（漸近的挙動）を、別の関数 "g" を目安にして記述する目的で用いられる。
たとえば "f"("x") = 3"x" + 4"x" − 5 において "x" を ∞ に飛ばした時の "f" の挙動を考えると、"x" が十分大きいところでは第一項がその他の項に比べて極端に大きく、二項目以降はいわば「誤差」にすぎなくなる。したがって "f" の挙動は「定数×"x" 」とほぼ等しくなる。ランダウの "O"-記法を用いる事でこの事実を
と書き表す事ができる。
このように "g" は "f" よりも簡単な関数（上の例では "x"）が用いられる事が多い。
また前述の関数 "f" は二次関数であるので、"x" が十分大きいところでは "x" よりはるかに小さい。ランダウの "o"-記法を用いる事でこの事実を
と書き表す事ができる。
上では "x" を ∞ に飛ばした時の挙動を例にとって説明したが、何らかの定数に近づけたり −∞ に飛ばした時の挙動も同様にランダウ記号で書き表せる。"x" をどこに飛ばしたときの話であるのかは文脈から判断するよりないが、どこに飛ばしたかを明示する為に、
のように書き表す事もできる。
"f"("x") = "O"("g"("x")), "f"("x") = "o"("g"("x")) ("x" → ∞) はそれぞれを表す。（厳密にはε-δ論法で定義する。）
ランダウ記法は様々な分野で有益であり、たとえば指数関数を3次までテイラー展開したものは
と書き表せる。
記号 "O" と"o" は通常、関数の収束や発散の漸近的な上界を記述する為に用いられる。同様に漸近的な下界を記述する為にΩ, ωという類似記法が用いられ、上下両方を記述する為にΘ という記法を用いる。
ただし、Ω、ω、Θは主に計算機科学で用いられる記法であり、数学では "O" と "o" をこれらの意味に流用する事が多い（どの意味で用いているのかは文脈から判断）。
十分大きい全ての実数 "x" に対し定義されている実数値関数 "f"("x") と "g"("x") に対し、
を
と定義し、「"f"("x") が "x" → ∞ のとき オーダー"O"("g"("x")) である」と呼ぶ。
また、"a" を実数とするとき、"a"の近傍付近で定義された実数値関数"f"("x") と "g"("x") に対し、
を
で定義し、「"f"("x") が "x" → "a" のとき オーダー"O"("g"("x")) である」と呼ぶ。
なお、"a" の十分近くで　"g"("x") が 0 の値をとらない場合、formula_1は
が満たされることと同値である（"a" が∞の場合も同様）。
上で定義された
という記法は少し紛らわしい記法の濫用で、二つの関数が等しいという意味ではない。
この記法の濫用は、等号の両辺に"O" -記法が登場した際に問題となり、例えば"x" →∞のとき、
すなわち、両辺に"O" -記法が登場した場合には、直観的には十分大きな"x" で左辺/右辺が定数未満になる事を意味する。
こうした記法上の問題を回避する為に、
ないし、
と書く流儀もある。前者の場合、「"O"("g")」 は "g" の定数倍によって押さえられる関数全体からなる集合であるとみなしていることになる。
より複雑な使い方としては、"O"( ) が等式の異なる場所に複数、もちろん両辺にわたって複数回現れるというものがある。例えば、以下は "n" → ∞ で正しい内容を記述している。
これらの式の意味は、次のように解釈する：
例えば三つの目の式は、
事を意味する。
二つの目の式のように左辺に複数の"O"()がある場合は、それらすべてに対して上述のルールを適応する。したがって二つの目の式は、
事を意味する。以下の性質も重要である。漸近記法は多変数になっても有効である。たとえば
という言及が示唆するのは、定数 "C", "N" で
を満たすものの存在である。ここで "g"("n", "m") は
で定められるものである。混乱を避けるためには、動かす変数は常に明示する必要がある。つまり
という言明は、次の
とは明確に異なる言明である。
"O"-記法と関連がある、Ω-記法、ω-記法、Θ-記法を導入する。
Ω-記法とω-記法はそれぞれ、"O"-記法と"o"-記法の定義で大小を反転させる事により得られる。Θ-記法Θ(g)は "O(g)" と Ω"(g)" を両方満たすことを意味する。
ただし、Ω-記法に関しては、この記法を初めて導入したハーディーとリトルウッドは今日のそれとは若干異なった意味に用いていたので、あわせてそれも記す。(以下の表の「HLの定義」の部分)。
今日の定義との違いの要点をかいつまんでいえば、今日の定義ではΩ-記法は前述のように"O"-記法の定義の大小反転だが、ハーディー達の定義ではΩ(g)は"o(g)"を満たさない事として定義していた。
両者の定義は性質のよい関数、例えば多項式に対しては同値だが、極限に近づく際に振動するような関数に関しては必ずしも同値ではない。
また、計算機科学では
を
の意味で用いる。対数因子を無視すればこれは本質的には O-記法である。この記法は "nit-picking" のクラスを記述するのにしばしば用いられる。これは log("n") が任意の定数 "k" と正の定数 ε に対して常に ο("n") となるからである。
関数のとりうる値は、絶対値をノルムに取り替えるだけでそのまま任意のノルム線型空間の元に一般化できる。"f" や "g" は同じ空間に値を取る必要はない。"g" のとる値は任意の位相群の元にすることも可能である。
「極限操作」""x" → "x"" は、勝手なフィルター基の導入によって "f" と "g" の有向点族として一般化される。
"o"-記法は微分の定義や、極めて一般の空間における微分可能性を定義するのに有効である。また、関数の漸近同値を
と定めることができる。これは同値関係であり、上述の "f" が Θ("g") 程度であるという関係よりもなお強い制限を表す記法になっている。"f" と "g" が正値実数値関数なら lim "f"/"g" = 1 なる関係式に簡略化できる。例えば、2"x" は Θ("x") のオーダーだが、 2"x" − "x" は "o"("x") のオーダーでない。
計算機科学、特に計算量理論、アルゴリズム論、暗号理論では、アルゴリズムの計算時間を評価するのに "O"-記法を頻繁に用いる。
アルゴリズムの計算量の評価よく使われる"O"-記法関数の種類を示す。
これらの中でも特に重要なものには、個別の名称がついている(多項式時間など)。
以下、 "n"はアルゴリズムに入力されるデータのビット数を表す。
注意しなければならないのは、アルゴリズムに整数 "N" を入力するときである。"N" のビット数 "n" はおよそ log "N" なので、例えば「多項式時間」といったとき、これは"N" の多項式ではなく "n" の多項式を表す。
一般的ではないが、更に発散速度の速い関数も存在する（アッカーマン関数 A("m, n") など）。逆に更に発散速度の遅い関数として、逆関数である逆アッカーマン関数 α("n") などもあり、実際にあるアルゴリズムの計算量の見積りとして出現する。この関数は上界こそないものの、非常に発散速度が遅いために実用的には定数と見なされる (α(3) = 1, α(7) = 2, α(61) = 3, formula_40, ...)。
"O"-記法はドイツの数論家であるによって1894年に彼の著書『解析数論』("") の第二巻で初めて導入された（1892年に著された第一巻では用いられていない）。これに触発されてエドムント・ランダウが1909年に"o"-記法を発明した。
なお、ハーディとリトルウッドもランダウの記号formula_41に相当するものを別の記号formula_42で表現している。彼らはΩ-記法も現在と近い意味で用いており、今日の言葉でいえば、彼らのΩはo(g)でない事を表している。
ドナルド・クヌースは、計算機科学の世界に"O"-記法を導入し、Ω-記法やΘ-記法も再導入した。
関数 "f"("n") が他の関数の有限和で表せるとき(多項式であるとき)、その内最も発散速度の速い関数が "f"("n") のオーダーを決定づける。以下にその例を挙げる。
例での場合、係数を無視して"n"に関する項を見ると、log "n"、(log "n")、"n"、"n"の4つが存在し、このうち"n"が最も発散が速い。そのため、他の"n"に関する項に関わらず、オーダーは"O"("n")とする。
特に、関数が "n" の多項式でおさえられるならば、"n" が無限大に発散するに従ってより低いオーダーの項まで無視できるようになる。
"O"("n") と "O"("c") は全く異なる。前者の定数 "c"がどれほど大きかろうと、後者の方がずっとずっと速く発散する。どのような定数 "c" に対しても "n"より速く発散する関数は超多項式 と呼ばれる。また、どのような定数 "c" に対しても "c" よりも遅く発散する関数は準指数関数 と呼ばれる。アルゴリズムの計算量が超多項式かつ準指数関数であることもあり得る。例えば、現在知られている内で最も早い因数分解のアルゴリズムもこれに含まれる。
"O"(log "n") と "O"(log("n")) は全く等価である。なぜならば、log("n") = "c" log "n" より2つの指数関数は定数係数のみが異なり、これは big "O"-記法では無視されるからである。同様に異なる底を持つ対数関数も等価であるが、一方、異なる底を持つ指数関数は等価ではない。これはよくある勘違いである。例えば、2 と 3 は同じオーダーではない。
入力サイズの単位の変更は、アルゴリズムの計算量を変えるかもしれないしそうでないかもしれない。単位を変更するということは、関数に現れる全ての "n" にある定数を掛けることと同じである。例えば、アルゴリズムが "n" のオーダーで動くとき、"n" を "cn" で置き換えれば計算量は "c""n" となり、big "O"-記法では "c" は無視されるので計算量は変化しない ("c""n" ∈ "O"("n"))。しかし例えば 2 のオーダーで動くアルゴリズムでは、"n" を "cn" で置き換えると計算量は 2 = (2) となる。これは 2 とは等しくない（もちろん、"c" = 1 の場合を除く）。
次の多項式関数を考える
このとき、"f"("x") のオーダーは "O"("g"("x")) または "O"("x") である。実際、オーダーの定義からこれはある定数 "C"と "x" が存在して、"x" < "x" なる任意の "x" に対し |"f"("x")| ≤ "C" |"g"("x")| が成り立つことを意味するが、"x" > 1 において
であるから、"C" = 13, "x" = 1 とおけばよい。
すなわち、一般的な行列に対してその固有値を計算するのに掛かる時間が "n" のオーダーを下回るアルゴリズムは存在しない。
"O"-記法はアルゴリズムの効率を解析するのに有用である。たとえば、あるサイズ "n" の問題(例えば処理すべきデータが "n" 個あるなど)を解くのに掛かる時間あるいは手順数が "T"("n") = 4"n" − 2"n" + 2 である場合を考える。
このとき、"n" を次第に大きくしていくと、 "T"("n") に対して "n" の項の影響が支配的になり、他の項はほとんど無視できるようになる（たとえば "n" = 500 としてみると、4"n" の項は 2"n" の項の実に1000倍であり、後者を無視しても式に与える影響は、計算量を考える上でほとんど無視できる）。
さらに、"n" や 2 といった他のオーダーの式と比較する分には係数も無関係になる（たとえば "T"("n") = 1,000,000"n" のように係数が大きい関数と、それより指数が1大きい "U"("n") = "n" を比較する。仮に "n" = 1,000,000 としてみると "T"(1,000,000) = 1,000,000×1,000,000 = 1,000,000 = "U"(1,000,000) だから、"n" > 1,000,000 の場合は常に "U"("n") > "T"("n") である。）。
こうして残る影響をすくい上げて、"O"-記法では
と書いて、「"n" のオーダーである」と言い、これによってこのアルゴリズムの時間あるいは手順数"T"("n") の増加具合が "n" に支配されることを表現する。