🐍 9.5: Python heapq Modülü

Yerleşik Heap İmplementasyonu

🎯 Python heapq Nedir?

Python'un heapq modülü, heap işlemleri için optimize edilmiş fonksiyonlar sağlar.

⚠️ Önemli: Min Heap!

Python heapq sadece min heap sağlar. Max heap için değerleri negatif yapın!

heappush(heap, item)
Heap'e yeni eleman ekle
O(log n)
heappop(heap)
En küçük elemanı çıkar
O(log n)
heapify(list)
Listeyi heap'e çevir
O(n)
nsmallest(n, list)
En küçük n elemanı bul
O(n log k)
nlargest(n, list)
En büyük n elemanı bul
O(n log k)
heappushpop(heap, item)
Push sonra pop (atomic)
O(log n)
heapq Temel Fonksiyonlar
import heapq

print("=== heapq Temel Fonksiyonlar ===\n")

# 1. heappush - Eleman ekle
heap = []
heapq.heappush(heap, 5)
heapq.heappush(heap, 3)
heapq.heappush(heap, 7)
heapq.heappush(heap, 1)

print(f"Heap sonrası: {heap}")
print(f"En küçük (root): {heap[0]}")

# 2. heappop - En küçüğü çıkar
min_val = heapq.heappop(heap)
print(f"\nPop edildi: {min_val}")
print(f"Kalan heap: {heap}")

# 3. heapify - Listeyi heap'e çevir
arr = [9, 3, 7, 1, 5]
print(f"\nRastgele liste: {arr}")
heapq.heapify(arr)
print(f"Heapify sonrası: {arr}")

# 4. nsmallest / nlargest - En küçük/büyük n eleman
data = [5, 2, 9, 1, 7, 3, 8]
print(f"\nVeri: {data}")
print(f"En küçük 3: {heapq.nsmallest(3, data)}")
print(f"En büyük 3: {heapq.nlargest(3, data)}")

# 5. heappushpop - Push + pop (atomic)
heap = [1, 3, 5, 7]
heapq.heapify(heap)
result = heapq.heappushpop(heap, 2)
print(f"\nheappushpop(2): Dönen={result}, Heap={heap}")

# 6. heapreplace - Pop + push (atomic)
result = heapq.heapreplace(heap, 6)
print(f"heapreplace(6): Dönen={result}, Heap={heap}")
Çıktı bekleniyor...

🔝 Max Heap Nasıl Yapılır?

Max Heap - Negatif Trick
import heapq

print("=== Max Heap (Negatif Yöntemi) ===\n")

# Max heap simüle et
max_heap = []
values = [5, 2, 9, 1, 7, 3]

print(f"Eklenecek değerler: {values}")

# Negatif olarak ekle
for val in values:
    heapq.heappush(max_heap, -val)

print(f"Heap (negatif): {max_heap}")

# Çıkarırken geri çevir
print("\nMax'tan min'e sıralı çıkar:")
while max_heap:
    val = -heapq.heappop(max_heap)
    print(f"  {val}", end=" ")

print("\n\n=== Alternatif: Sınıf Wrapper ===")

class MaxHeap:
    def __init__(self):
        self.heap = []
    
    def push(self, val):
        heapq.heappush(self.heap, -val)
    
    def pop(self):
        return -heapq.heappop(self.heap)
    
    def peek(self):
        return -self.heap[0] if self.heap else None
    
    def __len__(self):
        return len(self.heap)

# Kullanım
mh = MaxHeap()
for val in [5, 2, 9, 1, 7]:
    mh.push(val)

print(f"Max Heap size: {len(mh)}")
print(f"En büyük: {mh.peek()}")
print(f"Pop: {mh.pop()}")
print(f"Yeni en büyük: {mh.peek()}")
Çıktı bekleniyor...

🎮 İnteraktif heapq Playground

heapq fonksiyonlarını canlı olarak deneyin!

🧪 heapq Deneme Alanı

heap = []
İşlem geçmişi burada görünecek...

📋 Özet

✅ heapq Fonksiyonları

  • heappush(heap, item) - Ekle O(log n)
  • heappop(heap) - En küçüğü çıkar O(log n)
  • heapify(list) - Liste → Heap O(n)
  • nsmallest/nlargest(n, list) - Top-K
  • Max heap: Negatif kullan!
  • İnteraktif playground ile fonksiyonları canlı deneyebilirsiniz