My first Magazine pemrograman-kompetitif-dasar | Page 127

10.2 Heap Algoritma 58 Prosedur untuk melakukan heapify pada heap . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: procedure HEAPIFY (rootIdx) i ← rootIdx swapped ← true while swapped do maxIdx ← i if ( GET L EFT (i) < size) ∧ (arrHeap[maxIdx] < arrHeap[ GET L EFT (i)]) then maxIdx ← GET L EFT (i) end if if ( GET R IGHT (i) < size) ∧ (arrHeap[maxIdx] < arrHeap[ GET R IGHT (i)]) then maxIdx ← GET R IGHT (i) end if SWAP (arrHeap[i], arrHeap[maxIdx]) swapped ← (maxIdx 6 = i) . true bila terjadi pertukaran i ← maxIdx end while end procedure Dengan adanya operasi heapify , operasi pop sendiri dapat kita sederhanakan seperti yang ditunjukkan pada Algoritma 59. Algoritma 59 Operasi pop yang disederhanakan dengan heapify . procedure POP () SWAP (arrHeap[0], arrHeap[size − 1]) 3: size ← size − 1 4: HEAPIFY (0) 5: end procedure 1: 2: . Lakukan pembuangan pada elemen terakhir Sekali melakukan heapify , kasus terburuknya adalah elemen root dipindahkan hingga ke paling bawah tree . Jadi kompleksitasnya adalah O(H), dengan H adalah ketinggian dari com- plete binary tree. Berhubung H = O(log N), dengan N adalah banyaknya elemen pada heap , kompleksitas heapify adalah O(log N). Implementasi Pembangunan Heap Secara Efisien Setelah memahami heapify , kita dapat menulis prosedur pembangunan heap dari array A berisi N elemen secara efisien. Prosedur ini ditunjukkan pada Algoritma 60. Elemen terakhir yang berada pada tingkat kedua paling bawah dapat ditemukan dengan mudah, yaitu elemen dengan indeks N/2 dibulatkan ke bawah dan dikurangi 1. Algoritma 60 Prosedur untuk membuat heap secara efisien dari array A. 1: 2: 3: 4: 5: 6: procedure MAKE H EAP (A, N) INITIALIZE H EAP (N) for i ← 0, N − 1 do arrHeap[size] ← A[i] size ← size + 1 end for . Salin array A ke array heap 117