AVL TREE DAN B - TREE
AVL & B-TREE
AVL TREE :
AVL Tree adalah Binary Search Tree yang memiliki perbedaan
tinggi/ levelmaksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul
untukmenyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian
danbentuk tree dapat dipersingkat dan disederhanakan. Untuk menjaga tree
tetapimbang, setelah penyisipan sebuah node, dilakukan pemeriksaan dari node
baru→ root. Node pertama yang memiliki |balance factor| > 1 diseimbangkan.
Prosespenyeimbangan dilakukan dengan: Single rotation dan Double rotation.
Penerapan struktur data AVL tree digunakan pada Binary
Search Tree yangbertujuan untuk menyeimbangkan tree tersebut, sehingga waktu
pencarian danstruktur tree dapat disederhanakan. AVL Tree dapat
direpresentasikan denganmenggunakan Array maupun linked list. Contohnya untuk
membuat programtingkatan pegawai dalam perusahaan dan silsilah keluarga.
Ø
AVL Tree
-
AVL Tree adalah height balanced 1-tree yang
berarti maksimum perbedaanheight antara subtree kiri dan kanan adalah satu.
-
Path pencarian lokasi untuk dilakukan operasi
insert dimulai dari Root.
-
Adanya node pada search path yang balancenya
TallLeft (tanda -) atauTallRight (tanda +) dan terletak paling dekat dengan
node yang baru
Insertion – AVL Tree
AVL Tree ditemukan oleh Adelson-Velskii dan Landis. AVL Tree
merupakan salah satu jenis BST (binary Search Tree). BST digunakan dengan
tujuan untuk mempercepat pencarian data. Apabila BST yg terbentuk cukup
seimbang (mendekati complete binary tree) maka waktu pencarian data tidak lebih
dari log2n langkah.
AVL Tree adalah Binary Search Tree yang memiliki perbedaan
tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul
untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan
bentuk tree dapat dipersingkat dan disederhanakan.
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)
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
– Kasus 1 dan 2 dengan single rotation
– Kasus 3 dan 4 dengan double rotation
Contoh – Single Rotation: Jika suatu Tree diinsert node baru
dengan nilai 12, maka akan terjadi ketidak seimbangan dan hal ini terletak pada
posisi root
Contoh – Double Rotation : Jika terdapat sebuah tree yang
kemudian dilakukan insert node 26. Maka akan terjadi ketidak
seimbangan, sehingga terlihat dari bentuknya dapat diselesaikan dengan kasus 4.
Deletion – AVL Tree
AVL Tree adalah Binary Search Tree yang memiliki perbedaan
tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul
untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan
bentuk tree dapat dipersingkat dan disederhanakan.
Ada 2 kasus yang biasanya terjadi saat operasi delete dilakukan,
yaitu :
– Jika node yang akan dihapus berada pada posisi leaf atau node tanpa anak, maka dapat langsung di hapus.
– Jika node yang akan dihapus berada pada posisi leaf atau node tanpa anak, maka dapat langsung di hapus.
- Jika
node yang akan dihapus memiliki anak, maka proses penghapusannya harus di
cek kembali untuk menyeimbangkan Binary Search Tree dengan perbedaan
tinggi / level maksimal 1.
- 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)
Berikut contoh dalam menghapus node AVL Tree, terdapat AVL
Tree yang kemudian di hapus node 60. Dengan gambaran sebagai berikut :
Yang akan menggantikan posisi node 60 adalah node 55. Akan
terjadi ketidak seimbangan. Dengan tampilan sebagai berikut :
Maka akan dilakukan single rotation pada
node 55 dengan kasus ketidak seimbangan pada kasus no. 2. Dengan tampilan
setelah dilakukan single rotation sebagai berikut :
Ketika sudah dilakukan single rotation dan dilakukan kembali
perbedaan tinggi / level maksimal 1 ternyata terdapat ketidak seimbangan yang
terjadi. Sehingga diperlukan double rotation dengan kasus no. 4. Sehingga hasil
dari rotasi yang dilakukan adalah sebagai berikut :
B-Tree :
Pada B-Tree dikenal istilah order. Order menentukan jumlah
maksimum/minimum anak yang dimiliki oleh setiap node, sehingga order merupakan
hal yang cukup penting dalam B-Tree. 2-3 Tree pada postingan sebelumnya
yaitu Balanced
Binary Search Tree (AVL and RBT) and 2-3 Tree merupakan salah
satu B-Tree berorder 3. Itu sebabnya setiap nodenya memiliki batasan anak,
dengan minimal 2 anak dan maksimal 3 anak.
Aturan pada B-Tree : m = order
-
Setiap node (kecuali leaf) memiliki anak paling
banyak sejumlah m anak
-
Setiap node (kecuali root) memiliki anak paling
sedikit m/2 anak
-
Root memiliki anak minimal 2, selama root bukan
leaf
-
Jika node non leaf memiliki k anak,
maka jumlah data yang tersimpan dalam node k-1
-
Data yang tersimpan pada node harus terurut
secara inorder
-
Semua leaf berada pada level yang sama, level
terbawah
Berikut contoh B-Tree :
Operasi : Searching
Searching pada B-Tree mirip seperti 2-3 Tree. Pertama-tama
kita bandingkan dengan rootnya terlebih dahulu kemudian cek apakah sama dengan
rootnya atau lebih kecil atau lebih besar atau bahkan diantara rootnya (jika
root memiliki lebih dari 1 data).
berikut ini adalah codingannya dalam C :
Operasi :
Insertion
Aturan Insertion :
-
Anggap data yang mau di insert adalah key
-
Posisikan key pada node yang sesuai, seperti
pada BST dan 2-3 Tree, anggap node tersebut A
-
Jika A adalah node dengan jumlah data kurang
dari m-1, maka langsung masukan saja
-
Jika A adalah node dengan jumlah data m-1, maka
masukan nilai tengah kemudian masukan ke parentnya. Kemudian anggaplah parent
tersebut A. Kemudian periksa kembali sesuai aturan point ke 3 dan 4.
contoh :
gambar dibawah ini adalah operasi insertion pada b-tree
berorder 5
Operasi :
Deletion
Aturan Deletion :
-
Anggap node yang mau di delete adalah key
-
Delete dilakukan pada leaf. Meskipun pada saat
menghapus node parent, kita tetap menganggapnya menghapus leaf, karena ketika
parent dihapus lalu digantikan oleh anak terbesar subtree kiri atau anak
terkecil subtree kanan sama saja kita seolah-olah menghapus anak yang
menggantikannya. dimana anak tersebut selalu berada pada posisi leaf. maka leaf
tersebut dianggap P.
-
Jika ukuran P > m/2 maka langsung delete saja
data yang ingin dihapus
-
Jika ukuran P = m/2 maka : perhatikan siblingnya
(anggap sibling adalah Q)
-
Q > m/2, maka rotasi pada P
-
Q = m/2, satukan P dan Q
contoh :
delete pada b-tree order 5
CONTOH SOAL :
AVL dan B-Tree :
* insert: 5,6,7,0,4,3,8
* delete: 3,4,8
Jawaban :
AVL TREE- INSERT :

AVL TREE – DELETE :

B TREE – INSERT :

B TREE – DELETE :
















Komentar
Posting Komentar