Ne özellikleridir


19

Bazen dikkatle incelediğim bir algoritmanın zaman karmaşıklığını tanımlamak kolaydır. İki iç içe döngüsüne sahip algoritmalar açıkça . İki değerden oluşan gruplarının tüm olası kombinasyonlarını araştıran algoritmalar açıkça .N 2 N 2 NNN2N2N

Ancak karmaşıklığı ile bir algoritma "nasıl" bilmiyorum . Örneğin, özyinelemeli bir birleştirme uygulaması gerçekleştirilebilir. Birleştirme veya diğer algoritmalarının, analiz edersem bana ipucu verecek ortak özellikleri nelerdir ?Θ ( N log N )Θ(NlogN)Θ(NlogN)

Eminim bir algoritma karmaşıklığı olabilir, bu yüzden herhangi ve tüm cevaplar takdir birden fazla yolu vardır. BTW Sıkı kanıtlar değil, genel özellikler ve ipuçları arıyorum.Θ(NlogN)


6
O(logn) ağaç anlamına gelir.
Pratik Deoghare


2
@PratikDeoghare: Mutlaka değil.
Raphael

3
@ Raphael çoğunlukla demek istedim! :)
Pratik Deoghare

Yanıtlar:


17

İşletme Arketipsel a, bölme ve fethet algoritması, bölme (ve yeniden birleşir) çalışma lineer zaman ve parçalar üzerinde recurses. Birleştirme sıralaması şu şekilde çalışır: girdiyi kabaca eşit iki parçaya bölerek zaman harcar, her parçayı özyineli olarak sıralar ve sıralanan iki yarıyı birleştirerek zaman harcar .Θ(nlogn)O(n)Θ(n)

Sezgisel olarak, böl ve fethet fikrini sürdürürken, her bölme aşaması toplamda doğrusal zaman alır, çünkü bölmek için parça sayısındaki artış, bölme tarafından alınan zaman doğrusal olduğundan, parçaların boyutundaki azalmayla tam olarak eşleşir. Toplam çalışma süresi, bir bölüm aşamasının toplam maliyetinin, bölüm aşamalarının sayısıyla çarpımıdır. Parçaların boyutu her seferinde yarıya indirildiğinden bölüm aşamaları olduğundan toplam çalışma süresi . (Çarpıcı bir sabite kadar, logaritmanın tabanı önemsizdir.)log2(n)nlog(n)

Denklemlere () koymak , böyle bir algoritmanın çalışma süresini tahmin etmenin bir yolu onu tekrar tekrar ifade etmektir: . Bu algoritmanın doğrusal zamandan daha fazla sürdüğü açıktır ve : iki katına çıktığında , sabit bir miktarda artar: logaritmik olarak veya başka bir deyişle artar .T(n)T(n)=2T(n/2)+Θ(n)n

T(n)n=T(n/2)n/2+Θ(1)
nT(n)/nT(n)/nT(n)=Θ(nlogn)

Bu daha genel bir kalıp örneğidir: ana teorem . Herhangi bir yinelemeli algoritması için bu bölme büyüklüğü, giriş içine ebatta parçalar ve bir zaman alır bölünme ve birleşmeyi gerçekleştirmek üzere, çalışma süresi tatmin . Bu, ve değerlerine ve şekline bağlı olan kapalı bir forma yol açar . Eğer ve , olduğu ana teoremi durumları .nan/bf(n)T(n)=aT(n/b)+f(n)abfa=bf(n)=Θ(n)T(n)=Θ(nlogn)


1
Özetlemek gerekirse: bir seferde arama alanının sabit kesirleriyle yok olan algoritmalar logaritmik terimler gösterecektir. Diğer faktörler, işi yapmanın ne kadar sürdüğüne bağlıdır.
Raphael

1
örnek: quicksort ortalama durumu O(nlogn)
vzn

11

zaman alan diğer iki algoritma kategorisi :Θ(nlogn)

Her bir öğenin sırayla işlendiği algoritmalar ve her öğenin işlenmesi logaritmik zaman alır (örneğin, HeapSort veya düzlemin çoğunun hesaplama geometrisi algoritmalarını süpürür).

Çalışma süresinin bir sıralama ön işleme adımının hakim olduğu algoritmalar. (Örneğin, Kruskal'ın minimum yayılan ağaç algoritmasında, ilk adım olarak kenarları ağırlık olarak sıralayabiliriz).


İlk paragraf için seçildi. İkincisi gereksiz görünüyor, çünkü bildiğimiz lineeritmik sıralama algoritmaları ya böl ve fethet ya da yığın. İlk kategori için bir örneği, aramasıdır büyüklükte bir ikili arama ağacında nesne (veya sıralanmış bir dizi) n ; daha soyut bir düzeyde, bu aynı zamanda böl ve fethet olarak da görülebilir. nn
Raphael

@ Raphael Sıralamanın zaten verilen çalışma süreleri kategorileri ile gereksiz olduğunu biliyorum. Mesele şu ki, sıralama bazen "darboğaz" dır ve sıralamada ilk soruyu sıralama ile ilgili olmayan algoritmalar, sıralama gerektiğinden çalışma süresine sahip olabilir.
Joe

9

Θ(nlogn)Θ(nlogn)

Bu tür algoritmaların ayrıntıları genellikle bölme ve fethetme tekniklerini kullanıyor olsa da, zorunlu olarak bunu yapmak zorunda değildir. Çalışma zamanı temelde sorulan sorudan gelir ve bu yüzden ayrı ayrı bahsetmeye değer olduğunu düşünüyorum.

Bu, her düğümün o düğümün alt ağacındaki yapraklar üzerinde arama yapmak için doğrusal boyutlu bir veri yapısı depoladığı artırılmış bir ikili arama ağacına dayanan veri yapılarında ortaya çıkar. Bu tür veri yapıları genellikle geometrik aralık araştırmasında ortaya çıkar ve genellikle bir ayrışma şemasına dayanır . Bakınız Agarwal Anketi .

O(nlogn)O(logn)


θ(nlogn)


5

Bunlar tipik olarak, “böl ve fethet” çeşidinin algoritmalarıdır; burada, bölünmeleri bölme ve birleştirme maliyeti “çok büyük” değildir. Bu davranışa ne tür yinelemelerin yol açtığını görmek için bu SSS'ye göz atın .


3

Tipik olarak, Böl ve fethet algoritmaları O (N log N) karmaşıklığı verir.


-1

O(nlogn)

for (i = 0; i < constant; i++){
    for(j = 0; j < n; j++){
        // Do some O(1) stuff on the input
    }
}

// Alternative Variant:
for (i = 0; i < constant; i++){
    for(j = n; j < constant; j++){
        // Do some O(1) stuff on the input
    }
}

O(n2)

Bu döngüyü kullanan bir algoritmanın somut bir örneğini veremiyorum, ancak özel algoritmaları kodlarken sıklıkla ortaya çıkıyor.


O(nlogn)Θ(n)Θ(1)Θ(|n|)n

O(nlogn)

Ayrıca, asıl soru büyük teta istemedi.
Nicolas Miari

1
O(nlogn)O(22n)O(almost anything else)Θ(nlogn)O(nlogn)
David Richerby

O(nlogn)O(nlogn)O(nlogn)O(nlogn)
Nicolas Miari
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.