Arama ve sıralama · 16 / 53
Heap, priority queue ve heapsort
Anla → iz sür → uygula → gerekçelendir
2 dk okuma · uygulama için ayrıca zaman ayırBinary heap complete binary tree biçimini ve heap order'ı birlikte korur. Min-heap'te ebeveyn≤çocuk; bütün sol alt ağaç küçük, sağ alt ağaç büyük olmak zorunda değildir. Bu BST değildir. Sıfır tabanlı dizide çocuklar 2i+1,2i+2, parent (i−1)//2'dir.
Ekleme sona koyup sift-up yapar; minimum çıkarma kökü son öğeyle değiştirip sift-down yapar. Arbitrary key araması heap'te O(n) olabilir. Decrease-key için öğenin konumunu takip eden ek map gerekir; basit heapq uygulamalarında eski entry'leri stale olarak atlayan yaklaşım kullanılabilir.
Bottom-up heapify Θ(n)'dir: düğümlerin çoğu yaprağa yakındır ve az aşağı iner. “Her düğüm log n iner” üst sınırı gevşektir. Heapsort max-heap kökünü sona taşır ve aktif heap'i daraltır; O(n log n) ve O(1) yardımcı alanlı in-place varyant stabil değildir. Öncelikleri eşitse tie-breaker eklemek karma nesneleri yanlış karşılaştırmayı önler.
Adım adım iz sürme
Heap [2,5,3], 1 ekle: sona1, parent5 ile swap →[2,1,3,5]; parent2 ile swap →[1,2,3,5].
Maliyet ve varsayımlar
peek O(1), push/pop O(log n), heapify Θ(n), heapsort Θ(n log n).
Ç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.
import heapq
jobs = [(3, "C"), (1, "A"), (2, "B")]
heapq.heapify(jobs)
order = [heapq.heappop(jobs)[1] for _ in range(3)]
assert order == ["A", "B", "C"]KAVRADIĞINI KONTROL ET
Sıra sende
Heap dizisinin tamamı sıralı mıdır?
Çözümün mantığını göster
Hayır. [1,4,2] geçerli min-heap'tir ama dizi sıralı değildir. Heap yalnız ebeveyn-çocuk ilişkisini ve kökte minimumu garanti eder.
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.006 · Introduction to Algorithms ↗