Anda di halaman 1dari 62

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-2
H-1

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 5


AVL Trees

10 10

5 20 5 20

3 3 43

1
2

1 3

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 6


AVL Trees

12

8 16

4 10 14

2 6

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 7


Insertion pada AVL Tree
 Setelah insert 1

12

8 16

4 10 14

2 6

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 R

 Sebuah penambahan pada subtree:  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
B A B C
A

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 11


Single Rotation (case 4)‫‏‬

HA=HB
HC=HB+1

k2 k1

k1 k2

A
A B C B
C

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P 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 R
Q Q

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 k3

A B C D

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 15


Double Rotation

k3 k2

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 20 4 20

4 16 27 3 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 20 5 20

4 16 27 4 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 40 65 85

5 15 30 50 80 90

55

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 23


Delete 55 (Kasus 1)‫‏‬

60

20 70

10 40 65 85

5 15 30 50 80 90

55

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 24


Delete 50 (Kasus 2)‫‏‬

60

20 70

10 40 65 85

5 15 30 50 80 90

55

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 25


Delete 50 (Kasus 2)‫‏‬

60

20 70

10 40 65 85

50 80 90
5 15 30

55

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 26


Delete 60 (Kasus 3)‫‏‬

60

20 70

10 40 65 85

5 15 30 50 prev 80 90

55

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 27


Delete 60 (Kasus 3)‫‏‬

55

20 70

10 40 65 85

5 15 30 50 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 28


Delete 55 (Kasus 3)‫‏‬

55

20 prev 70

10 40 65 85

5 15 30 50 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 29


Delete 55 (Kasus 3)‫‏‬

50

20 70

10 40 65 85

5 15 30 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 30


Delete 50 (Kasus 3)‫‏‬

50

20 prev 70

10 40 65 85

5 15 30 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 31


Delete 50 (Kasus 3)‫‏‬

40

20 70

10 30 65 85

5 15 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 32


Delete 40 (Kasus 3)‫‏‬

40

20 prev 70

10 30 65 85

5 15 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 33


Delete 40 : Rebalancing

30

20 70

10 Kasus ? 65 85

5 15 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 34


Delete 40: setelah rebalancing

30

10 70

5 20 65 85

15 80 90

Single rotation is preferred!

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 35


Delete 5

30

10 70

5 20 65 85

15 80 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 36


Delete 5

30

10 70

20 65 85

15 80 90

Double rotation is required!

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 37


Delete 5 (After Rotation)

30

15 70

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

15 70

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 85

20 80 90
65

Single rotation is required!

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 41


Delete 60

50

30 70

20 60 80
40

10 90
15 45

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 42


Delete 60 (Setelah rotasi pertama)

50

30 80

20 70 90
40

10 15 45

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 43


Delete 60 (Setelah rotasi kedua)

30

20 50

10 15 40 80

5 45 70 90

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P 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-2
H-1 SH-2
SH-1

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P 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. Bila insertion terjadi pada “outside” lakukan single
rotation
b. 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 <A extends Comparable<A>> AvlNode<A>
insert( A x, AvlNode<A> t ){

if( t == null )
t = new AvlNode<A>( 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 <A extends Comparable<A>> AvlNode<A>
insert( A x, AvlNode<A> t ){

if( t == null )
t = new AvlNode<A>( 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<A extends Comparable<A>> extends BinaryNode<A>{
// Constructors
AvlNode( A theElement ) {
this( theElement, null, null );
}

AvlNode( A theElement, AvlNode<A> lt, AvlNode<A> 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<A> left; // Left child
AvlNode<A> right; // Right child
int height; // Height
}

SUR – HMM – AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil – 2009/2010 56


Pseudo code
public static <A extends Comparable<A>> AvlNode<A>
insert( A x, AvlNode<A> t ){
if( t == null )
t = new AvlNode<A>( 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 <A extends Comparable<A>> AvlNode<A>


singleRotateWithLeftChild( AvlNode<A> k2 )
{
AvlNode<A> 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 <A extends Comparable<A>> AvlNode<A>


doubleRotateWithLeftChild( AvlNode<A> 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

Anda mungkin juga menyukai