Pedagojik Boyut
Sadeliği nedeniyle Lomuto'nun bölümlendirme yöntemini uygulamak daha kolay olabilir. Jon Bentley’nin Programlama İncisinde Sıralamaya Göre Güzel Bir Anakot
“Quicksort tartışmalarının çoğu iki yaklaşmakta olan endekse dayalı bir bölümleme düzeni kullanıyor [...] [yani Hoare's]. Her ne kadar bu planın temel fikri açık olsa da, ayrıntıları her zaman zor buldum - bir zamanlar iki günün daha iyi bir kısmını kısa bir bölümleme döngüsünde bir hatayı gizleyerek geçirdim. Ön taslakların bir okuyucusu, standart iki indeksli yöntemin aslında Lomuto'nunkinden daha basit olduğundan ve işaret etmek için bazı kodlar çizdiğinden; İki hata bulduktan sonra bakmayı bıraktım. ”
Performans boyut
Pratik kullanım için, verimlilik açısından uygulama kolaylığı feda edilebilir. Teorik olarak, performans karşılaştırması için element karşılaştırmalarının ve takasların sayısını belirleyebiliriz. Ek olarak, gerçek çalışma süresi, önbellekleme performansı ve dal yanlışlıkları gibi diğer faktörlerden etkilenecektir.
Aşağıda gösterildiği gibi, algoritmalar , takas sayısı dışında rastgele permütasyonlarda çok benzer davranır . Orada Lomuto'nun üç katı Hoare kadar ihtiyacı var !
Karşılaştırma Sayısı
n−1n
Takas Sayısı
Takas sayısı, dizideki öğelere bağlı olarak her iki algoritma için rastgeledir. Eğer rastgele permütasyonlar varsayarsak , yani tüm elementler farklıdır ve elementlerin her permütasyonu eşit derecede muhtemeldir, beklenen takas sayısını analiz edebiliriz .
1,…,n
Lomuto'nun Yöntemi
jA[j]x1,…,nx−1xx−1x
{1,…,n}1n
1n∑x=1n(x−1)=n2−12.
n
Hoare Yöntemi
x
ijxij
x
Hyp(n−1,n−x,x−1)n−xx−1(n−x)(x−1)/(n−1)x
Son olarak, Hoare'nin bölümlenmesi için beklenen toplam takas sayısını elde etmek için tüm pivot değerlerini tekrar değerlendiririz:
1n∑x=1n(n−x)(x−1)n−1=n6−13.
(Daha fazla ayrıntılı bilgi yüksek lisans tezimde , sayfa 29'da bulunabilir.)
Hafıza Erişim Deseni
Her iki algoritma da diziyi içine sırayla tarayan iki işaretçi kullanır . Bu nedenle her ikisi de neredeyse optimal önbellekleme davranırlar.
Eşit Elementler ve Zaten Sıralanan Listeler
Wandering Logic tarafından daha önce belirtildiği gibi, algoritmaların performansı rastgele permütasyonlar olmayan listeler için daha büyük farklılıklar gösterir.
n/2
0ijO(nlogn)
0A[j] <= x
i=nΘ(n2)
Sonuç
Lomuto'nun yönteminin uygulanması basit ve kolaydır, ancak bir kütüphane sıralama yöntemini uygulamak için kullanılmamalıdır.
A[i+1] <= x
. Sıralı bir dizide (ve makul şekilde seçilmiş pivotlar verildiğinde) Hoare hemen hemen hiç takas yapmaz ve Lomuto bir ton yapar (j bir kez hepsinden sonra yeterince küçülürA[j] <= x
.) Neyi özlüyorum?