Arama ve sıralama · 15 / 53
Quicksort, quickselect ve pivot seçimi
Anla → iz sür → uygula → gerekçelendir
1 dk okuma · uygulama için ayrıca zaman ayırPartition, pivot'a göre öğeleri bölümlere ayırır; pivot seçimi ile partition kuralı ayrı kararlardır. Rastgele pivot adversarial sıralılığa bağımlılığı azaltır ama worst-case garantisini ortadan kaldırmaz. Üç yönlü partition küçük/eşit/büyük grupları ayırarak çok tekrar içeren veride gereksiz recursion'ı önler.
Quicksort her iki tarafı sıralar. Quickselect yalnız k'ın bulunduğu tarafa gider; beklenen doğrusal seçim sağlar. k'ın sıfırdan mı birden mi sayıldığını tanımla. Median-of-medians uygun uygulanırsa worst-case O(n) seçim elde eder, fakat sabit maliyeti yüksektir.
Introsort derinlik sınırına ulaştığında heapsort'a dönerek worst-case O(n log n) sağlar. Timsort başka bir hibrit olup mevcut run'ları kullanır; Python'un sort fonksiyonunu burada yazdığımız quicksort sanma. Aşağıdaki okunaklı üç-listeli örnek in-place değildir; benchmark'ta allocation maliyetini saklama.
Adım adım iz sürme
[3,1,3,2], pivot3 → küçük[1,2], eşit[3,3], büyük[]. Eşit bölüm yeniden sıralanmaz.
Maliyet ve varsayımlar
Rastgele quicksort beklenen O(n log n), worst O(n²). Quickselect beklenen O(n). Örnek partition başına O(n) alan ayırır.
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
from random import choice
def quicksort(a):
if len(a) < 2: return list(a)
p = choice(a)
return (quicksort([x for x in a if x < p]) +
[x for x in a if x == p] +
quicksort([x for x in a if x > p]))
assert quicksort([3,1,3,2]) == [1,2,3,3]KAVRADIĞINI KONTROL ET
Sıra sende
En küçük pivot her tur seçilirse recurrence nedir?
Çözümün mantığını göster
T(n)=T(n−1)+Θ(n), dolayısıyla Θ(n²). Rastgelelik bu bölünmenin beklentide sürmesini engeller, imkânsız yapmaz.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
MIT 6.046J · Design and Analysis ↗Princeton · Algorithms, Sedgewick & Wayne ↗