回答:
ビッグOは上限ですが、オメガは下限です。シータにはBig OとOmegaの両方が必要なので、タイトバウンドと呼ばれていますます(上限と下限の両方でなければなりません)。
たとえば、アルゴリズムの取得にOmega(n log n)
は少なくともn log n
時間がかかりますが、上限はありません。取るアルゴリズムTheta(n log n)
は、少なくとも n log n
(Omega n log n)で n log n
(Big O n log n)以下であるため、はるかに優先されます。
Θ表記(シータ表記)は、O表記やΩ 表記よりも正確であるため、タイトバウンドと呼ばれます。(オメガ表記法)ます。
怠惰だったら、ソートされた配列のバイナリ検索はO(n 2)、O(n 3)、およびO(2 n)であると言えるでしょう。これは、O表記が上限のみを指定しているためであり、バイナリ検索は、これらのすべての関数によって非常に厳密ではなく、上限に制限されています。これらの遅延推定は役に立たないでしょう。
Θ 表記は、O表記とΩ表記を組み合わせることでこの問題を解決します。バイナリ検索がΘ(log n)であると言うと、より正確な情報が得られます。これは、アルゴリズムは上で制限されていることを示しています両方それが速いか遅い述べたよりも有意になることはありませんので、与えられた関数によって側面。
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case
-誰もがBig Oの複雑さについてのみ話しているので、コンピューターの世界のほとんどの人は怠惰なようです。
If I were lazy, I could say that binary search on a sorted array is O(n2), O(n3), and O(2n), and I would be technically correct in every case
誰かがこれと混同されている場合:漸近的にタイトでないsmall-o表記が使用されているそのような関数には、使用されます。例:-範囲2n ^ 2 = O(n ^ 2)は漸近的にタイトですが、範囲2n = O(n ^ 2)はそうではありません。もっと読む:stackoverflow.com/questions/1364444/...
あなたは何かがある場合は O(F(n)を)手段があるのは、あること、K、G(n)のように、F(n)は ≤ キロ(N) 。
あなたは何かがある場合は Ω(F(n)を)手段があるのは、あること、K、G(n)のように、F(n)は ≥ キロ(N) 。
そして、あなたがO(f(n)) と Ω(f(n))で何かを持っているなら、それはΘ(f(n)ですです。
Wikipediaの記事は少し密な場合には、まともです。
g
代わりに表示されf
、残りはそのままにすることができます。同じことが2行目にもあてはまります。「Ω(g(n))のものがあれば」です。再確認していただけますか?
漸近上限とは、入力数に応じて、指定されたアルゴリズムが最大時間中に実行されることを意味します。
例として、並べ替えアルゴリズムを見てみましょう。配列のすべての要素が降順である場合、それらを並べ替えるには、実行時間がかかり、O(n)
上限の複雑さを示します。配列がすでにソートされている場合、値はになりますO(1)
。
一般に、O-notation
上限の複雑さに対して使用されます。
漸近的にタイトなバウンド(c 1 g(n)≤f(n)≤c 2 g(n))は、境界限界(上限と下限)の間の値を持つ関数の平均限界複雑度を示します。ここで、c 1とc 2は定数です。
ここでは、最小時間と最大時間というフレーズは少し誤解を招きます。大きなO表記について話すとき、それは私たちが興味を持っている実際の時間ではなく、入力サイズが大きくなると時間が増加する方法です。そしてそれは通常、私たちが話している平均または最悪のケースの時間であり、最良のケースではありませんではありません。これは通常、問題の解決に意味がありません。
例として、他の質問に対する受け入れられた回答の配列検索を使用します。サイズnのリストで特定の数値を見つけるのにかかる時間は、平均でn / 2 * some_constantです。これを関数として扱うと、チャーリーによって与えられた意味ではf(n) = n/2*some_constant
それよりも速く増加しませんg(n) = n
。また、g(n)
どちらよりもゆっくりと増加します。したがって、g(n)
は実際にf(n)
はBig-O表記の上限と下限の両方なので、線形検索の複雑さは正確に nです。であり、これはTheta(n)であることを意味します。
これに関して、他の質問に対する受け入れられた回答の説明は完全には正しくありません。アルゴリズムは一部の入力に対して一定の時間で実行できるため、O(n)が上限であると主張します(これは私が上記で述べた最良のケースです。これは、実際に実行時間について知りたいことではありません)。
正確には、下限または$ \ omega $ bfon f(n)は、漸近的にf(n)以下の関数のセットを意味します。すなわち、U g(n)≤cf(n)$ \ for all $ `un≥n '一部のcについては、n' $ \ in $ $ \ Bbb {N} $
そして、f(n)の上限または$ \ mathit {O} $は、数学的に言うf(n)に漸近的に等しいかまたは等しい関数のセットを意味します。
$ g(n)\ ge cf(n)\ for all n \ ge n '$、一部のc、n' $ \ in $ $ \ Bbb {N} $。
$ \ Theta $は、上記の2つの交差点です。
$\theta $
アルゴリズムが「正確に$ \ Omega \ left(f(n)\ right $」のようなものである場合、$ \ Theta \ left(f(n)\ right)$であると言う方が良いでしょう。
または、私たちはそれ$
\omega $
が私たちに私たちに最低限を与える実際の速度を与えると言うこともできます。
の基本的な違い
ブロッククォート
漸近的に上限があり漸近的にタイトなAsym.upperboundは、入力の数に応じて最大時間で実行できる特定のアルゴリズムを意味します。上限の複雑さを示すO(n)の実行時間がかかりますが、それらがすでにソートされている場合はohm(1)が必要になるため、通常、上限の複雑さには「O」表記を使用しました。
非対称。タイトバウンドバウンドは、eg(c1g(n)<= f(n)<= c2g(n))がタイトバウンドリミットを示し、関数が2つのバウンド(上限と下限)の間に値を持つようにします。平均的なケース。