Heap ve Priority Queue Nedir? Heap Lab ile Görselleştirin

Min heap, max heap, array-tree eşlemesi, build-heap, insert, extract, change-key, Heap Sort ve Priority Queue işlemlerini adım adım öğrenin.

📅2026-08-24
Harun BüyükçolakHarun Büyükçolak, Full Stack Developer
Heap ve Priority Queue Nedir? Heap Lab ile Görselleştirin

Yazı içeriği

Heap, en yüksek veya en düşük öncelikli öğeye hızlı erişmek için kullanılan complete binary tree tabanlı bir veri yapısıdır. Priority Queue ise öğeleri geliş sırasına göre değil, önceliklerine göre çıkaran abstract data type’tır. Bu iki kavram sıkça aynı şey gibi anlatılsa da biri representation, diğeri davranış sözleşmesidir.

Websoftik Academy Heap & Priority Queue Lab, aynı heap’i array ve tree görünümünde senkronize eder. Insert, extract, change-key, bottom-up build ve Heap Sort işlemlerinde aktif index’leri, karşılaştırmaları ve invariant’ın nasıl geri kurulduğunu micro-step düzeyinde gösterir.

1. Heap Veri Yapısı Nedir?

Binary heap iki koşulu birlikte sağlar. Shape property, ağacın complete binary tree olmasını; heap-order property ise parent ile child arasındaki öncelik ilişkisini tanımlar. Max heap’te her parent child’larından büyük veya eşit, min heap’te küçük veya eşittir.

Heap bir Binary Search Tree değildir. Sol subtree’deki bütün değerlerin root’tan küçük olması gerekmez. Garanti yalnızca parent-child edge’leri için geçerlidir; bu nedenle root optimum öğeyi verirken rastgele bir değeri aramak yine O(n) sürebilir.

2. Heap & Priority Queue Lab Nasıl Çalışıyor?

Heap & Priority Queue Lab, foundations, array-tree mapping, construction, mutation, priority queue ve Heap Sort modüllerini tek bir öğrenme rotasında birleştirir. Bir array hücresi seçildiğinde karşılık gelen tree node da vurgulanır.

Her trace adımı operation phase, aktif index, karşılaştırılan değerler, swap kararı ve heap invariant sonucunu içerir. Böylece yalnızca son diziyi değil, yapının neden geçici olarak bozulduğunu ve hangi hareketle düzeldiğini açıklayabilirsiniz.

3. Complete Binary Tree Neden Önemli?

Complete binary tree’nin bütün seviyeleri, son seviye hariç, doludur; son seviye soldan sağa yerleşir. Bu düzen heap yüksekliğini Θ(log n) ile sınırlar. Insert için yeni konum ve extract sonrası root’a taşınacak son öğe belirsiz değildir.

Shape property sayesinde pointer tabanlı node nesnelerine ihtiyaç duyulmaz. Tree, boşluk bırakmayan bir array içinde saklanır. Bu hem bellek locality’sini iyileştirir hem parent ve child ilişkilerini aritmetik formüllere dönüştürür.

4. Array ve Tree Nasıl Eşleşir?

Sıfır tabanlı array’de i index’indeki node için parent ⌊(i-1)/2⌋, left child 2i+1, right child 2i+2 olur. Bir tabanlı gösterimde formüller değişir; sınavda kullanılan index modelini baştan kontrol etmek gerekir.

Lab, cursor’ı array üzerinde hareket ettirdiğinizde tree edge’lerini eşzamanlı aydınlatır. Bu eşleme özellikle sift-up ve sift-down sırasında “hangi node nereye gitti?” sorusunu görsel olarak çözer.

5. Min Heap ve Max Heap Arasındaki Fark Nedir?

  • Min heap: root minimum öğedir; küçük öncelik önce çıkar.
  • Max heap: root maksimum öğedir; büyük öncelik önce çıkar.
  • İki modelde de: shape property ve asymptotic maliyetler aynıdır.

Kullanılacak model problem sözleşmesine bağlıdır. Dijkstra’da en küçük tentative distance için min-priority queue; top-k smallest gibi bazı problemlerde sınırı tutmak için max heap kullanılabilir.

6. Insert ve Sift-Up Nasıl Çalışır?

Yeni öğe shape property’yi korumak için array’in sonuna eklenir. Max heap’te parent’tan büyükse, min heap’te parent’tan küçükse swap edilir. Bu süreç root’a ulaşana veya parent-child ilişkisi düzelene kadar sürer.

Her swap bir seviye yukarı çıktığından insert maliyeti O(log n)’dir. Best case’te yeni öğe ilk parent ile uyumluysa yalnızca bir kontrol gerekir. Lab, candidate path’i tree üzerinde ayrı renkle göstererek worst-case yüksekliğini somutlaştırır.

7. Extract ve Sift-Down Nasıl Çalışır?

Extract-min veya extract-max root’u çıkarır. Son array öğesi root’a taşınır, heap size bir azaltılır ve doğru child ile swap edilerek aşağı indirilir. Max heap’te iki child arasından daha büyük, min heap’te daha küçük olan seçilmelidir.

Yanlış child ile swap yapmak local ilişkiyi düzeltse bile diğer edge’de invariant’ı bozabilir. Lab iki child karşılaştırmasını, winner child’ı ve durma koşulunu ayrı micro-step’ler olarak gösterir. Toplam maliyet O(log n)’dir.

8. Bottom-Up Build-Heap Neden O(n)’dir?

Bir array’i heap’e dönüştürmek için her öğeyi tek tek insert etmek O(n log n) üst sınırı verir. Bottom-up yöntem son internal node’dan root’a doğru sift-down uygular ve O(n) zamanda heap kurar.

Bunun nedeni bütün node’ların tam yükseklik kadar hareket etmemesidir. Node’ların yaklaşık yarısı leaf’tir ve hiç sift-down yapmaz; çeyreği yalnızca bir, sekizde biri iki seviye hareket edebilir. Ağırlıklı toplam lineer kalır. Lab, her seviyenin gerçek karşılaştırma katkısını ayrı sayaçta toplar.

9. Priority Queue Nedir?

Priority Queue; insert, peek ve extract-highest-priority işlemlerini sunar. FIFO queue’dan farklı olarak önce gelen öğe değil, priority değeri belirleyici olur. Heap bu sözleşmenin yaygın ve verimli implementation’ıdır.

CPU scheduling, event simulation, network routing, Dijkstra ve Prim gibi algoritmalar priority queue kullanır. Eşit priority durumunda stable ordering gerekiyorsa öğeye monoton artan arrival index eklemek gibi bir tie-break politikası tanımlanmalıdır.

10. Change-Key ve Delete İşlemleri Nasıl Yapılır?

Bir key’in priority’si değiştiğinde hareket yönü yeni değere bağlıdır. Max heap’te değer büyüdüyse sift-up, küçüldüyse sift-down gerekir. Dijkstra’daki decrease-key işlemi min heap üzerinde node’u yukarı taşır.

Rastgele index silmede öğe son değerle değiştirilir, heap size azaltılır ve local ilişkiye göre doğru yönde repair yapılır. Node’un array index’ini hızlı bulmak gerekiyorsa ayrıca id-to-index map tutulması gerekir; aksi hâlde arama O(n) olur.

11. Heap Sort Nasıl Çalışır?

Artan sıralama için önce max heap kurulur. Root’taki maksimum değer array’in son aktif konumuyla swap edilir, heap size küçültülür ve yeni root sift-down ile düzeltilir. Her turda sorted suffix bir öğe büyür.

Heap Sort worst-case O(n log n), in-place ve comparison-based’dir; ancak stable değildir. Sorting ailelerini karşılaştırmak için Sorting Algorithms Lab rehberine geçebilirsiniz.

12. Heap, BST ve Sorted Array Nasıl Ayrılır?

  • Heap: optimum öğe O(1), insert ve extract O(log n), arbitrary search O(n).
  • Balanced BST: search, insert, delete ve ordered traversal O(log n).
  • Sorted array: binary search O(log n), ortadaki insert/delete O(n).

“Hangisi daha iyi?” sorusunun tek cevabı yoktur. Operasyon dağılımı ve gereken ordering garantisi seçimi belirler. BST invariant’larını Trees & BST rehberinde karşılaştırabilirsiniz.

13. Heap Complexity Tablosu Nasıl Okunur?

  • Peek min/max: O(1)
  • Insert: O(log n)
  • Extract min/max: O(log n)
  • Change-key: index biliniyorsa O(log n)
  • Bottom-up build: O(n)
  • Heap Sort: O(n log n)

Complexity’yi yalnızca tabloda ezberlemek yerine hareket edilen tree yüksekliği ve yapılan karşılaştırma sayısıyla ilişkilendirin. Büyüme analizlerini ayrıca Complexity Lab’de deneyebilirsiniz.

14. Heap Lab Nasıl Çalışılmalı?

  1. Array-tree index formüllerini elle üç farklı node için doğrulayın.
  2. Aynı input’u min heap ve max heap olarak kurup root farkını açıklayın.
  3. Insert öncesi sift-up path’ini, extract öncesi sift-down path’ini tahmin edin.
  4. Bottom-up build ile repeated insert karşılaştırma sayılarını ölçün.
  5. Priority Queue’da eşit priority için kendi tie-break politikanızı kurun.
  6. Heap Sort’ta heap region ve sorted suffix sınırını her tur işaretleyin.

Heap & Priority Queue Lab’i açın ve array ile tree’yi aynı trace üzerinde okuyun. Ardından heap’in Huffman ve greedy tasarımındaki rolünü görmek için Greedy Optimization rehberine geçin.

Sonraki Adim: Bunlari da Oku

Bu yaziyi tamamladiysan, bir sonraki seviyeye gecmek icin su iceriklerle devam etmeni oneririz:

Ucretsiz Seviye Analizi ile Baslayalim

Mevcut seviyenizi hizlica analiz edip size en uygun ders planini birlikte cikaralim.

WhatsApp