Rabu, 29 April 2020

AVL Tree


AVL tree adalah Binary Search Tree/BST yang mempunyai sifat self-balancing . AVL Tree ditemukan oleh  Adelson-Velsky dan Landis dan tree ini dinamakan AVL/inisial nama penemunya. AVL tree melakukan penyeimbangan sendiri dengan faktor dimana setiap node mempunyai perbedaan Tinggi atau level maksimal 1 dengan  jumlah anaknya.
Contoh AVL Tree:



Tree ini diklasifikasikan AVL Tree karena setiap node mempunyai perbedaan bernilai 1 Bandingkan rute 1->10->11 dengan tingkat 2 sama rute 1->0 dengan tingkat 1. Jika diselisihkan node 1 adalah puncak node yang mempunyai perbedaan nilai 1





Insertion AVL Tree
Sifatnya AVL Tree adalah setiap node harus mempunyai perbedaan tingkat nilai 1. Jika ditambahkan atau dikurangkan node maka Tree akan tidak dibilangkan berjenis AVL jika tingkatnya lebih dari nilai 1. Untuk membenarkan tree tersebut dilakukannlah rotasi. Ada 2 macam rotasi yaitu Single dan Double Rotation
Rotasi ini tergantung pada bagian tree yang ditambahkan. Jika ada satu bagian dimana node puncaknya menjadi tidak stabil atau tidak bernilai 1 maka node yang mempunyai tidak nilai seimbang tersebut akan menjadi poros rotasi untuk menyesuaikan tree yang barunya.


Tree ini sama seperti tree yang diatas sebelumnya. Tapi ditambahkan Node 20 dia bagian kanannya. Sekarang jika dihitung perbedaan tinggi rute 1->0 dengan 1 tingkat, dengan rute 1->10->11->20 dengan tingkat 3 maka dinyatakan tidak seimbang dan tidak menjadi AVL Tree.
Untuk menyelesaikan masalah ini dilakukannya rotasi. Dalam kasus ini dilakukannya Single Rotation ke kiri




Dan ini hasilnya. Node 10 dijadikan puncak tree dan seluruh tree dikatrol atau digeser ke kiri. Tapi Node 10 sudah mempunyai anak 10 dan 11 di tree sebelumnya, jadi mengapa node 9 menjadi anaknya node 1?
Ini dikarenakan peraturan BST dimana node sebelumnya disesuaikan. Node 1 ditarik ke kiri dengan anaknnya 0 dan 10 menjadi puncak barunya. Node 9 akan mengikuti node yang kurang dari 10 tapi lebih dari 1 sehingga menjadi anak Node 1.




Gambar diatas merupakan proses penyeimbangan tree dengan Double Rotation. Beda dengan Single Rotation, rotasi ini melibat melakukan 2 kali rotasi. Biasa rotasi ini dilakukan bila ketidak seimbangannya bersifat lekuk atau kiri-kanan. Tree diatas dilakukan rotasi kiri sekal dengan node 5 sebagai porosnya. Tapi setelah rotasi pertama tree masih tidak seimbang maka  dilakukanlah rotasi kedua ke kanan  dengan 10 sebagai porosnya. Dan hasil akhirnya menjadi seimbang.


Deletion AVL Tree
Untuk membahas Deletion kita akan menggunakan AVL tree berikut:


Tree ini sudah mempunyai semua node seimbang dengan nilai 1. Tapi jika misalnya node 7 dihilangkan maka node 5 akan mengambil posisi 7






Tapi Jika dilihat Hasilnya, Tree ini menjadi tidak seimbang. Untuk menyelesaikan masalah ini kita lakukan single rotation ke kiri dengan Node 5 sebagai poros.



 



Sehingga menjadi begini. Node 10 dinaikan dan node 5 menjadi anaknya 10 dan node 9 menjadi anaknya 5.







Tidak ada komentar:

Posting Komentar