IF184982 Pengantar Logika dan Pemrograman Pertemuan ke-12 Misbakhul Munir IRFAN SUBAKTI 司馬伊凡 Мисбакхул Мунир Ирфан Субакти
Binar Search Tree Pohon Pencarian Biner Binar Search Tree (BST): Struktur data pohon biner berbasis simpul (node-based binar tree): Cabang pohon kiri dari suatu simpul berisi simpul-simpul dengan nilai ang lebih kecil dari nilai simpul tersebut Cabang pohon kanan dari suatu simpul berisi simpul-simpul dengan nilai ang lebih besar dari nilai simpul tersebut Cabang pohon kiri dan cabang pohon kanan juga harus merupakan pohon pencarian biner Tidak boleh ada simpul ang memiliki nilai ang sama 50 30 70 20 40 60 80 2
Pohon AVL Pohon AVL = AVL Trees AVL = Adelson-Velsk and Landis Jenis pohon pencarian biner (BST, Binar Search Tree) ang bisa meneimbangkan diri sendiri Setiap simpul (node), cabang kiri dan cabang kananna mempunai perbedaan tinggi paling banak 1 Penisipan (insertion)/penghapusan (delete) dalam AVL dimungkinkan, secara umum, merusak keseimbangan properti/sifat keseimbangan-tinggi di atas perlu dilakukan rotasi untuk meneimbangkan kembali pohon dan mendapatkan kembali sifat keseimbangan-tinggina Kebanakan operasi di BST, aitu: cari, maks, min, sisipkan, hapus, dll.; memerlukan waktu O(t) di mana t adalah tinggi dari BST bisa lebih cepat menjadi O(n) untuk pohon biner ang miring (skewed binar tree), dengan n adalah jumlah dari simpul (node) Jika tinggi dari pohon bisa dijaga selalu O(log n) setelah penisipan dan penghapusan batas atas bisa dijaga pada O(log n) untuk semua operasi tadi, dengan n adalah jumlah dari simpul Tinggi dari Pohon AVL adalah selalu O(log n) batas atas semua operasi adalah O(log n) 3
Pohon AVL & Bukan Pohon AVL 13 13 9 19 9 19 6 12 18 6 12 18 5 Pohon AVL 3 5 8 Bukan Pohon AVL 4
Penisipan pada BST Penisipan suatu elemen (nilai) baru dalam standar BST adalah sbb: Elemen baru selalu disisipkan pada simpul ujung pohon (simpul daun) Pencarian dari simpul ang akan disisipi dimulai dari akar pohon teratas sampai ditemukan sebuah simpul daun Sekali simpul daun ditemukan, maka simpul baru akan ditambahkan sebagai anak dari simpul daun Properti/sifat dari BST: elemen(kiri) < elemen(akar) < elemen(kanan) 100 100 20 120 10 30 Sisipkan 50 20 120 10 30 50 5
Penisipan pada AVL Untuk menjaga agar pohon selalu dalam kondisi AVL setelah penisipan, penisipan standar BST di atas harus dimodifikasi untuk mendapatkan keseimbangan kembali. 2 operasi dasar untuk meneimbangkan kembali BST tanpa melanggar properti/sifat dari BST (elemen(kiri) < elemen(akar) < elemen(kanan): Rotasi kiri Rotasi kanan 6
Rotasi Kiri dan Rotasi Kanan P 1, P 2 dan P 3 adalah cabang dari pohon dengan akar (sisi kiri) dan akar (sisi kanan) P 1 P 2 P 3 Rotasi Kanan P 1 Rotasi Kiri P 2 P 3 Elemen-elemen dari pohon-pohon di atas mengikuti aturan: elemen-elemen(p 1 ) < elemen() < elemen-elemen(p 2 ) < elemen() < elemen-elemen(p 3 ) Sehingga tetap memenuhi sarat properti/sifat BST 7
AVL: Penisipan Simpul ang akan disisipkan adalah s. 1. Lakukan penisipan standar BST untuk s. 2. Dimulai dari s, bergeraklah ke atas dan temukan simpul pertama ang tidak seimbang. Diasumsikan adalah simpul pertama ang tidak seimbang, adalah anak dari ang datang melalui jalur dari s to, dan adalah cucu dari ang datang melalui jalur dari s to. 3. Seimbangkan kembali pohon dengan melakukan rotasi ang diperlukan pada cabang pohon ang berakar di. Terdapat 4 kemungkinan kasus, karena, dan dapat diatur dalam 4 posisi, aitu: a) adalah cabang kiri dari dan adalah cabang kiri dari (Kasus Kiri-Kiri) b) adalah cabang kiri dari dan adalah cabang kanan dari (Kasus Kiri-Kanan) c) adalah cabang kanan dari dan adalah cabang kanan dari (Kasus Kanan- Kanan) d) adalah cabang kanan dari dan adalah cabang kiri dari (Kasus Kanan-Kiri) 8
Penisipan: Kasus Kiri-Kiri P 1, P 2, P 3 dan P 4 adalah cabang pohon P 4 P 3 Rotasi Kanan () P 1 P 2 P 3 P 4 P 1 P 2 Kasus Kiri-Kiri 9
Penisipan: Kasus Kiri-Kanan P 1, P 2, P 3 dan P 4 adalah cabang pohon P 4 P 4 P 1 Rotasi Kiri () P 3 Rotasi Kanan () P 1 P 2 P 3 P 4 P 2 P 3 Kasus Kiri-Kanan P 1 P 2 10
Penisipan: Kasus Kanan-Kanan P 1, P 2, P 3 dan P 4 adalah cabang pohon P 1 P 2 Rotasi Kiri () P 1 P 2 P 3 P 4 P 3 P 4 Kasus Kanan-Kanan 11
Penisipan: Kasus Kanan-Kiri P 1, P 2, P 3 dan P 4 adalah cabang pohon P 1 P 1 P 4 Rotasi Kanan () P 2 Rotasi Kiri () P 1 P 2 P 3 P 4 P 2 P 3 Kasus Kanan-Kiri P 3 P 4 12
Penisipan: Contoh 13
Penisipan: Contoh (lanjutan) 14
Penisipan: Contoh (lanjutan) 15
Penisipan: Contoh (lanjutan) 16
Penisipan: Contoh (lanjutan) 17
Penisipan: Implementasi 1. Lakukan penisipan standar BST 2. Simpul saat ini haruslah salah satu moang/leluhur (ancestors) dari simpul baru ang disisipkan. Update tinggi dari simpul saat ini. 3. Dapatkan faktor keseimbangan (tinggi cabang pohon kiri tinggi cabang pohon kanan) dari simpul saat ini. 4. Jika faktor keseimbangan lebih dari 1, maka simpul saat ini tidak seimbang dan kita berada pada kasus Kiri-Kiri atau Kiri-Kanan. Untuk mengecek apakah ini kasus Kiri-Kiri atau tidak, bandingkan elemen (nilai) baru ang disisipkan dengan elemen (nilai) pada akar cabang pohon kiri 5. Jika faktor keseimbangan kurang dari -1, maka simpul saat ini tidak seimbang dan kita berada pada kasus Kanan-Kanan atau Kanan-Kiri. Untuk mengecek apakah ini kasus Kanan-Kanan atau tidak, bandingkan elemen (nilai) baru ang disisipkan dengan elemen (nilai) pada akar cabang pohon kanan 18
Penghapusan pada BST 3 kemungkinan kasus pada penghapusan suatu elemen (nilai) dalam standar BST adalah: 1. Simpul ang akan dihapus adalah simpul daun (simpul ujung pohon) tinggal hapus saja simpul tersebut dari pohon 50 50 30 70 Hapus(20) 30 70 20 40 60 80 40 60 80 19
Penghapusan pada BST (lanjutan) 2. Simpul ang akan dihapus hana mempunai 1 anak salinkan (cop) anak tadi ke simpul ang akan dihapus, lalu hapus anak 50 50 30 70 Hapus(30) 40 70 40 60 80 60 80 20
Penghapusan pada BST (lanjutan) 3. Simpul ang akan dihapus mempunai 2 anak temukan simpul berikutna dari simpul ang akan dihapus dengan cara inorder (inorder successor) min(cabang kanan). Salinkan inorder successor ke simpul ang akan dihapus, lalu hapus inorder successor 50 60 40 70 Hapus(50) 40 70 60 80 Alternatif lainna, simpul sebelumna dari simpul ang akan dihapus dengan cara inorder (inorder predessor) juga dapat digunakan sebagai salinan sebelum penghapusan simpul maks(cabang kiri) Hal penting ang perlu dicatat adalah, inorder successor diperluan hana jika anak di cabang kanan tidaklah kosong. Dalam kasus ini, inorder successor dapat diperoleh dengan menemukan nilai minimum pada anak di cabang kanan (min(cabang kanan)) dari simpul ang akan dihapus. 80 21
Inorder Successor pada BST Pada BST, inorder successor dari suatu simpul (node) adalah simpul berikutna ang didapat dengan penelusuran secara inorder dalam BST Inorder successor bernilai null (kosong) untuk simpul terakhir dalam penelusuran inorder Dalam BST, inorder successor dari suatu masukan simpul (input node) didefinisikan sebagai simpul dengan nilai terkecil, ang lebih besar dari nilai pada input node terkadang penting untuk menemukan simpul berikutna dalam pohon terurut 22
Inorder Successor pada BST (lanjutan) Inorder successor dari 8 adalah 10 Inorder successor dari 10 adalah 12 Inorder successor dari 14 adalah 20 20 8 22 4 12 10 14 23
Penghapusan pada AVL Untuk menjaga agar pohon selalu dalam kondisi AVL setelah penghapusan, penghapusan standar BST di atas harus dimodifikasi untuk mendapatkan keseimbangan kembali. 2 operasi dasar untuk meneimbangkan kembali BST tanpa melanggar properti/sifat dari BST (elemen(kiri) < elemen(akar) < elemen(kanan): Rotasi kiri Rotasi kanan 24
Rotasi Kiri dan Rotasi Kanan P 1, P 2 dan P 3 adalah cabang dari pohon dengan akar (sisi kiri) dan akar (sisi kanan) P 1 P 2 P 3 Rotasi Kanan P 1 Rotasi Kiri P 2 P 3 Elemen-elemen dari pohon-pohon di atas mengikuti aturan: elemen-elemen(p 1 ) < elemen() < elemen-elemen(p 2 ) < elemen() < elemen-elemen(p 3 ) Sehingga tetap memenuhi sarat properti/sifat BST 25
AVL: Penghapusan Simpul ang akan dihapus adalah s. 1. Lakukan penghapusan standar BST untuk s. 2. Dimulai dari s, bergeraklah ke atas dan temukan simpul pertama ang tidak seimbang. Diasumsikan adalah simpul pertama ang tidak seimbang, adalah anak cabang tertinggi dari, dan adalah anak cabang tertinggi dari. (Catatan: definisi dari dan di sini berbeda dengan dan pada penisipan AVL sebelumna) 3. Seimbangkan kembali pohon dengan melakukan rotasi ang sesuai pada cabang pohon ang berakar di. Terdapat 4 kemungkinan kasus, karena, dan dapat diatur dalam 4 posisi, aitu: a) adalah cabang kiri dari dan adalah cabang kiri dari (Kasus Kiri-Kiri) b) adalah cabang kiri dari dan adalah cabang kanan dari (Kasus Kiri-Kanan) c) adalah cabang kanan dari dan adalah cabang kanan dari (Kasus Kanan-Kanan) d) adalah cabang kanan dari dan adalah cabang kiri dari (Kasus Kanan-Kiri) Seperti halna penisipan, di bawah akan dijelaskan tiap-tiap kasus. Sebagai catatan, tidak seperti penisipan, perbaikan pada simpul tidak memperbaiki Pohon AVL secara keseluruhan. Setelah perbaikan, maka dimungkinkan moang/leluhur (ancestors) dari juga harus diperbaiki. 26
Penghapusan: Kasus Kiri-Kiri P 1, P 2, P 3 dan P 4 adalah cabang pohon P 4 P 3 Rotasi Kanan () P 1 P 2 P 3 P 4 P 1 P 2 Kasus Kiri-Kiri 27
Penghapusan: Kasus Kiri-Kanan P 1, P 2, P 3 dan P 4 adalah cabang pohon P 4 P 4 P 1 Rotasi Kiri () P 3 Rotasi Kanan () P 1 P 2 P 3 P 4 P 2 P 3 Kasus Kiri-Kanan P 1 P 2 28
Penghapusan: Kasus Kanan-Kanan P 1, P 2, P 3 dan P 4 adalah cabang pohon P 1 P 2 Rotasi Kiri () P 1 P 2 P 3 P 4 P 3 P 4 Kasus Kanan-Kanan 29
Penghapusan: Kasus Kanan-Kiri P 1, P 2, P 3 dan P 4 adalah cabang pohon P 1 P 1 P 4 Rotasi Kanan () P 2 Rotasi Kiri () P 1 P 2 P 3 P 4 P 2 P 3 Kasus Kanan-Kiri P 3 P 4 30
AVL: Penghapusan (lanjutan) Tidak seperti halna pada penisipan, dalam penghapusan setelah kita lakukan rotasi pada, maka kita mungkin juga harus melakukan rotasi pada moang/leluhur (ancestors) dari. Maka dari itu, kita harus meneruskan penelusuran sampai ke akar paling atas. 31
Penghapusan: Contoh Simpul dengan nilai 32 akan dihapus Setelah menghapus 32, maka kita bergerak ke atas dan mencari simpul pertama ang tidak seimbang, aitu 44 Kita tandai 44 ini dengan, lalu anakna ang memiliki tinggi lebih besar sebagai aitu 62, dan anakna ang memiliki tinggi lebih besar sebagai aitu bisa 78 atau pun 50 karena keduana memiliki tinggi ang sama. Kita pilih 78. Sekarang kasusna adalah Kanan- Kanan, maka kita lakukan rotasi kiri. 32
Penghapusan: Contoh (lanjutan) 33
Penghapusan: Contoh (lanjutan) 34
PohonAVL.java 35
PohonAVL.java (lanjutan) 36