COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

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ır

Binary 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.

Python 3
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

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. 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 ↗
İlerlemeden önce alıştırmayı çöz.