Heapsort Dr. Taufik Fuadi Abidin, S.Si., M.Tech Irvanizam Zamanhuri, M.Sc Jurusan Informatika FMIPA Universitas Syiah Kuala www.informatika.unsyiah.ac.id/tfa www.informatika.unsyiah.ac.id/irvanizam Bahan Ajar Struktur Data dan Algoritma Outline Pertemuan Heapsort Contoh Penggunaan Diskusi Sumber: http://cis.stvincent.edu/html/tutorials/swd/heaps/heaps.html Heapsort Heapsort dilakukan dengan cara membangun struktur data heap dan kemudian menerapkan langkah menghapus node heap. Pada awalnya, kondisi heap kosong. Kemudian, node heap di-insert satu per satu. Cara alternatif adalah, menampung data yang akan diurutkan dalam array, kemudian node pada bagian root di hapus. Jika heap adalah minimal heap, maka data pada root adalah data terkecil. Kompleksitas Heapsort Dalam kasus rata-rata atau kasus terjelek, kompleksitas dari heapsort adalah O(n log n). Komplesitas tersebut cukup baik untuk metode pengurutan. Pada kasus rata-rata, quicksort juga memiliki kompleksitas O(n log n), namun kadang-kadang bila kasus terjelek terjadi, kompleksitas quicksort dapat berubah menjadi O(n2). Contoh Heapsort Konversi array menjadi Heap. Tentukan node parent yang terakhir dalam array, yaitu (heapsize – 2)/2. Pada contoh di atas, node K adalah parent terakhir. Kemudian, lakukan FilterDown dari indeks parent terakhir s/d indeks 0. Pada contoh di atas, dari indeks 3, 2, 1, kemudian 0. Array - to - Heap Tree tersebut adalah Binary Tree namun belum merupakan minimal heap yang benar. Kemudian terapkan FilterDown pada node dimana parent terakhir berada, yaitu K Lakukan FilterDown Setelah FilterDown selesai untuk node K, lanjutkan proses yang sama untuk indek 2 yaitu node C. Lakukan FilterDown Setelah FilterDown selesai untuk node K, lanjutkan proses yang sama untuk indek 2 yaitu node C. Lakukan FilterDown Setelah FilterDown selesai untuk node C, lanjutkan proses yang sama untuk indek 1 yaitu node S. Lakukan FilterDown Hasil: Sebuah Heap terbentuk! Selanjutnya, remove node A menggunakan algoritma menghapus node dalam Heap. Remove Node dari Heap Remove selalu dimulai dari root karena node root adalah node dengan nilai terkecil Masalahnya adalah bagaimana melakukan adjustment agar binary tree tetap menjadi minimal head Algoritma: Remove node root dan ganti node tersebut dengan node pada posisi paling akhir. Kemudian fungsi FilterDown dipanggil untuk memeriksa dari root sd node leaf agar setiap node masih memenuhi syarat heap. Remove Node Pada Root Node C ditukar dengan node A, ukuran array diasumsikan berkurang 1 yaitu dari indeks 0 sd 7. Kemudian, tentukan indeks parent terakhir, dan ulangi proses . Hasil Akhir Data yang terurut descending order Questions & Discussion