AVL Tree - m1perpustakaanmateri

Download Report

Transcript AVL Tree - m1perpustakaanmateri

Algoritma dan Struktur Data
AVL Tree
Outline
AVL Tree
Definisi
 Sifat
 Operasi

27th Mar 2007
AVL Tree
Binary Search Trees yang tidak imbang memiliki
efisiensi yang buruk. Worst case: O(n).
AVL (Adelson-Velskii & Landis) tree adalah BST
yang imbang.
Setiap node di AVL tree memiliki balance factor
bernilai -1, 0, atau 1.
X
H
H-1
27th Mar 2007
X
H-2
AVL Tree
10
10
5
5
20
3
3
1
2
1
27th Mar 2007
3
20
43
AVL Tree
12
8
4
2
27th Mar 2007
16
10
6
14
Penyisipan node di AVL Tree
Setelah insert 1
12
8
4
2
1
27th Mar 2007
16
10
6
14
Penambahan node di AVL Tree
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
 Double rotation

27th Mar 2007
AVL Tree Balance Factor
• Balance factor = HL – HR
• Balance factor node di AVL tree harus +1, 0, -1
• Identifier:
– LH left high (+1) left subtree lebih panjang dari right subtree.
– EH even high (0) subtree kiri dan kanan heightnya sama.
– RH right high (-1) left subtree lebih pendek dari right subtree.
8
9
Menyeimbangkan AVL Tree
• AVL trees diseimbangkan dengan merotasikan node ke kiri
atau ke kanan
• Kasus penyeimbangan pada sebuah node:
1. Left of left: mengalami left high dan left subtreenya
mengalami left high.
2. Right of right: mengalami right high dan right subtreenya
mengalami right high.
3. Right of left: Mengalami left high dan left subtreenya
mengalami right high.
4. Left of right: Mengalami right high dan right subtreenya
mengalami left high.
10
HL =3
HL =1
11
HR =1
HR =3
(continued)
HL =3
HL =1
12
HR =1
HR =3
Case 1:
Left of Left
13
Case 2:
Right of Right
14
Case 3:
Right of Left
15
Case 4:
Left of Right
16
Contoh
Sisipkan 3 ke AVL tree
11
11
8
4
3
27th Mar 2007
20
16
4
27
3
20
8
16
27
Contoh
Penyisipan 5 ke AVL tree
11
11
8
4
16
5
27th Mar 2007
20
5
27
4
20
8
16
27
Latihan
Sisipkan data berikut ke AVL tree secara
berurutan:

10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55
27th Mar 2007
Menghapus node di AVL Tree
Proses menghapus sebuah node di AVL tree
hampir sama dengan BST. Penghapusan
sebuah node dapat menyebabkan tree tidak
imbang
Setelah menghapus sebuah node, lakukan
pengecekan dari node yang dihapus → root.
Gunakan single atau double rotation untuk
menyeimbangkan node yang tidak imbang.
Pencarian node yang imbalance diteruskan
sampai root.
27th Mar 2007
Menghapus node di AVL Tree
Tahap penghapusan:
Case 1: X merupakan leaf, hapus X
 Case 2: jika X memiliki 1 child, gunakan child
tersebut untuk menggantikan X. Kemudian hapus X
 Case 3: Jika X memiliki 2 child, ganti nilai X dengan
node terbesar pada left subtree atau node terkecil
pada right subtree. Hapus node yang nilainya
digunakan untuk mengganti X

Tahap menyeimbangkan node yang balance
factornya tidak -1, 0, 1, dilakukan dari node
yang dihapus menuju root.
27th Mar 2007
22
23
24
25
26
27
28
29
30
Delete 55 (case 1)
60
20
70
10
5
40
15
30
65
80
50
55
27th Mar 2007
85
90
Delete 55 (case 1)
60
20
70
10
5
40
15
30
65
80
50
55
27th Mar 2007
85
90
Delete 50 (case 2)
60
20
70
10
5
40
15
30
65
80
50
55
27th Mar 2007
85
90
Delete 50 (case 2)
60
20
70
10
5
40
15
30
65
50
55
27th Mar 2007
85
80
90
Delete 60 (case 3)
60
20
70
10
5
40
15
30
65
50
prev
55
27th Mar 2007
85
80
90
Delete 60 (case 3)
55
20
70
10
5
27th Mar 2007
40
15
30
65
50
85
80
90
Delete 55 (case 3)
55
20
10
5
27th Mar 2007
40
15
70
prev
30
65
50
85
80
90
Delete 55 (case 3)
50
20
70
10
5
27th Mar 2007
40
15
30
65
85
80
90
Delete 50 (case 3)
50
prev
20
10
5
27th Mar 2007
40
15
30
70
65
85
80
90
Delete 50 (case 3)
40
20
10
5
27th Mar 2007
70
30
15
65
85
80
90
Delete 40 (case 3)
40
20
10
5
27th Mar 2007
30
15
70
prev
65
85
80
90
Delete 40 : Rebalancing
30
20
10
5
27th Mar 2007
Case ?
15
70
65
85
80
90
Delete 40: after rebalancing
30
10
70
20
5
15
27th Mar 2007
65
85
80
90