Hangi zaman karmaşıklığı analizinin gösterileceğini nasıl bilebiliriz?


90

Giriş algoritma sınıflarının çoğunda, (Büyük O) ve gibi notasyonlar tanıtılır ve bir öğrenci genellikle zaman karmaşıklığını bulmak için bunlardan birini kullanmayı öğrenir.OΘ

Bununla birlikte, bu gibi başka gösterimleri vardır,o , ve ω . Bir gösterimin diğerine tercih edilebileceği herhangi bir özel senaryo var mı?Ωω


2
uygulanabilir olduğu kadar çok tercih edilmez ...
vzn

Yanıtlar:


76

Landau notasına atıfta bulunuyorsunuz . Aynı şey için farklı semboller değil, tamamen farklı anlamlara sahipler. Hangisinin “tercih edilebilir” olduğu tamamen istenen ifadeye bağlıdır.

f'nin en çok g kadar , asimptotik olarak ve sabit bir faktöre kadarbüyüdüğüanlamına gelir; Bir olarak düşünmek . f o ( g ) , daha katı bir formdur, yani < .fO(g)fgfo(g)<

simetrik bir anlama sahiptir: f en azından g kadar hızlı büyür. st daha katı kuzenidir. Bunu görebilir f Q ( g ) eşdeğerdir g O ( f ) .fΩ(g)fgωfΩ(g)gO(f)

f'nin g kadar hızlı büyüdüğüanlamına gelir; resmen f O ( g ) Ω ( g ) . f g (asimptotik eşitlik) güçlü şeklidir. Sık sık Θ kullanarak O kullanıyoruz .fΘ(g)fgfO(g)Ω(g)fgΘO

Nasıl Not ve kardeşlerinin olan işlev sınıfları . Onlarla “aritmetik” yaparken, kimin ve kimin konuştuğuna bağlı olarak değişebilen kesin tanımlarının farkında olmak önemlidir.O(g)

Bir şeyleri kanıtlarken, kesin tanımınızla çalışmaya özen gösterin. Çevresindeki Landau sembolleri için (bazıları aynı temel sezgiye sahip) bazıları tanımlanmış, bazıları işlevler üzerinde bazı kümeler üzerinde eşdeğer fakat diğerleri üzerinde eşdeğer olmayan birçok tanım var.

Önerilen Okuma:

Landau notasyonunu titiz ve sağlam bir şekilde kullanmakla ilgileniyorsanız, Rutanen ve ark. [1]. Algoritmalarda kullandıkça asimptotik gösterim için gerekli ve yeterli kriterleri formüle ederler, ortak tanımın bunları yerine getirmediğini ve (aslında) uygulanabilir bir tanım sağladığını gösterirler.


  1. Algoritma analizi için O notasyonunun genel tanımı K. Rutanen ve ark. (2015)

5
Sadece rağmen işaret etmek istiyorum gibi davranır ve Ω gibi davranır , farklılıklar vardır; fonksiyonlar bulmak zor olmayan g ve f , öyle ki ön O ( g ) ve ön Ê ( g ) . OΩgffO(g)fΩ(g)
Zach Langley

1
İşlev sınıflarının belirtilmesi için +1. ve Ω ( 2 n ) gibi şeyler her yerde bu kitaplarda görülür; bu ilk kez bu notlara bakan insanlar için kafa karıştırıcı olabilir. o(1)Ω(2n)
Janoma

7
@ZachLangley Söyledikleriniz çok doğru. Burada toplam sipariş yok. Büyük olasılıkla ortaya çıkarmak tehlikelidir , ancak bence sezgi inşa etme amacına hizmet ediyor.
Raphael

42

Büyük O: üst sınır

“Büyük O” ( ) en yaygın olanıdır. Bir algoritmanın karmaşıklığını analiz ettiğinizde, çoğu zaman, önemli olan şey, girişin boyutu büyüdüğünde çalışma zamanının ne kadar hızlı büyüdüğü konusunda üst sınırlara sahip olmaktır. Temel olarak, algoritmayı çalıştırmanın “çok uzun” sürmeyeceğini bilmek istiyoruz. Bunu gerçek zaman birimlerinde (saniye olarak) ifade edemiyoruz, çünkü bu kesin uygulamaya bağlıdır (programın yazılma şekli, derleyicinin ne kadar iyi olduğu, makinenin işlemcisinin ne kadar hızlı olduğu…). Bu nedenle, bu ayrıntılara neyin bağlı olmadığını değerlendiririz; algoritmayı daha büyük girdilerle beslediğimizde ne kadar uzun sürdüğünü belirler. Ve esas olarak programın yapıldığından emin olabileceğimiz zaman önemsiyoruz, bu yüzden genellikle bu kadar ve çok zaman alacağını bilmek istiyoruz.O

Bir algoritmanın, bir giriş boyutu n için çalışma zamanına sahip olduğunu söylemek , algoritmanın en fazla K'da tamamlandığı şekilde bir sabit K olduğu anlamına gelir.O(f(n))nK aşamaları, yani algoritmanın çalışma süresi en fazla f (en yüksek ölçeklendirme faktörüne kadar) kadar artar. Kaydeden T ( n ) giriş boyutu algoritmanın çalışma süresi n , O ( n ) gayri olduğu anlamına gelir , T ( n ) f ( n ) bir ölçekleme faktörü kadar.Kf(n)fT(n)nO(n)T(n)f(n)

Alt sınır

Bazen, bir üst sınırdan daha fazla bilgiye sahip olmak yararlıdır. tersi olan O : Bir işlev başka en az kadar hızlı büyür ifade eder. T ( n ) = Ω ( g ( n ) ) anlamına gelir , T ( K ) K ' g ( n ), bir sabit için K ' , ya da gayri koymak için , T ( n ) g ( n ) bir ölçekleme kadar faktörü.ΩOT(n)=Ω(g(n))T(N)Kg(n)KT(n)g(n)

Algoritmanın çalışma süresi tam olarak belirlendiğinde, O ve Ω'yı birleştirir : Bir fonksiyonun büyüme hızının bir ölçeklendirme faktörüne kadar bilindiğini ifade eder. T ( n ) = Θ ( h ( n ) ) olduğu anlamına gelir K h ( n ) T ( n ) K ' H ( n ) bir sabitleri için K ve K ' . Gayri resmi konuşma, T (ΘOΩT(n)=Θ(h(n))Kh(n)T(n)Kh(n)KK bazı ölçeklendirme faktörlerine kadar.T(n)h(n)

Diğer hususlar

Karmaşıklık analizinde “küçük” ve ω çok daha az kullanılır. Küçük o , büyük O'dan daha güçlüdür ; nerede Ç hiçbir hızlıdır artış olduğunu gösterir, o büyüme kesinlikle daha yavaş olduğunu belirtir. Tersine, ω kesinlikle daha hızlı bir büyüme olduğunu gösterir.oωoOOoω

Yukarıdaki tartışmada biraz gayrı resmi oldum. Vikipedi , tanımlamaları ve daha matematiksel bir yaklaşım var.

T(n)=O(f(n))O(f(n))nTO(f)

Örnek: bazı sıralama algoritmaları

nO(n2)O(n2)knkn(n1)/2n(n1)/2n2Θ(n2)

O(n2)O(nlg(n))nlg(n)Θ(nlg(n))

O(n2)Θ(n2)Ω(n)Θ(nlg(n))

xyx>yΩ(n)nn1Ω(nlg(n))KnKnlg(n)n!n!Θ(lg(n!))=Θ(nlg(n))Ω(nlg(n))

¹ Veya hafıza alanı gibi diğer kaynak tüketimi. Bu cevapta, sadece çalışma zamanını düşünüyorum.


1
“Ancak, hızlı girişin en iyi durumu (giriş zaten sıralandığında) doğrusaldır”, bu en kötü durumdur !!
user5507

@ user5507: Aslında, pivot stratejisine bağlı. İlk (veya son) eleman pivot olarak seçilirse, o zaman haklısınız; ancak orta öğeyi ya da ilk, orta, son ortancası seçerseniz, sıralı girdi en iyi durumdur.
chirlu

“Küçük o ve ω karmaşıklık analizinde çok daha az kullanılıyor.” Uzay karmaşıklığı analizinde bu doğru değil. Zaman karmaşıklığı analizinde, belirli işlemleri sayırken (karşılaştırmalar, disk arar, önbellek özlüyor, neyin var), genellikle o ve ω kullanırsınız. Fakat her zaman daha hızlı bir bilgisayar bekleyip satın alabildiğiniz için, "duvar zamanı" her zaman "sabit bir faktöre kadardır", yani büyük O çok daha yaygındır. Uzay analizinde, bilgi teorisi nedeniyle genellikle zor alt sınırlar vardır, bu nedenle f (n) 'nin alt sınır olduğu "f (n) + o (f (n)) bit" olarak bildirilen büyüklüğü görmek oldukça yaygındır.
Takma adı

Bunu düşünürken: Eğer f (n) bazı veri yapısının büyüklüğü üzerine teorik bir alt sınır ise, o zaman f (n) + O (1) (sabit ek yük) kullanana "örtük" denir, bunlardan birini kullanın f (n) + O (f (n)) (sabit göreceli ek yükü) "kompakt" olarak adlandırılır ve f (n) + o (f (n)) kullanan bir (göreceli tepki sonunda önemsiz olur) "kısaltılır" ". Bu alanda çalışmanızın gerekip gerekmediğini bilmek güzel terimler.
Sahte

17

OΩΘΘ


3
"Tipik"? Başka bir şey için kullanılabilirler mi?
salı

1
P=DTime(nO(1))f=O(g)f

4
P=DTime(nO(1))P=DTime(nΘ(1))

@JeffE, onu işlev kümeleri arasında eşitlik olarak düşünüyorum, ama haklısın, kişi daha genel anlamda bir üst sınır olarak da düşünebilir.
Kaveh

PDTIME(nΘ(1))DTIME(Θ(nlogn))PDTIME(Θ(nlogn))DTIME(nΘ(1))=
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.