My first Magazine pemrograman-kompetitif-dasar | Page 126

10 Struktur Data NonLinear Algoritma 57 Fungsi untuk melakukan top pada heap function TOP () 2: return arrHeap[0] 3: end function 1: 10.2.7 Pembangunan Heap Secara Efisien Ketika Anda memiliki data N elemen, dan hendak dimasukkan ke dalam heap , Anda dapat: 1. Membuat heap kosong, lalu melakukan push satu per satu hingga seluruh data dimuat heap . Kompleksitasnya O(N log N), atau 2. Membuat array dengan N elemen, lalu array ini dibuat menjadi heap dalam O(N) menggu- nakan cara yang lebih efisien. Untuk membuat heap dari N elemen secara efisien, kita dapat membuat array dengan N elemen, lalu isi array ini dengan elemen-elemen yang akan dimasukkan pada heap . Kemudian lakukan langkah berikut untuk masing-masing node , mulai dari tingkat kedua dari paling bawah sampai ke tingkat paling atas: 1. Misalkan node ini adalah node x. 2. Jadikan subtree yang bermula pada node x ini agar membentuk heap dengan suatu operasi baru, yaitu heapify . Heapify adalah operasi untuk membentuk sebuah heap yang bermula pada suatu node , dengan asumsi anak kiri dan anak kanan node tersebut sudah membentuk heap . x heap heap Gambar 10.18: Operasi heapify hanya dapat bekerja apabila subtree kiri dan subtree kanan dari root telah membentuk heap . Berhubung kedua anak telah membentuk heap , kita cukup memindahkan elemen root ke posisi yang tepat. Jika elemen root sudah lebih besar daripada elemen anaknya, tidak ada yang perlu dilakukan. Sementara bila elemen root lebih kecil daripada salah satu elemen anaknya, tukar elemennya dengan elemen salah satu anaknya yang paling besar. Kegiatan ini sebenarnya sangat mirip dengan yang kita lakukan pada operasi pop . Heapify dapat diimplementasikan seperti yang ditunjukkan pada Algoritma 58. 116