Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Struktur Data & Algoritma

Pelajaran 11 dari 17

Pohon, tabel hash, dan heap

Heap dan antrean prioritas dengan heapq

Setelah pelajaran ini kamu bisa memakai heapq untuk mengambil data terkecil berulang kali, memilih k data teratas, dan memecah seri prioritas yang sama.

±13 menitDiperiksa 1 Okt 2026

Materi

Antrean prioritas adalah antrean yang tidak mengeluarkan data menurut urutan datang, melainkan menurut prioritasnya: yang paling mendesak keluar lebih dulu. Struktur yang biasa menjalankannya adalah heap. Min-heap adalah pohon biner yang setiap induknya tidak lebih besar daripada anak-anaknya, sehingga data terkecil selalu berada di akar.

Modul heapq menyimpan heap di dalam list biasa: anak dari posisi k ada di posisi 2k+1 dan 2k+2, dan heap[0] selalu data terkecil. heappush() menambah data lalu menaikkannya sampai aturan induk terpenuhi lagi, dan heappop() mengeluarkan akar lalu menurunkan data pengganti. Keduanya hanya menyusuri satu jalur dari akar ke daun, jadi biayanya sebanding dengan tinggi heap, sekitar log₂ n. heapify() mengubah list yang sudah ada menjadi heap dalam waktu linear.

import heapq

antre = [5, 3, 8, 1, 2]
heapq.heapify(antre)
print(antre)                  # [1, 2, 8, 3, 5]: heap, belum urut
print(heapq.heappop(antre))   # 1
print(heapq.nsmallest(2, [7, 4, 9, 1]))   # [1, 4]

heapq hanya menyediakan min-heap. Untuk mengeluarkan yang terbesar lebih dulu, simpan nilai negatifnya, atau pakai heapq.nlargest dan nsmallest untuk mengambil k data teratas tanpa mengurutkan seluruh daftar. Data yang punya prioritas disimpan sebagai tuple (prioritas, data), karena tuple dibandingkan dari elemen pertama.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Setelah heapq.heapify(x) dengan x = [5, 3, 8, 1, 2], pernyataan mana yang pasti benar?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke