回答:
あなたはランダウ記法に言及しています。それらは同じものに対する異なるシンボルではありませんが、まったく異なる意味を持っています。どちらが「好ましい」かは、目的のステートメントに完全に依存します。
F G ≤ F ∈ O (G )<は、が最大で速度で漸近的に定数定数まで成長することを意味します。と考えてください。はより厳密な形式、つまりです。
F G ω F ∈ Ω (G )G ∈ O(F )は対称的な意味を持ちます:は少なくとも同じくらい速く成長します。はより厳密な従兄弟です。はと同等あることがわかります。
F G F ∈ O(G )∩ Ω (G )をf 〜gのΘ Oは、がほぼ同じ速度で成長することを意味します。正式に。(漸近的等式)はより強力な形式です。を使用するとき、しばしば意味します。
とその兄弟が関数クラスであることに注意してください。彼らと「算術」を行うときは、これとその正確な定義(誰が話しているかによって異なる場合があります)を十分に認識することが重要です。
物事を証明するときは、正確な定義で作業するように注意してください。Landauのシンボルには多くの定義があり(すべて同じ基本的な直感を持っています)、それらのいくつかは関数の一部のセットでは同等ですが、他のセットでは同等ではありません。
推奨読書:
Landau表記を厳密かつ健全な方法で使用することに興味がある場合は、Rutanen et al。による最近の研究に興味があるかもしれません。[1]。彼らはアルゴリズムでそれらを使用するときに漸近表記の必要かつ十分な基準を定式化し、共通の定義がそれらを満たすことができないことを示し、(実際に)実行可能な定義を提供します。
「ビッグO」()は、最も一般的なものです。アルゴリズムの複雑さを分析する場合、ほとんどの場合、重要なのは、入力のサイズが大きくなったときに実行時間¹が大きくなる速度に上限を設定することです。基本的に、アルゴリズムを実行するのに時間がかかりすぎないことを知りたいです。これを実際の時間単位(秒)で表現することはできません。これは、正確な実装(プログラムの記述方法、コンパイラの性能、マシンのプロセッサの速度など)に依存するためです。そのため、そのような詳細に依存しないもの、つまり、より大きな入力をフィードするときにアルゴリズムを実行するのにかかる時間を評価します。そして、私たちは主にプログラムが完了したことを確認できることに気を配っているので、通常、そのような時間以下の時間がかかることを知りたいです。
アルゴリズムの実行時間は入力サイズに対してであるということは、アルゴリズムが最大ステップで完了するような定数が存在することを意味します。つまり、実行時間アルゴリズムの最大成長率は(スケーリングファクターまで)です。入力サイズアルゴリズムの実行時間注目すると、非公式にはが何らかのスケーリング係数になることを意味します。
場合によっては、上限よりも多くの情報があると便利です。はの逆です。関数が少なくとも他の関数と同じくらい速く成長することを表します。は、ある定数に対してを意味するか、非公式に言えば upいくつかのスケーリング係数に。
アルゴリズムの実行時間を正確に決定できる場合、はと組み合わせます。これは、スケーリング係数まで関数の成長率が既知であることを表します。は、定数およびに対してを意味します。非公式的に言えば、スケーリングファクターまで。
「小さな」とは、複雑さの分析ではあまり使用されません。小さなは大きなより強い; ここで、は速くない成長を示し、は成長が厳密に遅いことを示します。逆に、は厳密に速い成長を示します。
私は上記の議論で少し非公式でした。ウィキペディアには、すべての定義とより数学的なアプローチがあります。
などで等号を使用することは誤った呼び名であることに注意してください。厳密に言えば、は変数関数のセットであり、書く必要があります。
これはかなり乾燥しているので、例を挙げましょう。ほとんどのソートアルゴリズムには、2次の最悪の場合の実行時間があります。つまり、サイズ入力の場合、アルゴリズムの実行時間はです。たとえば、選択ソートでは実行時間がます番目の要素を選択するには回の比較が必要であり、合計で比較が必要になるためです。実際、比較の数は常に正確にであり、として増加します。したがって、選択ソートの時間の複雑さについて、より正確にすることができます。それはです。
マージソートを実行します。マージソートも2次()です。これは事実ですが、あまり正確ではありません。実際、マージソートの実行時間は、最悪の場合です。選択ソートのように、マージソートのワークフローは入力の形状に本質的に依存せず、その実行時間は常にから定数乗数まで、つまり。
次に、quicksortを検討します。クイックソートはより複雑です。確かにです。さらに、クイックソートの最悪の場合は2次です。最悪の場合はです。ただし、クイックソートの最良のケース(入力が既にソートされている場合)は線形です。一般的なクイックソートの下限について言えることは、です。ここでは証明を繰り返しませんが、クイックソートの平均的な複雑さ(入力のすべての可能な順列の平均)はです。
一般的な設定でのソートアルゴリズムの複雑さに関する一般的な結果があります。ソートアルゴリズムは、一度に2つの要素しか比較できず、yesまたはnoの結果(または)であるとます。そして、アルゴリズムはすべての要素を少なくとも1回比較して適合位置を知る必要があるため、どのソートアルゴリズムの実行時間も常に(はソートする要素の数)であることは明らかです。この下限は、たとえば、入力が既にソートされており、アルゴリズムが各要素を次の要素と単に比較し、順序を維持するだけの(比較)にことができます。それほど明らかではないのは、最大実行時間が必然的に。アルゴリズムで比較する回数が少なくなることがありますが、入力サイズ、アルゴリズムがを超える入力を少なくとも1つ持つような定数が必要です。比較。証明の考え方は、アルゴリズムの決定木を構築すること、つまり、各比較の結果からアルゴリズムが行う決定に従うことです。各比較はyesまたはnoの結果を返すため、決定木は二分木です。あります入力の可能な順列、およびアルゴリズムはそれらすべてを区別する必要があるため、決定木のサイズは。ツリーはバイナリツリーであるため、これらすべてのノードに適合するには、深さが必要です。深さとは、アルゴリズムが行う決定の最大数であるため、アルゴリズムの実行には少なくともこの数の比較が含まれます。最大実行時間はです。
¹ またはメモリスペースなどの他のリソース消費。この回答では、実行時間のみを考慮しています。
典型的にはながら、上部境界(上から推定)を知らせるために使用される低い境界(以下から推定)を述べるために使用され、そして、それらが一致する場合に使用され、使用することができ、その場合、それらの代わりに(通常)結果を述べます。