Professional Documents
Culture Documents
wijanarto
(Binary) Heap
Binary tree yang menyimpan pasangan prioritas (atau prioritas elemen) pada node Property Heap :
Struktural
Semua level kecuali yang terakhir berisi penuh, level terakhir boleh tidak penuh (berisi 1 anak) tetapi harus terisi.
Heap
Prioritas (elemen) node setidaknya sama atau sebesar parentnya (nilai elemen dalam heap)
(Binary) Heap
1 1 1 7 1 8 2 1 1 9 1 3 1 7
4 3
2 3
2 6
2 9
3 1
Bukan Heap
Heap Violated
1 9 1 8 2 1 1 9 1 1 1 3 1 7
4 3
2 3
2 6
2 9
3 1
Bukan Heap
Level terakhir Ada yang kosong
1 8 1 7 2 1 1 9 1 1 1 3 1 7
4 3
2 6
2 9
3 1
Implementasi Heap
Parent (i){return i/2 } Left(i){return 2i}
1 8 1 1
Right(i){rreturn 2i+1}
Parent(5) 2 (17) Left(3) 6 (19) Right(3) 7 17)
4 3 2 1 1 9
1 7
1 3
1 7
2 3
2 6
1 A Level 0
1 1
2 1
1 7
1 3
1 8
2 1
6 2
1 9
1 7
4 3
9 10
2 3 2 6
Implementasi Heap
Secara implisit tree dalam link, dengan anak node i adalah 2i dan 2i+1 Kenapa hal ini bermanfaat ?
Dalam representasi binary , perkalian atau pembagian dengan 2 merupakan pergeseran ke kanan atau ke kiri (a** == shl(a) atau a//==shr(a)) Menambah 1 sama dengan menambah pada bit terendah
19
4 3
2 3
2 6
2 9
3 1
12
ara struktur maka kita akan tambahkan node Secara struktur sudah benar evel terakhir Tetapi secara heap tree ini bukan heap (krn 12 < dari parent) Shg kita harus menukarnya
13
12
1 7
4 3
2 3
2 6
2 9
3 1
19
ara struktur maka kita akan tambahkan node Secara struktur sudah benar evel terakhir Tetapi secara heap tree ini bukan heap (krn 12 < dari parent) Shg kita harus menukarnya
13
12
17
4 3
2 3
2 6
2 9
3 1
19
13
12
4 3
2 3
2 6
2 9
3 1
19
17
12
13
4 3
2 3
2 6
2 9
3 1
19
17
11
12
13
4 3
2 3
2 6
2 9
3 1
19
17
1 8
19
4 3
2 3
2 6
2 9
3 1
1 emukan elemen dengan 7 rioritas tertinggi yang ebih besar dari lemen yang 1 kan di sisipkan 8
2 1
19
1 7
4 3
2 3
2 6
2 9
3 1
Sisipkan elemen pada lokasi tersebut dan geser ke bawah elemen lainnya sesuai jalur yang di pilih
13
4 3
2 3
2 6
2 9
3 1
19
Kebenaran Insertion
Node yang isinya berubah berada pada path
1 1
12
1 7
1 3
1 8
2 1
19
1 7
4 3
2 3
2 6
2 9
3 1
Kebenaran Insertion
Node yang isinya berubah berada pada path Heap property terlanggar hanya pada node anaknya 1
1
12
1 7
1 3
1 8
2 1
19
1 7
4 3
2 3
2 6
2 9
3 1
Kebenaran Insertion
Node yang isinya berubah berada pada path Heap property terlanggar hanya pada node anaknya 1 Isi yang baru berprioritas lebih kecil
12
1
dari sebelumnya
1 8
1 7
1 3
2 1
19
1 7
4 3
2 3
2 6
2 9
3 1
Kebenaran Insertion
Node yang isinya berubah berada pada path Heap property terlanggar hanya pada node anaknya 1 Isi yang baru berprioritas lebih kecil
12
1
dari sebelumnya
1 8
1 7
13
2 1
19
1 7
4 3
2 3
2 6
2 9
3 1
Kebenaran Insertion
Node yang isinya berubah berada pada path Heap property terlanggar hanya pada node anaknya 1 Isi yang baru berprioritas lebih kecil dari sebelumnya Shg heap property aman
1 8 2 1 13 1 7 1 7 12 1
4 3
2 3
2 6
2 9
3 1
19
Heapify(i)
i adalah index array A Binary tree yang berakar di Left(i) dan Right(i) adalah heap Tetapi, A[i] harus lebih besar dari anaknya, sehingga terjadi violated pada heap property Fungsi Heapify membuat binary tree berakar di i pd heap dengan memindahkan A[i] ke bawah heap
Heapify
Ini bukan heap
Heap property violated pada node dg index 1 tetapi Subtree pada akar 2 dan 3 adlaah heap Heapify (1)
1 7
1 0
1 1
1 6
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
Ini heap
17
1 1
10
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
16
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
2 1
13
1 2
43
2 3
2 6
2 9
3 1
19
1 0
1 1
1 6
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
1 0
1 1
1 6
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
1 6
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
1 1
4 3
2 3
2 6
2 9
3 1
19
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
10
16
17
1 1
2 1
13
1 2
2 9
3 1
19
Delete Minimum
Elemen minimum adalah elemen pada top heap Kita dapat menghapus elemen tersebut dan memindahkan anaknya ke atas untuk mengisi ruang yang kosong karena penghapusan tadi Ruang yang kosong pada tree di pindahkan ke bawah Di akhiri pada setiap posisi pada akhir level Hasilnya tree menjadi tidak ada yang kosong pada akhir levelnya
Delete-min
8
dalam heap
1 0
1 1
1 8
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
dalam heap
1 0
1 1
1 8
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
dalam heap
1 0
1 1
1 8
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
dalam heap
10
1 1
1 8
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
dalam heap
10
1 1
1 8
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
dalam heap
10
1 1
18
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
dalam heap
10
1 1
18
2 1
13
1 2
4 3
18
2 6
2 9
3 1
19
17
Delete-min
dalam heap
10
1 1
18
23
2 1
13
1 2
4 3
2 6
2 9
3 1
19
17
Delete-min
1 6
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
1 6
2 1
13
1 2
4 3
2 3
2 6
2 9
3 1
19
17
Delete-min
Ganti elemen top dengan elemen terakhir dalam heap Lakukan Heapify(1)
10 11 17
16
11
13
1 2
43
23
2 6
2 9
3 1
19
Delete-min
Ganti elemen top dengan elemen terakhir dalam heap Lakukan Heapify(1)
17 11 10
16
11
13
1 2
43
23
2 6
2 9
3 1
19
Delete-min
Ganti elemen top dengan elemen terakhir dalam heap Lakukan Heapify(1)
16 11 10
17
21
13
1 2
43
23
2 6
2 9
3 1
19
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
2 6
1 0
2 1
13
3 1
1 2
2 9
1 1
19
17
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
2 6
1 0
2 1
13
3 1
1 2
2 9
1 1
19
17
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
2 6
1 0
2 1
13
31
1 2
2 9
1 1
19
17
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
2 6
1 0
2 1
13
1 7
1 2
2 9
11
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
2 6
1 0
21
11
1 7
1 2
2 9
13
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
2 6
1 0
11
1 7
1 2
21
2 9
13
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
26
1 0
11
1 7
1 2
21
2 9
13
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
11
1 0
26
1 7
1 2
21
2 9
13
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
2 3
4 3
11
1 0
13
1 7
1 2
21
2 9
26
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
43 2 3
11
1 0
13
1 7
1 2
21
2 9
26
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
8 2 3
11
1 0
43
13
1 7
1 2
21
2 9
26
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
8 23
11
1 0
21
13
1 7
1 2
43
2 9
26
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
23 8
11
1 0
21
13
1 7
1 2
43
2 9
26
19
31
Building Heap
Dimulai dari bawah ke atas Semua leaves adalah heap
Build-Heap (A) for i n/2 downto 1 do Heapify(A,i)
1 0 8
11
23
21
13
1 7
12
43
2 9
26
19
31
i x
i =0
i 1
1 = // kalikan x 2 (1 x) x 1 = // masukan x = 2 ( x x) 2
i x
i =0
i 1
i 1/ 2 = =2 i 1/ 4 i =0 2
Jadi O(n)
Heapsort
Buat heap Lakukan delete-min Secara berulang hingga Heap mjd kosong Lakukan sort pada, array 2 Pindahkan (tukar) elemen yang di hapus di akhir heap
1 6 2 3 4 3 2 9 2 6 19 31 1 2 1 13 1 7 1 0 1 1 8
Proses heapsort
Delete-min
10 8
1 1
1 2
2 1
13
1 7
1 6
2 3
4 3
2 9
2 6
19
31
13
Proses heapsort
Heapify (1)
10 31
1 1
1 2
2 1
13
1 7
1 6
2 3
4 3
2 9
2 6
19
Proses heapsort
Heapify (1)
31 10
1 1
12
21
13
17
16
23
43
29
26
19
Proses heapsort
Heapify (1)
12 10
1 1
31
21
13
17
16
23
43
29
26
19
Proses heapsort
Heapify (1)
12 10
1 1
16
21
13
17
31
23
43
29
26
19
Proses heapsort
Delete-min
12 10
1 1
16
21
13
17
31
23
43
29
26
19
Proses heapsort
Delete-min
12 19
1 1
16
21
13
17
31
23
43
29
26
10
Proses heapsort
Heapify(1)
12 19
11
16
21
13
17
31
23
43
29
26
10
Proses heapsort
Heapify(1)
12 11
19
16
21
13
17
31
23
43
29
26
10
Proses heapsort
Delete-min
12 11
13
16
21
19
17
31
23
43
29
26
10
Proses heapsort
Delete-min
12 26
13
16
21
19
17
31
23
43
29
11
10
Proses heapsort
Heapify(1)
12 26
13
16
21
19
17
31
23
43
29
11
10
Proses heapsort
Heapify(1)
26 12
13
16
21
19
17
31
23
43
29
11
10
Proses heapsort
Heapify(1)
16 12
13
26
21
19
17
31
23
43
29
11
10
Proses heapsort
Delete-min
16 12
13
23
21
19
17
31
26
43
29
11
10
Proses heapsort
Delete-min
16 29
13
23
21
19
17
31
26
43
12
11
10
Proses heapsort
Heapify(1)
16 29
13
23
21
19
17
31
26
43
12
11
10
Proses heapsort
Heapify(1)
16 13
29
23
21
19
17
31
26
43
12
11
10
Proses heapsort
Heapify(1)
16 13
17
23
21
19
29
31
26
43
12
11
10
Proses heapsort
Delete-min
16 13
17
23
21
19
29
31
26
43
12
11
10
Proses heapsort
Heapify(1)
16 43
17
23
21
19
29
31
26
13
12
11
10
Proses heapsort
Heapify(1)
43 16
17
23
21
19
29
31
26
13
12
11
10
Proses heapsort
Delete-min
21 16
17
23
43
19
29
31
26
13
12
11
10
Proses heapsort
Heapify(1)
21 26
17
23
43
19
29
31
16
13
12
11
10
Proses heapsort
Heapify(1)
21 17
26
23
43
19
29
31
16
13
12
11
10
Proses heapsort
Delete-min
21 17
19
23
43
26
29
31
16
13
12
11
10
Proses heapsort
Heapify(1)
21 31
19
23
43
26
29
17
16
13
12
11
10
Proses heapsort
Heapify(1)
21 19
31
23
43
26
29
17
16
13
12
11
10
Proses heapsort
Delete-Min
21 19
26
23
43
31
29
17
16
13
12
11
10
Proses heapsort
Heapify(1)
21 29
26
23
43
31
19
17
16
13
12
11
10
Proses heapsort
Heapify(1)
29 21
26
23
43
31
19
17
16
13
12
11
10
Proses heapsort
Delete-min
23 21
26
29
43
31
19
17
16
13
12
11
10
Proses heapsort
Heapify(1)
23 31
26
29
43
21
19
17
16
13
12
11
10
Proses heapsort
Heapify(1)
31 23
26
29
43
21
19
17
16
13
12
11
10
Proses heapsort
Delete-min
29 23
26
31
43
21
19
17
16
13
12
11
10
Proses heapsort
Heapify(1)
29 43
26
31
23
21
19
17
16
13
12
11
10
Proses heapsort
Heapify(1)
29 26
43
31
23
21
19
17
16
13
12
11
10
Proses heapsort
Delete-min
29 26
43
31
23
21
19
17
16
13
12
11
10
Proses heapsort
Heapify(1)
29 31
43
26
23
21
19
17
16
13
12
11
10
Proses heapsort
Delete-min
31 29
43
26
23
21
19
17
16
13
12
11
10
Proses heapsort
Hepaify(1)
31 43
29
26
23
21
19
17
16
13
12
11
10
Proses heapsort
Delete-min
43 31
29
26
23
21
19
17
16
13
12
11
10
Proses heapsort
Delete-min
31 43
29
26
23
21
19
17
16
13
12
11
10
Proses heapsort
Delete-min
31 43
29
26
23
21
19
17
16
13
12
11
10
Psuedo code
PARENT(i) return i/2 LEFT(i) return 2i RIGHT(i) return 2i + 1
Tukar
Tukar (a,b) temp=a a=b b=temp
Heapify
HEAPIFY(A, i) l LEFT(i) r RIGHT(i) if l <=heap-size[A] and A[l] > A[i] then largest l else largest i If r <=heap-size[A] and A[r] > A[largest] then largest r if largest!= i then exchange A[i]<--> A[largest] HEAPIFY(A,largest)
Shiftdown
ShiftDown(A,i) ki repeat jk if 2j<=length(A) and A[2j]>A[k] then then k2j k2j+1 if 2j<length(A) and A[2j+1]>A[k] Tukar (A[j],A[k]) until j==k
Shiftup
Shiftup(A,i) ki repeat jk if j>i and A[j%2]<A[k] then kj%2 Tukar(A[j],A[k]) until j==k
FindMax-min, DelMax-min
Findmax(A) return A[1]; FindMin(A) return A[n] DelMax(A) A[1]A[n] ShiftDown(A[1..n-1],1) DelMin(A) A[n]A[1] ShiftUp(A[1..n-1],n)
InsertNode
InsertNode(A,v) A[n+1]v Shiftup(A[1..n-1],n+1)
Heapsort
Heapsort (A) makeheap(A) for in downto 2 do tukar(A[1],A[i]) Shiftdow(A[1..i-1],1) Atau HEAPSORT(A) BUILDHEAP(A) for i length[A] downto 2 do tukar(A[1],A[i]) heap-size[A]heap-size[A]-1 HEAPIFY(A, 1)