Struktur Data and Algoritma pdf

Struktur Data & Algoritma
AVL Tree

Suryana Setiawan, Ruli Manurung & Ade Azurat
(acknowledgments: Denny)‫‏‬

Fasilkom UI

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

1

Tujuan


Memahami variant dari Binary Search Tree yang
balanced


SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

2

Outline


AVL Tree


Definition



Property




operations

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

3

Motivasi


Binary Search Tree yang tidak balance dapat membuat
seluruh operasi memiliki kompleksitas running time
O(n) pada kondisi worst case.


SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

4

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


SUR – HMM – AA

H-2

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

5

AVL Trees
10

10
5

5

20

3

3

20
43

1
2
1
SUR – HMM – AA

3
Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

6

AVL Trees


12
8
4

2

SUR – HMM – AA

16
10

14

6

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010


7

Insertion pada AVL Tree


Setelah insert 1
12
8
4

2

16
10

14

6

1

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

8

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

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

9

Kondisi tidak balance
HP=HQ=HR

k2


k1

k1

k2

R
P


P

Q

Q

Sebuah penambahan pada subtree:




R

Sebuah penambahan pada subtree:



P (outside) - case 1



Q (inside) - case 3



Q (inside) - case 2



R (outside) - case 4

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

10

Single Rotation (case 1)‫‏‬
HA=HB+1
HB=HC
k2

k1

k1

k2

C
A

SUR – HMM – AA

B

A

Fasilkom UI - IKI20100/ IKI80110P

B

C

Semester Ganjil – 2009/2010

11

Single Rotation (case 4)‫‏‬
HA=HB
HC=HB+1
k2

k1

k1

A

SUR – HMM – AA

k2

B

C

A

Fasilkom UI - IKI20100/ IKI80110P

B

C

Semester Ganjil – 2009/2010

12

Keterbatasan Single Rotation


Single rotation tidak bisa digunakan untuk kasus 2 dan
3 (inside case)‫‏‬
k2

k1

k1

k2

R
P

P

Q

Q

R

HQ=HP+1
HP=HR
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

13

Double Rotation: Langkah

k3

k3

k1

k2

k2

k1
D

D

A

C
B

C

A

B

HA=HB=HC=HD
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

14

Double Rotation: Langkah

k2
k1

A

SUR – HMM – AA

k3

B

C

Fasilkom UI - IKI20100/ IKI80110P

D

Semester Ganjil – 2009/2010

15

Double Rotation

k2

k3
k1

k1

k3

k2

D

A

B

C

D

A
B

C

HA=HB=HC=HD
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

16

Double Rotation

k2

k1

k1

k3

k3
k2

A

B

C

D

A
D
B

C

HA=HB=HC=HD
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

17

Contoh


penambahan 3 pada AVL tree
11

11

8
4

20
16

4
27

3

20
8

16

27

3

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

18

Contoh


penambahan 5 pada AVL tree
11

11

8
4

20
16

5
27

4

20
8

16

27

5

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

19

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

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

20

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.

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

21

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

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

22

Delete 55 (Kasus 1)‫‏‬

60
20

70

10
5

40
15

30

65

85
80

50

90

55

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

23

Delete 55 (Kasus 1)‫‏‬

60
20

70

10
5

40
15

30

65

85
80

50

90

55

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

24

Delete 50 (Kasus 2)‫‏‬

60
20

70

10
5

40
15

30

65

85
80

50

90

55

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

25

Delete 50 (Kasus 2)‫‏‬

60
20

70

10
5

40
15

30

65
50

85
80

90

55

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

26

Delete 60 (Kasus 3)‫‏‬

60
20

70

10
5

40
15

30

65
50

prev

85
80

90

55

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

27

Delete 60 (Kasus 3)‫‏‬

55
20

70

10
5

40
15

SUR – HMM – AA

30

65
50

Fasilkom UI - IKI20100/ IKI80110P

85
80

90

Semester Ganjil – 2009/2010

28

Delete 55 (Kasus 3)‫‏‬

55
20

10
5

40
15

SUR – HMM – AA

70

prev

30

65
50

Fasilkom UI - IKI20100/ IKI80110P

85
80

90

Semester Ganjil – 2009/2010

29

Delete 55 (Kasus 3)‫‏‬

50
20

70

10
5

40
15

SUR – HMM – AA

65

85
80

30

Fasilkom UI - IKI20100/ IKI80110P

90

Semester Ganjil – 2009/2010

30

Delete 50 (Kasus 3)‫‏‬

50
prev

20

10
5

40
15

SUR – HMM – AA

70

65

85
80

30

Fasilkom UI - IKI20100/ IKI80110P

90

Semester Ganjil – 2009/2010

31

Delete 50 (Kasus 3)‫‏‬

40
20

10
5

70

30

65
80

15

SUR – HMM – AA

85

Fasilkom UI - IKI20100/ IKI80110P

90

Semester Ganjil – 2009/2010

32

Delete 40 (Kasus 3)‫‏‬

40
20

10
5

70

prev

30

65
80

15

SUR – HMM – AA

85

Fasilkom UI - IKI20100/ IKI80110P

90

Semester Ganjil – 2009/2010

33

Delete 40 : Rebalancing

30
20

10 Kasus ?
5

70

65
80

15

SUR – HMM – AA

85

Fasilkom UI - IKI20100/ IKI80110P

90

Semester Ganjil – 2009/2010

34

Delete 40: setelah rebalancing

30
10

70

20

5

65

15

85
80

90

Single rotation is preferred!

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

35

Delete 5

30
10

70

20

5

65

15

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

85
80

90

Semester Ganjil – 2009/2010

36

Delete 5

30
10

70

20

65

15

85
80

90

Double rotation is required!

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

37

Delete 5 (After Rotation)

30
70

15
10

20

65

85
80

90

Double rotation is required!

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

38

Delete 10 & 15

30
70

15
10

20

65

85
80

90

Double rotation is required!

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

39

Delete 10 & 15

30
20

70

65

85
80

90

Single rotation is required!

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

40

Delete 10 & 15

70
30
20

85
65

80

90

Single rotation is required!

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

41

Delete 60

50
30
20
10

70

60

40
15

45

80
90

5

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

42

Delete 60 (Setelah rotasi pertama)

50
30
20
10

80

70

40
15

90

45

5

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

43

Delete 60 (Setelah rotasi kedua)
30
20

10

5

SUR – HMM – AA

50
15

40

80
45

Fasilkom UI - IKI20100/ IKI80110P

70

90

Semester Ganjil – 2009/2010

44

Jumlah node minimum pada AVL Tree





Sebuah AVL Tree dengan tinggi H memiliki paling tidak sebanyak FH+3-1
nodes, dimana Fi elemen ke-i dari deret bilangan fibonacci.
S0 = 1
S1 = 2
SH = SH-1 + SH-2 + 1

H
H-1

SH-1
SUR – HMM – AA

SH-2

Fasilkom UI - IKI20100/ IKI80110P

H-2

Semester Ganjil – 2009/2010

45

AVL Tree: analisa (1)
Fi  φ i / 5

φ = ( 1+ 5 ) / 2  1.618
AVL Tree of height H has at least (roughly)

φH + 3 / 5
H < 1.44 log(N + 2 )  1.328

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

46

AVL Tree: analisa (2)‫‏‬



Tinggi sebuah AVL tree merupakan fungsi logaritmik
dari jumlah seluruh node. (ukuran AVL Tree)
Oleh karena itu, seluruh operations pada AVL trees
juga logaritmik

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

47

Implementasi AVL Tree





Beberapa method sama atau serupa dengan Binary
Search Tree.
Perbedaan utama terdapat pada tambahan proses
balancing dengan single dan double rotation.
Perlu tidak nya dilakukan balancing perlu diperiksa
setiap kali melakukan insert dan remove.
Kita akan pelajari lebih dalam bagaimana implementasi
method insert pada AVL Tree.

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

48

Ide





Setiap kali melakukan insert, perlu mencek pada node
yang dilewati apakah node tersebut masih balance
atau tidak.
Proses insertion adalah top-down, dari root ke leaf.
Proses pengecekan balancing adalah bottom-up, dari
leaf ke root.

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

49

Algoritma insertion
1.

Letakkan node baru pada posisi yang sesuai
sebagaimana pada Binary Search Tree. Proses
pencarian posisi dapat dilakukan secara rekursif.

2.

Ketika kembali dari pemanggilan rekursif, lakukan
pengecekan apakah tiap node yang dilewati dari leaf
hingga kembali ke root, apakah masih balance atau
tidak.

3.

Bila seluruh node yang dilewati hingga kembali ke
root masih balance. Proses selesai.

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

50

Algoritma insertion (lanj.)
1.

Untuk setiap node yang tidak balance lakukan
balancing.
a.

b.

Bila insertion terjadi pada “outside” lakukan single
rotation
Bila insertion terjadi pada “inside” lakukan double
rotation.

2. Lakukan pengecekan dan balancing hingga root.

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

51

Diskusi?


Bagaimana menentukan insertion terjadi pada bagian
“inside” atau “outside” ?

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

52

Pseudo code
public static AvlNode
insert( A x, AvlNode t ){
if( t == null )
t = new AvlNode( x, null, null );
else if( x.compareTo( t.element ) < 0 )
{
t.left = insert( x, t.left );
if(Math.abs(height( t.left ) - height( t.right )) == 2 )
if( x.compareTo( t.left.element ) < 0 )
t = rotateWithLeftChild( t );
else
t = doubleWithLeftChild( t );
}
else if( x.compareTo( t.element ) > 0 )
{
// simetris dengan program diatas
}
return t;
}
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

53

Diskusi


Apakah implementasi tersebut sudah efisien?


Perhatikan pemanggilan method height !

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

54

Pseudo code
public static AvlNode
insert( A x, AvlNode t ){
if( t == null )
t = new AvlNode( x, null, null );
else if( x.compareTo( t.element ) < 0 )
{
t.left = insert( x, t.left );
if(Math.abs(height( t.left ) - height( t.right )) == 2 )
if( x.compareTo( t.left.element ) < 0 )
t = rotateWithLeftChild( t );
else
t = doubleWithLeftChild( t );
}
else if( x.compareTo( t.element ) > 0 )
{
// simetris dengan program diatas
}
return t;
}
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

55

Pseudo code AvlNode
class AvlNode extends BinaryNode{
// Constructors
AvlNode( A theElement )
{
this( theElement, null, null );
}
AvlNode( A theElement, AvlNode lt, AvlNode rt ) {
element = theElement;
left
= lt;
right
= rt;
height
= 0;
}
public int height(){
return t.height;
}
// Friendly data; accessible by other package routines
A
element;
// The data in the node
AvlNode left;
// Left child
AvlNode right;
// Right child
int
height;
// Height
}

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

56

Pseudo code
public static AvlNode
insert( A x, AvlNode t ){
if( t == null )
t = new AvlNode( x, null, null );
else if( x.compareTo( t.element ) < 0 )
{
t.left = insert( x, t.left );
if(Math.abs(height( t.left ) - height( t.right )) == 2 )
if( x.compareTo( t.left.element ) < 0 )
t = singleRotateWithLeftChild( t );
else
t = doubleRotateWithLeftChild( t );
}
else if( x.compareTo( t.element ) > 0 )
{
// simetris dengan program diatas
}
t.height = max( height( t.left ), height( t.right ) ) + 1;
return t;
}
SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

57

Diskusi


Apakah ada cara lain?


Hanya menyimpan nilai perbandingan saja.
• Nilai -1, menyatakan sub tree kiri lebih tinggi 1 dari sub tree kanan.
• Nilai +1, menyatakan sub tree kanan lebih tinggi 1 dari sub tree kiri
• Nilai 0, menyatakan tinggi sub tree kiri = tinggi sub tree kanan



Kapan dilakukan rotasi?
• Bila harus diletakkan ke kiri dan node tersebut sudah bernilai -1
maka dinyatakan tidak balance
• Berlaku simetris
• Lihat contoh animasi

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

58

Pseudocode: Single rotasi

static AvlNode
singleRotateWithLeftChild( AvlNode k2 )
{
AvlNode k1 = k2.left;
k2.left = k1.right;
k1.right = k2;
// update tinggi kedua node.
return k1;
}

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

59

Pseudocode: Double rotasi

static AvlNode
doubleRotateWithLeftChild( AvlNode k3 )
{
k3.left = singleRotateWithRightChild( k3.left );
return singleRotateWithLeftChild( k3 );
}

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

60

AVL Trees: Latihan




Coba simulasikan urutan proses pada sebuah AVL Tree
berikut ini


insert 10, 85, 15, 70, 20, 60, 30,



delete 15, 10,



insert 50, 65, 80,



delete 20, 60,



insert 90, 40, 5, 55



delete 70

Gambarkan kondisi akhir dari AVL Tree tersebut.

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

61

Rangkuman




Mencari elemen, menambahkan, dan menghapus,
seluruhnya memiliki kompleksitas running time O(log
n) pada kondisi worst case
Insert operation: top-down insertion dan bottom up
balancing

SUR – HMM – AA

Fasilkom UI - IKI20100/ IKI80110P

Semester Ganjil – 2009/2010

62