Data Structure
=== AVL Tree ===
* Chapter
One : Definition
AVL
adalah balanced binary search tree dimana ia memiliki perbedaan jumlah node
pada subtree kiri dan subtree kanannya maksimal 1 (atau dapat dikatakan antara
tingginya sama atau selisih satu).
Cara menentukan Height dan Balance Factor :
Height :
- Jika node (root) tidak memiliki subtree heightnya = 0
- Jika node adalah leaf, height = 1
- Jika internal node, maka height = height tertinggi dari anak + 1
Balance Factor :
-selisih height antara anak kiri dan kanan, jika tidak memiliki anak, dianggap 0.
Height :
- Jika node (root) tidak memiliki subtree heightnya = 0
- Jika node adalah leaf, height = 1
- Jika internal node, maka height = height tertinggi dari anak + 1
Balance Factor :
-selisih height antara anak kiri dan kanan, jika tidak memiliki anak, dianggap 0.
* Chapter Two : Function
Untuk menjaga tree tetap imbang, setelah penyisipan sebuah
node, dilakukan pemeriksaan dari node baru → root. Node pertama yang memiliki
|balance factor| > 1 diseimbangkan. Proses penyeimbangan dilakukan dengan:
Single rotation dan Double rotation.
* Chapter Three : Operations Insertion
Insert
suatu node pada AVL sama halnya pada insert node pada binary search tree,
dimana node baru diposisikan sebagai leaf. Setelah memasukkan node baru, maka
harus dilakukan penyeimbangan kembali pada path dari node yang baru di insert
atau path terdalam. Namun biasanya, path terdalam adalah path dari node yang
baru saja di insert.
Ada 4 kasus yang biasanya terjadi saat operasi insert
dilakukan, yaitu :
anggap T adalah node yang harus diseimbangkan kembali
- Kasus 1 : node terdalam terletak pada subtree kiri dari anak kiri T (left-left)
- Kasus 2 : node terdalam terletak pada subtree kanan dari anak kanan T (right-right)
- Kasus 3 : node terdalam terletak pada subtree kanan dari anak kiri T (right-left)
- Kasus 4 : node terdalam terletak pada subtree kiri dari anak kanan T (left-right)
Ke-4 kasus tersebut dapat diselesaikan dengan melakukan rotasi
- Kasus 1 dan 2 dengan single rotation
- Kasus 3 dan 4 dengan double rotation
anggap T adalah node yang harus diseimbangkan kembali
- Kasus 1 : node terdalam terletak pada subtree kiri dari anak kiri T (left-left)
- Kasus 2 : node terdalam terletak pada subtree kanan dari anak kanan T (right-right)
- Kasus 3 : node terdalam terletak pada subtree kanan dari anak kiri T (right-left)
- Kasus 4 : node terdalam terletak pada subtree kiri dari anak kanan T (left-right)
Ke-4 kasus tersebut dapat diselesaikan dengan melakukan rotasi
- Kasus 1 dan 2 dengan single rotation
- Kasus 3 dan 4 dengan double rotation
Single Rotation
Single rotation dilakukan bila kondisi AVL tree waktu akan
ditambahkan node baru dan posisi node baru seperti pada gambar 2. T1, T2, dan
T3 adalah subtree yang urutannya harus seperti demikian serta height- nya harus
sama (≥ 0). Hal ini juga berlaku untuk AVL tree yang merupakan citra cermin
(mirror image) gambar 2.
Double Rotation
Double rotation dilakukan bila kondisi AVL tree waktu akan
ditambahkan node baru dan posisi node baru seperti pada gambar 3. T1, T2, T3,
dan T4 adalah subtree yang urutannya harus seperti demikian. Tinggi subtree T1
harus sama dengan T4 (≥ 0), tinggi subtree T2 harus sama dengan T3 (≥ 0). Node
yang ditambahkan akan menjadi child dari subtree T2 atau T3. Hal ini juga
berlaku untuk AVL tree yang merupakan citra cermin (mirror image) gambar 3.
* Chapter Four : Operation Deletion
Operasi
penghapusan node sama seperti pada Binary Search Tree, yaitu node yang dihapus
digantikan oleh node terbesar pada subtree kiri atau node terkecil pada subtree
kanan. Jika yang dihapus adalah leaf, maka langsung hapus saja. Namun jika node
yang dihapus memiliki child maka childnya yang menggantikannya. Namun setelah
operasi penghapusan dilakukan, cek kembali apakah tree sudah seimbang atau
belum, jika belum maka harus diseimbangkan kembali. Cara menyeimbangkannya pun
sama seperti insertion.






Tidak ada komentar:
Posting Komentar