大きなӨ表記は正確に何を表していますか?


179

ビッグO、ビッグオメガ、ビッグシータの表記法の違いに本当に戸惑っています。

私は大きなOが上限で、大きなOmegaが下限であることを理解していますが、大きなӨ(シータ)は正確には何を表していますか?

私はそれがタイトなバウンドを意味することを読みましたが、それはどういう意味ですか


回答:


93

これは、指定された関数でアルゴリズムがbig-Oとbig-Omegaの両方であることを意味します。

例えばそれがある場合、Ө(n)は、いくつかの定数がありk、あなたの関数となるよう(実行時、何でも)、より大きく、n*k十分に大きいためn、および他のいくつかの定数K関数がより小さくなるようにn*K十分に大きいためn

つまり、が十分に大きいn場合、2つの線形関数の間に挟まれます。

k < Kn十分に大きいです、n*k < f(n) < n*K


そうではありません。これらの変数は少しわかりにくく、無関係です。
アーロンローブソン2018

@committedandroiderいいえ、大文字と小文字は異なるため、2つの「類似した」(ただし、ここでは関係ありません)変数で大文字と小文字が区別される典型的な数学的スタイルを使用しています。
Santropedro

329

まず、大きなO、大きなシータ、大きなオメガが何であるかを理解しましょう。これらはすべて関数のセットです。

ビッグOは、上与えている境界漸近ビッグオメガは、下限与えている一方で、。ビッグシータは両方を提供します。

あるものすべてもですӨ(f(n))O(f(n))、逆ではありません。
T(n)がとのӨ(f(n))両方にある場合は、にあるO(f(n))といいOmega(f(n))ます。
セットの用語では、Ө(f(n))ある交差点O(f(n))Omega(f(n))

たとえば、マージソート最悪の場合は、両方あるO(n*log(n))Omega(n*log(n))-ひいてはもあるӨ(n*log(n))が、それはまたであるO(n^2)ことから、n^2それよりも漸近的に「大きな」です。しかし、そうではありませ Ө(n^2)Omega(n^2)。アルゴリズムはそうではないからです。

もう少し数学的な説明

O(n)漸近的な上限です。場合T(n)でありO(f(n))、それは、特定のことを意味しn0、定数が存在するCようにT(n) <= C * f(n)。一方、big-Omegaは次のC2ような定数があると言いますT(n) >= C2 * f(n)))。

混同しないでください!

最悪、最高、平均のケース分析と混同しないでください。3つすべての(オメガ、O、シータ)表記は、アルゴリズムの最高、最悪、平均のケース分析と関係ありません。これらのそれぞれを各分析に適用できます。

通常、これを使用して、アルゴリズムの複雑さを分析します(上記のマージソートの例のように)。「アルゴリズムAはO(f(n))」と言うとき、私たちが実際に意味するのは、「最悪の1ケース分析におけるアルゴリズムの複雑さO(f(n))」は「意味」です。つまり、「類似」(または正式には、それより悪くはない)にスケーリングされますf(n)

なぜアルゴリズムの漸近的境界を気にするのですか?

それには多くの理由がありますが、最も重要なものは次のとおりです。

  1. 正確な複雑度関数を決定することははるかに困難です。したがって、理論的には十分な情報であるbig-O / big-Theta表記については「妥協」します。
  2. opsの正確な数もプラットフォームに依存します。たとえば、16個の数値のベクトル(リスト)があるとします。どのくらいのオペレーションが必要ですか?答えは次のとおりです。一部のCPUはベクトルの追加を許可しますが、他のCPUは許可しません。そのため、異なる実装と異なるマシンの間で答えは異なります。これは望ましくないプロパティです。ただし、big-O表記は、マシンと実装の間でより一定しています。

この問題を実証するには、次のグラフをご覧ください。 ここに画像の説明を入力してください

それf(n) = 2*nよりも「悪い」のは明らかですf(n) = n。しかし、その違いは、他の機能からの場合ほど大きくはありません。f(n)=logn他の関数よりもはるかに低くなり、他の関数f(n) = n^2よりもすぐに高くなっていることがわかります。
したがって、上記の理由により、定数係数(グラフの例では2 *)を「無視」し、big-O表記のみを使用します。

上記の例では、f(n)=n, f(n)=2*n両方であろうO(n)とにOmega(n)- 、ひいてはであろうTheta(n)
一方、-にf(n)=lognは含まれますがO(n)(に比べて「より良い」f(n)=n)、含まれませんOmega(n)-したがって、にも含まれませんTheta(n)
対称的にf(n)=n^2はに含まれますがOmega(n)、には含まれないO(n)ため、-も含まれませんTheta(n)


1通常、常にではありません。分析クラス(最悪、平均、最高)が欠落している場合、最悪のケースを意味します。


4
@krishnaChandra:f(n) = n^2より漸近的に強いnため、Omega(n)です。ただし、それはO(n)ではありません(すべてので、n値が大きい場合はより大きいc*nためn)。Theta(n)はO(n)とOmega(n)の共通部分であると述べたので、O(n)ではないので、Theta(n)にもなりません。
アミット

8
big-O表記がアルゴリズムの最良/最悪のケースの実行時間とどのように関連していないかを誰かが説明するのを見るのは素晴らしいことです。O(T(n))が最悪の場合の実行時間を意味するというトピックをGoogleで検索すると、非常に多くのWebサイトが表示されます。
Will Sewell 2013

1
@almelこれは2 ^ nではなく2 * n(2n、2倍n)です
14:09の

5
@VishalK 1.ビッグOである上部として結合し、nが無限大になる傾向があります。2.オメガは低いように結合し、nが無限大になる傾向があります。3.シータの両方であり、上下のように結合し、nが無限大になる傾向があります。境界はnの低い値(n0未満)に対して保持されないため、すべての境界は「nは無限に向かう傾向があるため」にのみ有効であることに注意してください。境界は、すべての保留NN0はなく、下にN0下位条項が支配的になります。
2016

1
@hey_youもう一度答えを読んでください。大きなO、シータ、オメガは関数ではなく、アルゴリズム用です。マージソートはOmega(n)の最悪のケースです。O(n ^ 2)のベストケースでもあります。また、シータ(nlogn)の最悪のケースでもあります。基本的に、各分析(最悪/最良/平均/ ...)に対して、複雑度関数がありますT_best(n), T_worst(n), T_average(n)。それらは同一である必要はありません(ほとんどの場合、それらは同一ではありません)。O / Omega / Thetaは、それらのいずれにも個別に適用できます。
amit

14

シータ(N):関数は、f(n)に属しているTheta(g(n))正の定数が存在する場合、c1及びc2そのようなf(n)間に挟むことができるc1(g(n))とはc2(g(n))。つまり、上限と下限の両方が得られます。

Theta(g(n))= {f(n):0 <= c1(g(n))<= f(n)<= c2(g(n))となるような正の定数c1、c2およびn1が存在しますすべてのn> = n1}

私たちが言うとき、f(n)=c2(g(n))またはf(n)=c1(g(n))それが漸近的にタイトな境界を表すとき。

O(n):上限のみを提供します(タイトな場合とそうでない場合があります)

O(g(n))= {f(n):すべてのn> = n1に対して0 <= f(n)<= cg(n)となるような正の定数cおよびn1が存在します}

ex:境界2*(n^2) = O(n^2)は漸近的にタイトですが、境界2*n = O(n^2)は漸近的にタイトではありません。

o(n):それは上限のみを与えます(決してタイトな境界ではありません)

O(n)とo(n)の顕著な違いは、f(n)がすべてのn> = n1でcg(n)よりも小さいが、O(n)の場合とは異なります。

EX2*n = o(n^2)しかし、2*(n^2) != o(n^2)


1
下限を指す大きなオメガについては触れませんでした。それ以外の場合、非常に良い最初の答えと歓迎!
bohney

1
私は彼がTheta(n)の定義を組み立てる方法が好きでした。賛成です!
user720694 2013年


1

ビッグシータ表記:

バディを台無しにするものはありません!!

正の値の関数f(n)があり、g(n)が正の値の引数nを取る場合、ϴ(g(n))は{f(n)として定義されます:すべてのn>に定数c1、c2、n1が存在します> = n1}

ここで、c1 g(n)<= f(n)<= c2 g(n)

例を見てみましょう:

f(n)=とする

g(n)=

c1 = 5およびc2 = 8およびn1 = 1

すべての表記法の中で、ϴ表記法は、それぞれ上限と下限を与えるbig-ohとbig -omegaとは異なり、タイトな限界を与えるため、関数の成長率について最良の直観を与えます。

(は、g(n)がf(n)にできるだけ近く、g(n)の成長率がf(n)の成長率にできるだけ近いことを示しています。

より良い直感を得るために画像を見てください


0

まず最初に理論

  1. 大きなO =上限O(n)

  2. シータ=順序関数-シータ(n)

  3. オメガ= Q表記(下限)Q(n)

なぜ人々はそれほど混乱しているのですか?

多くのブログや本でこの声明が強調される方法は

「これはBig O(n ^ 3)です」など

人々はよく天気のように混乱します

O(n)== theta(n)== Q(n)

しかし、心に留めておくべきことは は、名前がO、Theta、Omegaの数学関数にすぎないことです。

彼らは同じ多項式の一般式を持っています

みましょう、

f(n)= 2n4 + 100n2 + 10n + 50次に、

g(n)= n4、したがって、g(n)は入力として関数を取り、最大のパワーで変数を返す関数です。

すべての説明の下で同じf(n)およびg(n)

Big O-関数(上限を提供)

ビッグO(n4)= 3n4、3n4> 2n4であるため

3n4はBig O(n4)の値です。f(x)= 3xと同じです。

n4xの役割を果たすここので、

n4をx'soで置き換えると、Big O(x ')= 2x'になります。今、私たちは2人とも満足しています。一般的な概念は

したがって、0≤f(n)≤O (x ')

O(x ')= cg(n)= 3n4

価値を置く

0≤2n4 + 100n2 + 10n + 50≤3n4

3n4は私たちの上限です

Theta(n)は下限を提供します

Theta(n4)= cg(n)= 2n4 2n4≤私たちの例f(n)のため

2n4はTheta(n4)の値です

したがって、0≤cg(n)≤f(n)

0≤2n4≤2n4 + 100n2 + 10n + 50

2n4は下限です

オメガn-注文関数

これは、天候の下限が上限に似ていることを見つけるために計算されます。

ケース1)。上限は下限に似ています

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

ケース2)。上限が下限と類似していない場合

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

これが説明されているといいのですが!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.