回答:
f∈O(g)は、本質的に
以下のために少なくとも一つの定数の選択K > 0、あなたは定数見つけることができ不平等0、A <= f(x)が<=キロ(x)は、Xのすべてのために保持している>ようにします。
O(g)は、この条件が満たされるすべての関数のセットであることに注意してください。
f∈o(g)は、本質的に言う
以下のために、すべての定数の選択K > 0、あなたは定数見つけることができ不平等0、A <= f(x)が<キログラム(x)は、Xのすべてのために保持している>ようにします。
ここでも、o(g)がセットであることに注意してください。
Big-Oでは、不等式が何らかの最小値xを超えて保持される特定の乗数kを見つける必要があるだけです。
Little-oでは、kをどのように小さくしても、それが負またはゼロでない限り、不等式が成り立つ最小xがある必要があります。
これらはどちらも上限を説明していますが、多少直感に反しますが、Little-oの方が強力な声明です。f g O(g)の場合よりもf∈o(g)の場合の方が、fとgの成長率のギャップははるかに大きくなります。
視差の1つの例は次のとおりです。f∈O(f)は真ですが、f∈o(f)は偽です。したがって、Big-Oは「f∈O(g)はfの漸近的成長がgの成長よりも速くないことを意味する」と読むことができます。<=
対のようなもの<
です。
より具体的には、g(x)の値がf(x)の値の定数倍である場合、f∈O(g)は真です。これが、big-O表記で作業するときに定数をドロップできる理由です。
ただし、f∈o(g)がtrueになるためには、gの式にxのより高い累乗が含まれている必要があるため、xが大きくなるにつれて、f(x)とg(x)の間の相対的な間隔が実際に大きくなる必要があります。
(アルゴリズムを参照するのではなく)純粋に数学の例を使用するには:
以下はBig-Oに当てはまりますが、little-oを使用した場合は当てはまりません。
以下はlittle-oに当てはまります。
f∈o(g)の場合、これはf∈O(g)を意味することに注意してください。たとえばx²∈o(x³)なので、x²∈O(x³)であることも真実です(ここでも、O <=
をoとして、oをとして考えます<
)
a
そこにあるすべてのためにk
...」ではなく、「すべてにk
それがあるためにa
...」
Big-Oは、Little-Oと同じ≤
です<
。Big-Oは包括的上限であり、Little-Oは厳密な上限です。
たとえば、関数f(n) = 3n
は次のとおりです。
O(n²)
、o(n²)
とO(n)
O(lg n)
、o(lg n)
またはo(n)
同様に、数1
は次のとおりです。
≤ 2
、、< 2
および≤ 1
≤ 0
、< 0
または< 1
以下は、一般的なアイデアを示す表です。
(注:この表は適切なガイドですが、その制限の定義は通常の制限ではなく上位制限の観点から行う必要があります。たとえば、3 + (n mod 2)
3と4の間で永続的に変動します。O(1)
通常の制限がないにもかかわらず、 a lim sup
:4.)
Big-O表記を漸近比較に変換する方法を覚えておくことをお勧めします。比較は覚えやすくなりますが、n O(1) = Pのようなことは言えないため、柔軟性が低くなります。
概念的に何かを理解できない場合、なぜXを使用するのかを考えることは、Xを理解するのに役立ちます(これを試したことがないのは言うまでもありませんが、私はただステージを設定しています)。
[知っていること]アルゴリズムを分類する一般的な方法は実行時であり、アルゴリズムのBig-Ohの複雑さを引用することで、どれが「より良い」か、「最も小さい」機能を持つ方のかなり良い見積もりを得ることができます。 Oで!現実の世界でさえ、O(N)はO(N²)より「良い」ので、超大規模定数などのようなばかげたものを除外します。[/知っていること]
O(N)で実行されるいくつかのアルゴリズムがあるとしましょう。かなりいいですね しかし、あなた(あなたは素晴らしい人です)がO(N ⁄ loglogloglogN)で実行されるアルゴリズムを考え出したとしましょう。わーい!その速い!しかし、あなたが論文を書いているとき、あなたはそれを何度も何度も何度も書いているように感じるでしょう。つまり、一度書けば、「この論文では、以前に時間O(N)で計算可能であったアルゴリズムXが実際にo(n)で計算可能であることを証明しました。」
したがって、誰もがあなたのアルゴリズムがより高速であることを知っています---どのくらい不明確であるかによって、彼らはそれがより速いことを知っています。理論的には。:)