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