Bunun hakkında düşünmenin alternatif bir yolu, maksimum değerin i
sıfırlanmadan önceki haline gelmesidir. Bu, ortaya çıktığı gibi, önceki sıralama düzeninin A
algoritmanın çalışma zamanını nasıl etkilediğinin nedenini açıkça ortaya koymaktadır.
Özellikle, i
yeni maksimal değerini ayarladığında, N diyelim, dizinin [A[0], ..., A[N-1]]
artan düzende sıralandığını gözlemleyin .
Peki elementi A[N]
karışıma eklediğimizde ne olur ?
Matematik:
Diyelim ki, pozisyonunda . Sonra ihtiyacımız (ı göstermek edeceğiz döngü yineleme ) yerleştirmek için taşımak için , yerleştirmek taşımak için yinelemeleri ve genel olarak:pNNstepsN−1N+(N−1)N−2
stepsN(pN)=N+(N−1)+(N−2)+⋯+(pN+1)=12(N(N+1)−pN(pN+1))
Rastgele sıralanan bir dizi için , her için üniform dağılımını alır :pN{0,1,…,N}N
E(stepsN(pN))=∑a=1NP(pN=a)stepsN(a)=∑a=1N1N12(N(N+1)−a(a+1))=12(N(N+1)−13(N+1)(N+2))=13(N2−1)=Θ(N2)
toplam Faulhaber formülü veya altındaki Wolfram Alpha bağlantısı kullanılarak gösterilebilir.
Bir ters kriteri dizisi için, tüm ve elde ederiz:pN=0N
stepsN(pN)=12N(N+1)
tam olarak, diğer değerlerinden kesinlikle daha uzun .pN
Önceden sıralanmış bir dizi için, ve ; alt sıradaki terimler alakalı olur.pN=NstepsN(pN)=0
Toplam zaman:
Toplam süreyi almak için, tüm üzerindeki adımları özetliyoruz . (Süper dikkatli olsaydık, takasların yanı sıra döngü yinelemelerini de toplar ve başlangıç ve bitiş koşullarına dikkat ederdik, ancak çoğu durumda karmaşıklığa katkıda bulunmadıklarını görmek oldukça kolaydır) .N
Ve yine, beklenti doğrusallığını ve Faulhaber Formülünü kullanarak:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Elbette, bir nedenden dolayı değilse (örneğin, baktığımız dizilerin dağılımı zaten sıralanmaya çok yakın), o zaman bu her zaman gerekmez durum böyle olsun. Ancak bunu başarmak için üzerinde çok özel dağılımlar !stepsN(pN)Θ(N2)pN
İlgili okuma: