Big-O ve Little-O Notasyonu arasındaki fark


Yanıtlar:


442

f ∈ O (g) diyor ki, esasen

İçin en az bir sabit seçimi k > 0, bir sabiti bulabilirsiniz bir tür eşitsizlik 0 a <= f (x) <= kg (x) tüm x için geçerlidir> söyledi.

O (g) 'nin, bu koşulun sahip olduğu tüm işlevler kümesi olduğunu unutmayın.

f ∈ o (g) diyor ki, esasen

İçin her bir sabit seçimi k > 0, bir sabiti bulabilirsiniz bir tür eşitsizlik 0 a <= f (x) <kg (x) tüm x için geçerlidir> söyledi.

Bir kez daha, o (g) 'nin bir küme olduğunu unutmayın.

Big-O'da, sadece eşitsizliğin minimum x'in ötesinde tuttuğu belirli bir çarpan k'yi bulmanız gerekir .

Little-o'da, k'yi ne kadar küçük yaparsanız yapın , negatif veya sıfır olmadığı sürece , eşitsizliğin asgari x olması gerekir .

Her ikisi de üst sınırları açıklar, ancak sezgisel olarak biraz da olsa, Little-o daha güçlü bir ifadedir. F ∈ o (g) ise f ve O büyüme hızları arasında f ∈ O (g) 'ye göre çok daha büyük bir boşluk vardır.

Eşitsizliğin bir örneği şudur: f ∈ O (f) doğrudur, ancak f ∈ o (f) yanlıştır. Bu nedenle, Big-O "f ∈ O (g), f'nin asimptotik büyümesinin g'lerden daha hızlı olmadığı anlamına gelir" oysa "f ∈ o (g), f'nin asimptotik büyümesinin g'lerden kesinlikle daha yavaş olduğu anlamına gelir". Sanki <=karşısında <.

Daha spesifik olarak, g (x) değeri f (x) değerinin sabit bir katı ise, f-O (g) doğrudur. Bu nedenle big-O notasyonu ile çalışırken sabitleri bırakabilirsiniz.

Bununla birlikte, f o (g) 'nin doğru olması için, g formülünde daha yüksek bir x gücü içermelidir ve bu nedenle f (x) ve g (x) arasındaki göreceli ayrım, x büyüdükçe daha da büyüymelidir.

Sadece matematik örneklerini kullanmak için (algoritmalara başvurmak yerine):

Aşağıdakiler Big-O için doğrudur, ancak little-o kullandıysanız doğru olmaz:

  • x² ∈ O (x²)
  • x² ∈ O (x² + x)
  • x² ∈ O (200 * x²)

Little-o için aşağıdakiler geçerlidir:

  • x² ∈ o (x³)
  • x² ∈ o (x!)
  • ln (x) ∈ o (x)

F ∈ o (g) ise, bu f ∈ O (g) anlamına gelir. örneğin x² ∈ o (x³) bu yüzden x² ∈ O (x³), (yine, O <=ve o gibi düşünün <)


146
Evet-- fark, iki fonksiyonun asemptotik olarak aynı olup olmamasıdır. Sezgisel olarak büyük-O anlamı "daha hızlı büyümez" (yani aynı oranda veya daha yavaş büyür) ve küçük-o anlamı "kesinlikle daha yavaş büyür" düşünmeyi seviyorum.
Phil

12
Bunu wikipedia'ya kopyalansın mı? Orada olandan çok daha iyi.
cloudsurfin

1
@SA Evet. Bu "daha yüksek x kuvvetleri" hakkında verdiğim daha basit kuralın açıkça uygulanamadığı daha hileli bir durum. Ancak aşağıdaki Strilanc'ın cevabında verilen daha titiz limit tanımlarına bakarsanız, bilmek istediğiniz şey lim n-> inf (2 ^ n / 3 ^ n) = 0 ise. (2 ^ n / 3 ^ n) = (2/3) ^ n ve herhangi 0 <= x <1, lim n-> inf (x ^ n) = 0 olduğundan, 2 ^ n = o (3 ^ n) doğrudur.
Tyler McHenry

1
"Little-o'da, negatif veya sıfır olmadığı sürece, k'yi ne kadar küçük yaparsanız yapın eşitsizliğin korunduğu minimum bir x olması gerekir." "Her abiri kiçin: ..." değil, "her kbiri için a: ..."
GA1

1
"Little-o'da, k'yi ne kadar küçük yaparsanız yapın negatif veya sıfır olmadığı sürece eşitsizliğin sahip olduğu minimum bir x olması gerekir." hayır, bu yanlış.
Filippo Costa

196

Gibi büyük-O az o için etmektir <. Big-O kapsayıcı bir üst sınır, little-o ise sıkı bir üst sınırdır.

Örneğin, işlev f(n) = 3n:

  • içinde O(n²), o(n²)veO(n)
  • değil de O(lg n), o(lg n)yao(n)

Benzer şekilde, sayı 1:

  • ≤ 2, < 2Ve≤ 1
  • değil ≤ 0, < 0ya< 1

İşte genel fikri gösteren bir tablo:

Büyük masa

(Not: tablo iyi bir kılavuzdur, ancak sınır tanımı normal sınır yerine üst sınır olarak olmalıdır . Örneğin, 3 + (n mod 2) sonsuza kadar 3 ile 4 arasında salınır. O(1)Normal bir sınırlamaya sahip olmamasına rağmen, hala vardır a lim sup: 4.)

Big-O gösteriminin asimtotik karşılaştırmalara nasıl dönüştüğünü ezberlemenizi tavsiye ederim. Karşılaştırmaları hatırlamak daha kolaydır, ancak daha az esnektir, çünkü n O (1) = P gibi şeyleri söyleyemezsiniz .


Bir sorum var: satır 3 ve 4 (limit tanımları sütunu) arasındaki fark nedir? Bana 4 tutarken (lim> 0) ama 3 değil bir örnek gösterebilir misiniz?
Maskeli Adam

3
Oh, anladım. Büyük Omega lim> 0 içindir, Büyük Oh lim <sonsuzluk içindir, Big Theta her iki koşul da geçerli olduğunda 0 <lim <sonsuzluk anlamına gelir.
Maskeli Adam

F ∈ Ω (g) için, sonsuzluk sınırı> = 1 olarak değerlendirilmemelidir? Benzer şekilde f = O (g) için, 1 = <c <∞?
user2963623

1
@ user2963623 Hayır, çünkü 0 ile 1 arasındaki değerler de dahil olmak üzere kesinlikle 0'ın üzerindeki sonlu değerler, "aynı asimtotik karmaşıklığa ancak farklı sabit faktörlere" karşılık gelir. 1'in altındaki değerleri atlarsanız, asimptotik karmaşıklık alanı yerine sabit faktörlü alanda bir kesiminiz olur.
Craig Gidney

1
@ubadub Üstelleme işlemini set üzerinden yayınlıyorsunuz. Gevşek gösterim.
Craig Gidney

45

Kavramsal olarak bir şeyi kavrayamadığım zaman, birinin X'i neden kullanacağını düşünmenin X'i anlamak için yararlı olduğunu görüyorum.

[bildiğiniz şeyler] Algoritmaları sınıflandırmanın yaygın bir yolu çalışma zamanıdır ve bir algoritmanın büyük Oh karmaşıklığını göstererek hangisinin "daha iyi" olduğu konusunda oldukça iyi bir tahmin alabilirsiniz - hangisi "en küçük" işleve sahipse O! Gerçek dünyada bile, O (N) O (N²) 'den "daha iyi", süper büyük sabitler ve benzerleri gibi aptalca şeyleri engelliyor. [/ Bildiğiniz şeyler]

Diyelim ki O (N) 'de çalışan bir algoritma var. Oldukça iyi, ha? Ama diyelim ki siz (siz zekice bir kişi, siz) O ( NloglogloglogN ) içinde çalışan bir algoritma buldunuz . YAŞASIN! O daha hızlı! Ama tezinizi yazarken bunu tekrar tekrar yazmayı aptalca hissedersiniz. Yani bir kez yazıyorsunuz ve “Bu makalede, daha önce O (N) zamanında hesaplanan X algoritmasının aslında o (n) olarak hesaplanabilir olduğunu kanıtladım.”

Böylece, herkes algoritmanızın daha hızlı olduğunu bilir - ne kadar belirsiz olduğu, ancak daha hızlı olduğunu bilir. Teorik olarak. :)

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.