Think Different Materi + UAS Mata Kuliah ASD (Semester Pendek) 9. 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

75
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


X

H
H-1

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

20
16

5

8
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/
http://www.site.uottawa.ca/~stan/csi2514/applets/avl/BT.ht
ml

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