What is a Heap?
Coddy'nin Heapler ve Öncelikli Kuyruklar - Veri Yapıları Serisi #7 kursunda ders 2 / 14.
Bir yığın (heap), basit bir değişmezi takip eden ağaç şeklinde bir veri yapısıdır: her ebeveyn, çocuklarından daha küçüktür (veya onlara eşittir). En küçük değer her zaman kökte bulunur ve O(1) sürede okunmaya hazırdır. Bu özel türe min-yığın (min-heap) denir; kökte en büyük değerin bulunduğu tam tersi durum ise maks-yığın (max-heap) olarak adlandırılır.
İşin zekice kısmı depolamadır. Onu bir ağaç olarak düşünsek de, bir yığın düz bir dizi (array) içinde yaşar. i indeksindeki düğüm için:
- Ebeveyni
(i - 1) / 2indeksindedir. - Sol çocuğu
2 * i + 1indeksindedir. - Sağ çocuğu
2 * i + 2indeksindedir.
İşaretçi yok, düğüm nesnesi yok: sadece indeks matematiği. Bu, yığınları önbellek dostu ve uygulanması kolay hale getirir.
Bir min-yığın üzerindeki beş ana işlem şunlardır:
- Peek: En küçük değeri (kökü) döndürür.
- Insert: Bir değer ekler ve onu yerine ulaşana kadar yukarı kaydırır (bubble up).
- ExtractMin: En küçük değeri kaldırır ve döndürür.
- Size: Kaç değerin saklandığını döndürür.
- IsEmpty: Yığının boş olup olmadığını kontrol eder.
Hadi bir MinHeap sınıfı oluşturalım!
Kendin dene
Bu ders bir kod alıştırması içermiyor.
Heapler ve Öncelikli Kuyruklar - Veri Yapıları Serisi #7 bölümündeki tüm dersler
Kendi başına pratik yap: Online C derleyicisi