Büyük gösterim tam olarak neyi temsil eder?


179

Büyük O, büyük Omega ve büyük Theta gösterimi arasındaki farklar hakkında gerçekten kafam karıştı.

Büyük O'nun üst sınır olduğunu ve büyük Omega'nın alt sınır olduğunu anlıyorum, ama büyük Ө (teta) tam olarak neyi temsil ediyor?

Sıkı bağlı demek olduğunu okudum , ama bu ne anlama geliyor?


Yanıtlar:


93

Bu, verilen fonksiyonda algoritmanın hem big-O hem de big-Omega olduğu anlamına gelir.

Örneğin Ө(n), öyleyse, bir sabit vardır k, öyle ki, işleviniz (çalışma zamanı, ne olursa olsun), n*kyeterince büyük olandan daha büyüktür nve bazı sabitler K, işleviniz n*Kyeterince büyük olandan daha küçüktür n.

Başka bir deyişle, yeterince büyük için n, iki doğrusal fonksiyon arasında sandviçlenir:

İçin k < Kve nyeterince büyük,n*k < f(n) < n*K


Öyle değil, bu değişkenler biraz kafa karıştırıcı, ilgisiz.
Aaron Robeson

@committedandroider Hayır, bunlar küçük harf ve büyük harf olarak farklıdır, iki "benzer" (burada hiçbir şekilde ilişkili değildir) değişkenlerin büyük ve küçük harf kullandığı tipik matematiksel stil kullanır.
Santropedro

329

Önce büyük O, büyük Teta ve büyük Omega'nın ne olduğunu anlayalım. Hepsi fonksiyon setleridir .

Büyük Omega üst asimptotik sınır verirken, büyük Omega alt sınır verir. Büyük Teta her ikisini de verir.

Olan her şey Ө(f(n))de O(f(n)), ama tam tersi değil.
T(n)içinde olduğu söylenir Ө(f(n))bunun hem ise O(f(n))ve de Omega(f(n)).
Setleri terminolojisinde, Ө(f(n))bir kavşak arasında O(f(n))veOmega(f(n))

Örneğin, birleştirme sıralama en kötü durum hem O(n*log(n))ve hem de Omega(n*log(n))- ve aynı zamanda Ө(n*log(n)), ama aynı zamanda O(n^2), çünkü n^2asimptotik olarak ondan daha "büyük". Ancak, öyle değil Ө(n^2) , çünkü algoritma değil Omega(n^2).

Biraz daha derin matematik açıklama

O(n)asimptotik üst sınırdır. Eğer T(n)bir O(f(n)), belirli bir mesafede olduğu anlamına gelir n0, bir sabit olduğu Cşekilde T(n) <= C * f(n). Öte yandan, büyük Omega C2böyle bir sabit olduğunu söylüyor T(n) >= C2 * f(n))).

Karıştırma!

En kötü, en iyi ve ortalama vaka analizi ile karıştırılmamalıdır: her üç (Omega, O, Theta) notasyonu , algoritmaların en iyi, en kötü ve ortalama vaka analizi ile ilgili değildir . Bunların her biri her analize uygulanabilir.

Genellikle algoritmaların karmaşıklığını analiz etmek için kullanırız (yukarıdaki birleştirme sıralama örneği gibi). "Algoritma A" derken O(f(n)), gerçekten kastettiğimiz "En kötü 1 vaka analizi altındaki algoritma karmaşıklığı O(f(n))" - anlamı - "benzer" (ya da resmi olarak, daha kötü değil) fonksiyonudur f(n).

Neden bir algoritmanın asimptotik sınırını önemsiyoruz?

Bunun birçok nedeni var, ama bunların en önemlilerinin olduğuna inanıyorum:

  1. Kesin karmaşıklık işlevini belirlemek çok daha zordur , bu yüzden teorik olarak yeterince bilgilendirici olan big-O / big-Theta notasyonlarından "taviz veririz".
  2. Tam ops sayısı da platforma bağlıdır . Örneğin, 16 sayıdan oluşan bir vektörümüz (liste) varsa. Ne kadar ops alacak? Cevap, duruma bağlı. Bazı CPU'lar vektör eklemeye izin verirken, diğerleri izin vermez, bu nedenle cevap farklı uygulamalar ve istenmeyen bir özellik olan farklı makineler arasında değişir. Ancak big-O notasyonu makineler ve uygulamalar arasında çok daha sabittir.

Bu sorunu göstermek için aşağıdaki grafiklere göz atın: resim açıklamasını buraya girin

Bundan f(n) = 2*ndaha kötü olduğu açıktır f(n) = n. Ancak fark, diğer fonksiyondan olduğu kadar sert değildir. Biz görebilirsiniz f(n)=lognhızla almak çok diğer işlevleri daha düşük ve f(n) = n^2hızlı bir şekilde çok daha yüksek diğerlerine göre oluyor.
Dolayısıyla - yukarıdaki nedenlerden dolayı, sabit faktörleri (grafik örneğinde 2 *) "görmezden geliriz" ve yalnızca büyük O gösterimini alırız.

Yukarıdaki örnekte, f(n)=n, f(n)=2*nher ikisi de olacak O(n)ve Omega(n)aynı zamanda olacak ve dolayısıyla - Theta(n).
Öte yandan - f(n)=lognolacak O(n)(daha "daha iyi" f(n)=n), ama içinde olmayacak Omega(n)- ve böylece de olmayacak Theta(n).
Simetrik olarak, içinde f(n)=n^2olacak Omega(n), ama DEĞİLDİR O(n)ve dolayısıyla - DEĞİLDİR Theta(n).


1 Genellikle, her zaman olmasa da. analiz sınıfı (en kötü, ortalama ve en iyi) eksik olduğunda, gerçekten en kötü durumu kastediyoruz .


4
@krishnaChandra: f(n) = n^2o zaman asimptotik olarak daha güçlü nve bu nedenle Omega (n). Bununla birlikte, O (n) değildir (çünkü büyük ndeğerler için, o zaman c*nherkes için daha büyüktür n). Theta (n) 'nin O (n) ve Omega (n)' nin kesişimi olduğunu söylediğimizden, O (n) olmadığı için, Theta (n) de olamaz.
amit

8
Birinin büyük-O gösteriminin bir algoritmanın en iyi / en kötü çalışma süresi ile nasıl ilişkili olmadığını açıkladığını görmek harika. O (T (n)) kötü durumda çalışma süresi anlamına gelir konu google google geldiğinde çok fazla web sitesi vardır.
Will Sewell

1
@almel 2 * n (2n, iki kez n) değil 2 ^ n
amit

5
@ VishalK 1. n sonsuzluğa eğilimli olduğundan büyük O üst sınırdır . 2. n sonsuzluğa eğilimli olduğundan Omega alt sınırdır . 3. Teta n'nin sonsuzluğa meyilli olduğu için hem üst hem de alt sınırdır . Tüm sınırların yalnızca " n sonsuza meyilli olduğu için " geçerli olduğunu unutmayın , çünkü sınırlar düşük n değerleri ( n0'dan düşük ) için geçerli değildir. Sınırlar tüm nn0 için geçerlidir , ancak daha düşük dereceli terimlerin baskın hale geldiği n0'ın altında değildir .
bain

1
@hey_you Cevabı tekrar okuyun. büyük O, Teta, Omega algoritmalar için değil fonksiyonlar içindir. Birleştirme sıralaması Omega (n) en kötü durumdur. Ayrıca O (n ^ 2) en iyi durumdur. Ayrıca Theta (nlogn) en kötü durumdur. Temel olarak, her analiz için (en kötü / en iyi / ortalama / ...) bir karmaşıklık fonksiyonunuz vardır T_best(n), T_worst(n), T_average(n). Aynı olmak zorunda değiller (ve çoğunlukla değiller). O / Omega / Theta bunlardan herhangi birine bağımsız olarak uygulanabilir.
amit

14

Teta (n): bir fonksiyonu f(n)ait Theta(g(n))pozitif sabitleri mevcutsa, c1ve c2bu tür f(n)arasına yerleştirilir c1(g(n))ve c2(g(n)). yani hem üst hem de alt sınırı verir.

Teta (g (n)) = {f (n): 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) olacak şekilde c1, c2 ve n1 pozitif sabitleri vardır. tüm n> = n1} için

dediğimizde f(n)=c2(g(n))ya f(n)=c1(g(n))da asimptotik olarak sıkı bir bağlılığı temsil ettiğinde .

O (n): Sadece üst sınır verir (sıkı olabilir veya olmayabilir)

O (g (n)) = {f (n): tüm n> = n1 için 0 <= f (n) <= cg (n) olacak şekilde c ve n1 pozitif sabitleri var

ör : 2*(n^2) = O(n^2)Bağ asimptotik olarak sıkı, bağ 2*n = O(n^2)asimtotik olarak sıkı değildir.

o (n): Sadece üst sınırı verir (asla sıkı bir sınır vermez)

O (n) ve o (n) arasındaki kayda değer fark, f (n), tüm n> = n1 için cg (n) 'den küçüktür, ancak O (n)' de olduğu gibi değildir.

ör . :: 2*n = o(n^2)ancak2*(n^2) != o(n^2)


1
Alt sınırdan söz eden büyük Omega'dan bahsetmediniz. Aksi takdirde, çok güzel ilk cevap ve hoş geldiniz!
bohney

1
Teta (n) tanımını çerçeveledi. Upvoted!
user720694


1

Büyük Teta gösterimi:

Hiçbir şey dostum berbat!

Pozitif değerli fonksiyonlarımız varsa f (n) ve g (n) {f (n) olarak tanımlanan n sonra ϴ (g (n)) pozitif bir argüman alırsa: tüm n> için c1, c2 ve n1 sabitleri vardır n1 =}

burada c1 g (n) <= f (n) <= c2 g (n)

Bir örnek verelim:

f (n) = olsun

g (n) =

c1 = 5 ve c2 = 8 ve n1 = 1

Tüm notasyonlar arasında, tation notasyonu, fonksiyonun büyüme oranı hakkında en iyi sezgiyi verir, çünkü sırasıyla üst ve alt sınırları veren büyük-oh ve büyük-ogadan farklı olarak sıkı bir bağ sağlar.

ϴ g (n) 'nin f (n) kadar yakın olduğunu, g (n)' nin büyüme hızının f (n) 'nin büyüme hızına mümkün olduğunca yakın olduğunu söyler.

daha iyi bir sezgi almak için resme bakın


0

Her şeyden önce teori

  1. Büyük O = Üst Limit O (n)

  2. Teta = Sipariş İşlevi - teta (n)

  3. Omega = Q-Notasyonu (Alt Sınır) Q (n)

İnsanlar Neden Bu Kadar Karışık?

Birçok Blog ve Kitapta Bu Bildirinin nasıl vurgulandığı gibi

"Bu Büyük O (n ^ 3)" vb.

ve insanlar genellikle hava gibi karışır

O (n) == teta (n) == S (n)

Ancak akılda tutulması gereken şey , O, Teta ve Omega İsimleri ile Sadece Matematiksel Fonksiyonlardır

böylece aynı Genel Polinom Formülüne sahipler,

İzin Vermek,

f (n) = 2n4 + 100n2 + 10n + 50 sonra,

g (n) = n4, Yani g (n) işlevi Giriş olarak alan ve Biggerst Gücü ile Değişken döndüren İşlev,

Tüm açıklamalar için aynı f (n) & g (n)

Büyük O - İşlevi (Üst Sınırı Sağlar)

Büyük O (n4) = 3n4, Çünkü 3n4> 2n4

3n4, Büyük O (n4) değeridir. Tıpkı f (x) = 3x gibi

n4 burada x rolünü oynuyor yani,

N4'ü x'so, Big O (x ') = 2x' ile değiştiriyoruz, şimdi ikimiz de mutluyuz General Concept is

Yani 0 ≤ f (n) ≤ O (x ')

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

Değer vermek,

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

3n4 bizim Üst Sınırımız

Teta (n) Alt Sınır Sağlar

Teta (n4) = cg (n) = 2n4 Çünkü 2n4 Example Örneğimiz f (n)

2n4, Theta'nın Değeri'dir (n4)

yani, 0 ≤ cg (n) ≤ f (n)

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

2n4 bizim Alt Sınırımız

Omega n - Sipariş İşlevi

Bu, düşük hava sınırının Üst sınıra benzediğini bulmak için hesaplanır,

Dava 1). Üst Sınır Alt Sınıra Benzer

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

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

Durum 2). Üst Sınır Alt Bağ ile Benzer değilse

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

Umarım bu açıklanır !!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.