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)≥K′g(n)K′T(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)≥K′h(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))nT∈O(f)
Örnek: bazı sıralama algoritmaları
nO(n2)O(n2)kn−kn(n−1)/2n(n−1)/2n2Θ(n2)
O(n2)O(nlg(n))nlg(n)Θ(nlg(n))
O(n2)Θ(n2)Ω(n)Θ(nlg(n))
x≤yx>yΩ(n)nn−1Ω(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.