Seçim neden kabarcık düzeninden daha hızlı?


28

Vikipedi 'de yazılmıştır, "... seçim sıralama neredeyse her zaman kabarcık ve gnome sıralamalardan daha iyi performans gösterir." Biri lütfen bana, ikisinin de olmasına rağmen, seçim sıralamalarının kabarcık sıralamadan daha hızlı kabul edildiğini neden açıklayabilir:

  1. En kötü durum zaman karmaşıklığı :O(n2)

  2. Karşılaştırma sayısı : O(n2)

  3. En iyi durum zaman karmaşıklığı :

    • Kabarcık sıralama:O(n)
    • Seçim sıralama:O(n2)
  4. Ortalama vaka zamanı karmaşıklığı :

    • Kabarcık sıralama:O(n2)
    • Seçim sıralama:O(n2)

Yanıtlar:


32

Sağladığınız tüm karmaşıklıklar doğrudur, ancak Big O notasyonunda verilmiştir , bu nedenle tüm katkı değerleri ve sabitleri atlanmıştır.

Sorunuzu cevaplamak için bu iki algoritmanın detaylı analizine odaklanmamız gerekiyor. Bu analiz elle yapılabilir veya birçok kitapta bulunabilir. Knuth'un Bilgisayar Programlama Sanatının sonuçlarını kullanacağım .

Ortalama karşılaştırma sayısı:

  • Kabarcık sıralama :12(N2NlnN(γ+ln21)N)+O(N)
  • Ekleme sıralama :14(N2N)+NHN
  • Seçim sıralama :(N+1)HN2N

Şimdi, eğer bu fonksiyonları çizerseniz şöyle bir şey elde edersiniz: arsa plot2

Gördüğünüz gibi, her iki sıralama yönteminde de aynı asimptotik karmaşıklığa sahip olmasına rağmen, elemanların sayısı arttıkça kabarcık sıralaması çok daha kötü.

Bu analiz, girişin rastgele olduğu varsayımına dayanmaktadır - bu her zaman doğru olmayabilir. Ancak, sıralamaya başlamadan önce, ortalama durumu elde etmek için giriş sırasına (herhangi bir yöntem kullanarak) rastgele izin verebiliriz.

Zamana bağlı karmaşıklık analizini ihmal ettim çünkü uygulamaya bağlıdır, ancak benzer yöntemler kullanılabilir.


"Ortalama durumda elde etmek için giriş sırasını rasgele düzenleyebiliriz" ile ilgili bir sorunum var. Bu neden sıralama için gereken süreden daha hızlı bir şekilde yapılıyor?
Sasho Nikolov

1
Bunu alacak numaralardan herhangi dizisini permute edebilirsiniz nerede vakit dizisi uzunluğudur. Bu sıralama algoritması dayalı herhangi karşılaştırmada en az olmalıdır aşikardır eklerseniz o kadar bile karmaşıklığı 's karmaşıklığı için bu kadar önemli değişmeyecektir. Her neyse, zamanla ilgili değil karşılaştırmaktan bahsediyoruz, zaman karmaşıklığı cevapta bahsettiğim gibi uygulamaya ve makineye bağlı. N O ( N log N ) NNNO(NlogN)N
Bartosz Przybylski

Sanırım uykum vardı, haklısın, sırasına doğrusal zamanda izin verilebilir.
Sasho Nikolov

HN=Θ(logN)

Gama = 0.577216, Euler-Mascheroni'nin sabitidir. İlgili bölüm "Programlama Sanatı" dır Cilt 3 bölüm 5.2.2 sf. 109 ve 129. Bubble sıralama durumunu tam olarak özellikle O (sqrt (N)) terimini nasıl çizdiniz? Az önce ihmal ettin mi?
mxmlnkn

11

O

Fonksiyonun kendisi, örneğin karşılaştırmaların ve / veya takasların sayısı, aynı oranda büyümek şartıyla aynı asimptotik maliyeti olan iki algoritma için farklı olabilir.

n/41

k×nkn/2(n1)×(n2)/2

Özetle, asimptotik sınır, bir algoritmanın maliyetinin girdi büyüklüğüne göre nasıl arttığına dair iyi bir fikir verir, ancak aynı set içindeki farklı algoritmaların göreceli performansı hakkında hiçbir şey söylemez.


1
bu çok iyi bir cevap bile
Grijesh Chauhan

hangi kitabı tercih edersin?
Grijesh Chauhan 27:13

@GrijeshChauhan: Kitaplar bir zevk meselesidir, bu nedenle herhangi bir tuzu öneriniz. Kişisel olarak Cormen, Leiserson ve Rivest'in "Algoritmalara Giriş" adlı kitabını ve belirli bir konuda daha fazla / tüm ayrıntılara ihtiyaç duyduğunuzda Knuth'un "Bilgisayar Programlama Sanatı Sanatı" serisini seviyorum. Daha önce burada kitapların sorulup sorulmadığını kontrol etmek ya da sorulmamışsa bu soruyu göndermek isteyebilirsiniz.
Pedro,

Benim için cevabınızdaki üçüncü paragraf asıl cevaptır. Diğer cevaplarda verilen büyük girişler için grafikler değil.
overexchange

3

Kabarcık sıralama daha fazla takas süresi kullanır, seçim sıralama bu durumu engeller.

Sıralama seçimini kullanırken n, en fazla süreyi değiştirir . fakat kabarcık sıralaması kullanılırken neredeyse değişiyor n*(n-1). Ve belli ki okuma zamanı hafızada bile yazma zamanından daha az. Karşılaştırma süresi ve diğer çalışma süresi ihmal edilebilir. Yani takas süreleri, sorunun kritik darboğazıdır.


Bence Bartek'in diğer cevabı daha makul ama oy kullanamıyorum ya da yorum yapamıyorum ... BTW Yazma zamanının hala daha fazla etkilendiğini ve bunu görür ve kabul ederse bunu dikkate alabileceğini umuyorum.
simonmysun

İki öğeyi karşılaştırmak için harcanan zamanın iki öğeyi değiştirmek için harcanan süreyi çok fazla aşabileceği durumlar olduğu için, karşılaştırma sayısını basitçe görmezden gelemezsiniz. Çok uzun dizelerin bağlantılı bir listesini düşünün (her biri 100k karakter deyin). Her dizgede okunması, işaretçi atamasını yapmaktan çok daha uzun sürer.
Irvin Lim

@IrvinLim Haklı olabileceğinizi düşünüyorum ama fikrimi değiştirmeden önce istatistiksel verileri görmem gerekebilir.
simonmysun
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.