İçeriğe atla
CodeItRaw
Heap & Öncelik Kuyruğu

Ders 1/2

Bazen bir yığın sayıdan sürekli en küçüğünü almak, araya yenilerini eklemek istersin. Her seferinde listeyi baştan sıralamak pahalıdır; her seferinde min aramak da öyle. Heap tam bu iş içindir: ekleme de en küçüğü çıkarma da log n adımda biter.

import heapq
heap = []
for v in [5, 1, 8, 3]:
heapq.heappush(heap, v)
first = heapq.heappop(heap) # 1
second = heapq.heappop(heap) # 3
smallest_left = heap[0] # 5
Python'da heap sıradan bir listedir; onu heap yapan heapq fonksiyonlarıdır. heappush ekler, heappop en küçüğü çıkarır, heap[0] çıkarmadan en küçüğe bakar. Elindeki listeyi tek seferde heap'e çevirmek için heapq.heapify(values) vardır.

n sayıyı heap'e koyup tek tek çıkarırsan sıralı gelirler; n ekleme ve n çıkarma, her biri log n: toplam n log n. Yani heap ile sıralama, iyi bir sıralamayla aynı sınıftadır. Heap'in asıl kazancı, sıralamanın tamamına ihtiyacın olmadığında ortaya çıkar.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    En Küçüğü Çek

    Kod Okuma · Çıktıyı Tahmin Et

  2. 02

    Heap ile Sıralama

    Kod Okuma · Big-O Oku

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi