AVL TREE fix

Download Report

Transcript AVL TREE fix

Algoritma dan Struktur Data
AVL TREE
Review BST
Apakah Binary
Search Tree itu ?



Pemakaian tree structure dalam proses pencarian (search)
Sifat Binary Tree:
Pada sebuah node x,
– elemen yang berada di LEFT sub-tree selalu lebih KECIL
daripada x
– elemen yang berada di RIGHT sub-tree selalu lebih BESAR
Atau SAMA DENGAN daripada x
Binary Search Tree: proses pencarian (SEARCHING) berbasis
binary tree
Example of a binary search tree
LATIHAN BST

Coba simulasikan penambahan pada
sebuah BST dengan urutan
penambahan:
– 14, 16, 10, 8, 12, 4, 9, 1
– 8, 12, 4, 9, 1, 14, 16, 10
Proses Pencarian (contoh SUKSES)
search(7)
13
7<13
5
21
7>5
7
2
6
15
7==7
Data yang dicari BERHASIL
ditemukan
13→5 →7
LATIHAN BST
14
10
8
4
1
16
12
9
8
4
1
12
9
14
10
16
Algoritma dan Struktur Data
AVL TREE
Tujuan

Memahami variant dari Binary Search Tree yang
balanced

Binary Search Tree yang tidak balance dapat
membuat seluruh operasi memiliki kompleksitas
running time O(n) pada kondisi worst case.
AVL Trees

Untuk setiap node dalam tree, ketinggian
subtree di anak kiri dan subtree di anak
kanan hanya berbeda maksimum 1.
X
H
H-1
X
H-2
AVL Trees
10
10
5
5
20
3
3
1
2
1
3
20
43
AVL Trees
12
8
4
2
16
10
6
14
Insertion pada AVL Tree

Setelah insert 1
12
8
4
2
1
16
10
6
14
Insertion pada AVL Tree
Untuk menjamin kondisi balance pada
AVL tree, setelah penambahan sebuah
node. jalur dari node baru tersebut
hingga root di simpan dan di periksa
kondisi balance pada tiap node-nya.
 Jika setelah penambahan, kondisi
balance tidak terpenuhi pada node
tertentu, maka lakukan salah satu rotasi
berikut:

– Single rotation
– Double rotation
Kondisi tidak balance
HP=HQ=HR
k2
k1
k1
k2
R
P

P
Q
Sebuah penambahan
pada subtree:
Q

R
Sebuah penambahan pada
subtree:
– P (outside) - case 1
– Q (inside) - case 3
– Q (inside) - case 2
– R (outside) - case 4
Single Rotation (case 1)
HA=HB+1
HB=HC
k2
k1
k1
k2
C
A
B
A
B
C
Single Rotation (case 4)
HA=HB
HC=HB+1
k2
k1
k1
A
k2
B
C
A
B
C
Keterbatasan Single Rotation

Single rotation tidak bisa digunakan
untuk kasus 2 dan 3 (inside case)
k2
k1
k1
k2
R
P
Q
HQ=HP+1
HP=HR
P
Q
R
Double Rotation: Langkah
k3
k3
k1
k2
k2
k1
D
D
A
C
B
C
HA=HB=HC=HD
A
B
Double Rotation: Langkah
k2
k1
A
k3
B
C
D
Double Rotation
k2
k3
k1
k1
k3
k2
D
A
B
C
HA=HB=HC=HD
A
B
C
D
Double Rotation
k2
k1
k1
k3
k3
k2
A
B
C
D
A
D
B
HA=HB=HC=HD
C
Contoh

penambahan 3 pada AVL tree
11
11
8
4
3
20
16
4
27
3
20
8
16
27
Contoh

penambahan 5 pada AVL tree
11
11
8
4
16
5
8
20
5
27
4
20
16
27
Contoh

Rotasi ke 2
11
5
4
20
8
16
27
AVL Trees: Latihan

Coba simulasikan penambahan pada sebuah AVL dengan
urutan penambahan:
– 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5, 55
http://www.strille.net/works/media_technology_projects/av
l-tree_2001/
Operasi: Remove pada AVL Tree
1. Menghapus node pada AVL Tree sama dengan
menghapus binary search tree procedure dengan
perbedaan pada penanganan kondisi tidak balance.
2. Penanganan kondisi tidak balance pada operasi
menghapus node AVL tree, serupa dengan pada operasi
penambahan. Mulai dari node yang diproses (dihapus)
periksa seluruh node pada jalur yang menuju root
(termasuk root) untuk menentukan node tidak balance
yang pertama
3. Terapkan single atau double rotation untuk
menyeimbangkan tree.
4. Bila Tree masih belum balance, ulangi lagi dari langkah
2.
Menghapus node X pada AVL Trees

Deletion:
– Kasus 1: jika X adalah leaf, delete X
– Kasus 2: jika X punya 1 child, X
digantikan oleh child tsb.
– Kasus 3: jika X punya 2 child, ganti X
secara rekursif dengan predecessor-nya
secara inorder

Rebalancing
Delete 55 (Kasus 1)
60
20
70
10
5
40
15
30
65
85
80
50
55
90
Delete 55 (Kasus 1)
60
20
70
10
5
40
15
30
65
85
80
50
55
90
Delete 50 (Kasus 2)
60
20
70
10
5
40
15
30
65
85
80
50
55
90
Delete 50 (Kasus 2)
60
20
70
10
5
40
15
30
65
50
55
85
80
90
Delete 60 (Kasus 3)
60
20
70
10
5
40
15
30
65
50
prev
55
85
80
90
Delete 60 (Kasus 3)
55
20
70
10
5
40
15
30
65
50
85
80
90
Delete 55 (Kasus 3)
55
20
10
5
40
15
70
prev
30
65
50
85
80
90
Delete 55 (Kasus 3)
50
20
70
10
5
40
15
30
65
85
80
90
Delete 50 (Kasus 3)
50
prev
20
10
5
40
15
30
70
65
85
80
90
Delete 50 (Kasus 3)
40
20
10
5
70
30
15
65
85
80
90
Delete 40 (Kasus 3)
40
20
10
5
30
15
70
prev
65
85
80
90
Delete 40 : Rebalancing
30
20
10 Kasus ?
5
15
70
65
85
80
90
Delete 40: setelah rebalancing
30
10
70
20
5
15
Single rotation is preferred!
65
85
80
90