Quicksort Analizinde Kullanılacak Bozukluk Ölçüsü


9

Ben Lomuto bölüm ve sabit bir pivot kullanarak neden hızlı bir şekilde rasgele oluşturulan girdileri düzensiz, ama genel olarak kötü performans anlamaya çalışıyorum. Girişler rastgele oluşturulmuş olsa da, dizilere çok fazla düzen olabileceğini düşünüyorum, ancak dizilerdeki bozukluk düzeyini nasıl ölçeceğimden emin değilim. İnversiyon sayısını kullanmayı düşündüm, ancak bu diğer sorudan bunun bu durumda gerçekten iyi bir önlem olmadığını sordum .

Rastgele dizilerimin onlara çok fazla "düzen" olduğundan şüphelenmemin nedeni, pivotu rastgele ayarlamanın performans sorununu çözmesidir. Ancak teorik olarak, sözde "rastgele" girdi dizileri üzerinde herhangi bir performans problemi olmamalıdır.


Bu tür bir şey için bozukluğun iyi bir ölçüsü Kolmogorov karmaşıklığıdır. Temel olarak, en düzensiz dizenin sıkıştırılamaz dizeler olduğunu söyler. Sıralama algoritmalarının ortalama-durum analizi ve ortalama ve en kötü-durum analizi arasındaki ilişkiyi bulmak için kullanılan sıkıştırılamazlık yöntemine yol açar.
Peter

Şunu belirtmeliyim ki, bir lisans öğrencisiyim ... Biraz daha düz bir şey arıyordum, belki de bu makaledeki önlemlerden biri (sadece hangisini bilmiyorum): citeseerx.ist.psu. edu / viewdoc / özet? doi = 10.1.1.45.8017
Robert S. Barnes


Düşman bir pivot durumu yerine bir programlama hatası olduğundan şüphelenmelisiniz. Algoritmanın sıralanıp sıralanmadığını görmek için sadece 1'den N'ye kadar bir tam sayı dizisi sıralayın!
Yves Daoust

@Yvesdaoust Gerçekten önemli olduğunu düşünmüyorum, "Tekdüze olmayan" miktarı gerçekten sadece uzunluk dizesinin Kolmogorov karmaşıklığıdizideki öğelerin sırasını kodlar. Tabii ki, hesaplanamaz ve yalancı gibi derin dizeleri düşünmeniz gerekir, ancak her bozukluk ölçüsünün aslında Kolmogorov karmaşıklığının bir yaklaşımı olması açısından yararlıdır. Ve onunla bir şeyler kanıtlamak için hesaplamanıza gerek yok. Sıkıştırılamazlık yöntemiyle birçok karmaşıklık sonucu gösterilmiştir. logn!
Peter

Yanıtlar:


1

Lomuto vs Hoare
Lomuto bölümü eşit anahtarları sıralarken acı çekerken, Hoare bölümü değil.
Medyandan uzak bir pivot kullanıldığında her iki bölüm şeması da eşit derecede zarar görür.

Bozukluğun
ölçüsü Hızlı sıralama amacıyla seçilecek bozukluğun ölçüsü basittir.
C: Sabit pivot, rastgele verilere kıyasla ne kadar uzağa kaldırıldı?
Lomuto bölümünü kullanmakta ısrar ediyorsanız ve yinelenen değerlere izin verildiğini düşünüyorsanız, rastgele teste karşı aşağıdaki testi eklemeniz gerekir:
B: Rasgele kıyasla kaç tane yinelenen öğe var.

Tabii ki veri kümenizde yinelenen değerlere izin verildiğini varsaymak ve yine de Lomuto bölümünü değerlendirmek oldukça saçmadır, bu nedenle muhtemelen yinelenenleri önceden ortadan kaldırmalı veya Hoare bölümüne geçmelisiniz veya yinelenenlerin nadir olduğunu varsayalım.

Her iki önlem de istatistikleri kullanarak nicelleştirmek önemlidir.

Patolojik verileri ekarte edebiliriz
. Rastgele sıralamanın diğer sapmaları, çabuk sıralama analizleri açısından önemli olmayacaktır. Pivot ortancaya yakın olduğu sürece patolojik olmayan tüm veriler üzerinde iyi performans gösterecektir.
Rastgele mesafenin gerçekten çabuk-patolojik olması çok büyük olurdu, bu yüzden bunu ekarte edebiliriz.

Asla gerçek kodda sabit pivot (lar) kullanmayın
Sabit bir pivot * ile gerçek bir kod yazarsanız * (bu pivot her ne olursa olsun) kendinizi bir servis reddi saldırısına açtığınızı unutmayın, çünkü bir saldırgan patolojik değer tam o noktada ve bu nedenle her zaman pivot olarak rastgele bir eleman seçmelisiniz.

*) veya x pivotlardan en iyisini seçerseniz birden fazla pivot.

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.