IKL6207 Struktur Data dan Algoritma
10 Heap dan Priority Queue
1
2
Contoh Kasus
Dua pesawat, A dan B, akan mendarat di sebuah bandara
Pesawat A memiliki sisa bahan bakar 1000 liter
Pesawat B memiliki sisa bahan bakar 800 liter
Pesawat A berjarak 3 menit dari bandara
Pesawat B berjarak 6 menit dari bandara
Pesawat mana yang sebaiknya diprioritaskan untuk mendarat? Kenapa?
3
Small Quiz
Berapa tinggi minimal binary tree berikut ini?
Sebuah binary tree memiliki 1 node
Sebuah binary tree memiliki 3 node
Sebuah binary tree memiliki 7 node
Berapa jumlah node maksimal yang mungkin dimiliki oleh sebuah binary tree
dengan ketinggian 0
dengan ketinggian 1
dengan ketinggian 5
4
Contoh Kasus lain
Mendapatkan most popular (trending) items.
Message queue dalam lingkungan komputasi terdistribusi.
5
Heap
Complete binary tree
Setiap node memiliki dua anak. Kecuali nodes di level terakhir.
Node baru ditambahkan ke level paling bawah, dari kiri ke kanan
Heap Property
Max Heap atau Min Heap
Max Heap: Nilai di sebuah node harus lebih besar daripada nilai di node
anak
Benar atau Salah: Elemen terbesar dalam Max heap pasti ada di root
6
Representasi Heap
Direpresentasikan menggunakan list
Root adalah elemen di index 0
Anak kiri dari root diletakkan di index 1
Anak kanan dari root diletakkan di index 2
Anak kiri dari sebuah node dengan index diletakkan di index
Anak kanan dari sebuah node dengan index diletakkan di index
Parent dari sebuah node dengan index ada di index
7
Representasi Heap
Heap dengan jumlah node
Semua nodes memiliki child / children mulai dari elemen pertama hingga
elemen
Elemen-elemen yang memiliki child / children hanyalah "setengah" dari
elemen
8
9
Heap dalam Python
Import module heapq .
Minimum heap (elemen terkecil ada di posisi pertama).
import heapq as hp
d1 = [2, 3, 4, 5, 6, 8, 9]
hp.heapify(d1)
d2 = [2, 9, 3, 8, 4, 6, 5]
hp.heapify(d2)
# Menambahkan elemen baru ke dalam heap
hp.heappush(d1, 1)
hp.heappush(d2, 1)
print(d1, d2)
10
Heap dalam Python
# Menghapus elemen dari heap
hp.heappop(d1)
hp.heappop(d2)
print(d1, d2)
heapreplace() sama seperti heappop() diikuti dengan heapppush()
heappushpop() sama seperti heappush() diikuti dengan heappop()
11
Contoh
List mana yang merupakan heap?
d1 = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1]
d2 = [10, 20, 43, 1, 2, 65, 17, 44, 6, 7, 8]
d3 = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]
import heapq as hp
h1 = []
for d in d1:
hp.heappush(h1, d)
print(h1)
h2 = []
for d in d2:
hp.heappush(h2, d)
print(h2)
12
Heapify
Mulai dari "separuh" heap awal, mundur hingga ke elemen pertama
"separuh" sisanya tidak memiliki anak, pasti ada di posisi leaf
Jika ada susunan yang tidak memenuhi Heap Property, benahi.
Lakukan secara rekursif.
13
14
15
16
17
Add elemen baru
Tambahkan elemen-elemen ini ke dalam heap yang dihasilkan. Lakukan heapify
jika perlu.
18

Kuliah Struktur Data dan Algoritma IKL6207 materi Binary Heap

  • 1.
    IKL6207 Struktur Datadan Algoritma 10 Heap dan Priority Queue 1
  • 2.
  • 3.
    Contoh Kasus Dua pesawat,A dan B, akan mendarat di sebuah bandara Pesawat A memiliki sisa bahan bakar 1000 liter Pesawat B memiliki sisa bahan bakar 800 liter Pesawat A berjarak 3 menit dari bandara Pesawat B berjarak 6 menit dari bandara Pesawat mana yang sebaiknya diprioritaskan untuk mendarat? Kenapa? 3
  • 4.
    Small Quiz Berapa tinggiminimal binary tree berikut ini? Sebuah binary tree memiliki 1 node Sebuah binary tree memiliki 3 node Sebuah binary tree memiliki 7 node Berapa jumlah node maksimal yang mungkin dimiliki oleh sebuah binary tree dengan ketinggian 0 dengan ketinggian 1 dengan ketinggian 5 4
  • 5.
    Contoh Kasus lain Mendapatkanmost popular (trending) items. Message queue dalam lingkungan komputasi terdistribusi. 5
  • 6.
    Heap Complete binary tree Setiapnode memiliki dua anak. Kecuali nodes di level terakhir. Node baru ditambahkan ke level paling bawah, dari kiri ke kanan Heap Property Max Heap atau Min Heap Max Heap: Nilai di sebuah node harus lebih besar daripada nilai di node anak Benar atau Salah: Elemen terbesar dalam Max heap pasti ada di root 6
  • 7.
    Representasi Heap Direpresentasikan menggunakanlist Root adalah elemen di index 0 Anak kiri dari root diletakkan di index 1 Anak kanan dari root diletakkan di index 2 Anak kiri dari sebuah node dengan index diletakkan di index Anak kanan dari sebuah node dengan index diletakkan di index Parent dari sebuah node dengan index ada di index 7
  • 8.
    Representasi Heap Heap denganjumlah node Semua nodes memiliki child / children mulai dari elemen pertama hingga elemen Elemen-elemen yang memiliki child / children hanyalah "setengah" dari elemen 8
  • 9.
  • 10.
    Heap dalam Python Importmodule heapq . Minimum heap (elemen terkecil ada di posisi pertama). import heapq as hp d1 = [2, 3, 4, 5, 6, 8, 9] hp.heapify(d1) d2 = [2, 9, 3, 8, 4, 6, 5] hp.heapify(d2) # Menambahkan elemen baru ke dalam heap hp.heappush(d1, 1) hp.heappush(d2, 1) print(d1, d2) 10
  • 11.
    Heap dalam Python #Menghapus elemen dari heap hp.heappop(d1) hp.heappop(d2) print(d1, d2) heapreplace() sama seperti heappop() diikuti dengan heapppush() heappushpop() sama seperti heappush() diikuti dengan heappop() 11
  • 12.
    Contoh List mana yangmerupakan heap? d1 = [16, 14, 10, 8, 7, 9, 3, 2, 4, 1] d2 = [10, 20, 43, 1, 2, 65, 17, 44, 6, 7, 8] d3 = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7] import heapq as hp h1 = [] for d in d1: hp.heappush(h1, d) print(h1) h2 = [] for d in d2: hp.heappush(h2, d) print(h2) 12
  • 13.
    Heapify Mulai dari "separuh"heap awal, mundur hingga ke elemen pertama "separuh" sisanya tidak memiliki anak, pasti ada di posisi leaf Jika ada susunan yang tidak memenuhi Heap Property, benahi. Lakukan secara rekursif. 13
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    Add elemen baru Tambahkanelemen-elemen ini ke dalam heap yang dihasilkan. Lakukan heapify jika perlu. 18