(Data Structures)
( 4 SKS )
FLORIDA DAMANIK
7 9
3 11
2 5 10 15
1 4 6 13 19
12 14 17 20
16 18 21
10 10
5 15 5 15
3 8 13 18 3 8 18
10 10
5 15 5 18
3 8 18 3 8
7 7 7
3 9 2 9 4 9
1 5 8 1 5 8 1 5 8
2 4 6 4 6 2 6
7 7
4 12 8 12
3 6 9 3 5 6
Binary Search Tree Bukan Binary Search Tree
Representasi BST
1. Representasi Binary Search Tree (Binary Tree) dengan
Array :
- Node root mempunyai indeks array : 0
- Leftchild suatu node dengan indeks p : (2p + 1)
- Rightchild suatu node dengan indeks p : (2p + 2)
- Parent suatu node dengan indeks p : (p-1 div 2)
Pivot Point :
- Adanya node pada search path yang balancenya TallLeft
(tanda -) atau TallRight (tanda +) dan terletak paling dekat
dengan node yang baru
- Contoh : Jika diinsert node baru dengan nilai 5, maka pivot
pointnya di node 25
Operasi Insert :
- Kasus-1
Tidak ada pivot point dan setiap node adalah balance, maka
bisa langsung diinsert sama seperti BST
- Kasus 2
Jika ada PP tetapi subtree yang akan ditambahkan node baru
memiliki height yang lebih kecil, maka bisa langsung di insert
- Kasus 3
Jika ada PP dan subtree yang akan ditambahkan node baru
memiliki height yang lebih besar, maka tree harus digenerate
supaya tetap menghasilkan AVL Tree
Regenerate :
- Single Rotation
a. Single Left Rotation
b. Single Right Rotation
- Double Rotation
a. Double Left Rotation
b. Double Right Rotation
Algoritma Single Right Rotation :
BST SRR (BST R)
{ BST P = R->Kiri;
R-Kiri = P->Kanan;
P->Kanan = R;
return P;
}
N= 4
N= 3
Definisi (lanj)
N= 5 N= 6
N= 7
Fungsi Pembangun BalancedTree
function BuildBalancedTree(n:integer)BinTree
{ IS: n terdefinisi positif
FS:membentuk sebuah balanced tree biner dengan n buah node/simpul
yang dibaca, separuh node dari pohon akan menjadi pohon kiri dan
separuhnya kanan. Info pohon diinputkan oleh user secara PreOrder.
Catt: Ini Fungsi yg melayani interaksi usertidak lazim}
kamus:
newNode : BinTree
algoritma:
if (n=0) then
newNode Nil
else
nL n div 2
nR n - nL - 1
input(X) {input X:infotype dari user via keyboard}
newNode allocate(Node)
Info(newNode) X
Left(newNode) BuildBalancedTree(nL)
Right(newNode) BuildBalancedTree(nR)
newNode
Jika input adalah 21 bilangan integer berikut:
8,9,11,15,19,25,21,7,3,2,1,5,6,4,13,14,10,12,17,16,18
9 5
11 7 6 12
15 25 1
3 4 14 17 18
19 21 2 13 10 16
N= 4
N= 3
Contoh Balanced Tree
Unbalanced Tree
A A Balanced Tree
B C B C
D E E D
Unbalanced Tree
Unbalanced Tree
A
A A
C B C
C
D E D E
E
Unbalanced Tree F
Kegunaan Balanced Tree
• Dengan balanced Tree maka rata-rata
kompleksitas Search akan diturunkan. Hal ini
disebabkan komparasi maksimal dalam 1 search
hanya sebanyak (height+1) kali, dan height
balanced tree lebih rendah dibandingkan saat
unbalanced.
• Search pada BalancedTree lebih cepat daripada
search pada UnBalancedTree.
• Akibat sampingan: insertion dan deletion juga
lebih cepat dilakukan pada balanced tree.
Kombinasi Canggih:
Balanced Tree + BST
• Kombinasi: Pohon yang balanced tetapi juga
BST. Atau BST tetapi yang juga balanced.
• Balanced Tree menjamin bentuk yang optimal
untuk search
• BST menjamin keterurutan sehingga
memberikan kepastian “arah searching”.
Misalnya info yang dicari tidak di kiri tetapi di
kanan, maka arah searching akan ke kanan,
dan kiri tidak dilakukan searching.
Contoh BST+Balanced
Tidak balanced+BST)
6 6 Balanced + BST
5 9 5 9
7 12 3 7
Tidak balanced+BST)
6
6 6
9 5 9
5 9
7 12 10 12
12
Tidak balanced +
Balanced +
Tidak BST)
Tidak BST
Pemutaran Pohon BST
T
6 diubah 6
6
3 3
3 8
BST x Left(T)
UnBalanced Left(T) Right(x)
Right(x)T
Tx BST
Balanced
Ilustrasi Kasus Berat Kiri
T
x Left(T)
Left(T) Right(x) 8
Right(x)T
Tx x
6
T
6
3
3 8
Pemutaran Tunggal
kasus beratKanan
T
T menjadi seimbang
3 x T
3
diubah 6
6
6
8 3 8
8
x Right(T)
Right(T) Left(x)
BST Left(x)T BST
UnBalanced Tx Balanced
Pemutaran Tunggal
8 5
5 T1 8
T3
T1 T2 T2 T3
pemutaran tunggal ke
kanan
3 9
9 3
T1 T3
T2 T3 T1 T2
pemutaran tunggal ke kiri
Pemutaran Tunggal
kasus Ki-Ka (langsung)
T
T
x 8 menjadi seimbang
8
T
3 diubah 3 y
5
A 5 A B 5
3 8
C
B C x Left(T)
y Right(x)
Right(x)Left(y) A B C
BST Left(y) x
UnBalanced Left(T)Right(y) BST
Right(y)T Balanced
Ty
Ilustrasi Kasus Ki-Ka
T
x Left(T) 8
y Right(x)
x
Right(x)Left(y)
T
Left(y) x
3 y
Left(T)Right(y)
Right(y)T 5
A 5
Ty
3 8
B C
A B C
Pemutaran Tunggal
kasus Ka-Ki (langsung)
T T
menjadi seimbang
3 3 x
T
8 5
y 8 diubah
5 C
5 3 8
A B A B C
x Right(T) A B C
y Left(x)
BST Left(x)Right(y)
UnBalanced Right(y) x
Right(T)Left(y) BST
Left(y)T
Balanced
Ty
Pemutaran Ganda
melakukan pemutaran tunggal 2 kali
T T
8 8
y y
yLeft(T)
3 3 x xRight(y)
5 5 Right(y)Left(x)
Left(x)y
6 6 yx
Pemutaran Ganda (lanjt)
T
T=y=x
8
y=x 5
8
5 3
6
3 6
Left(T)Right(y)
Right(y)T
Ty
Pemutaran Ganda
T4 7
3
T1 7 3 12
T2 T3 T1 T2 T3 T4
3 baru itu
T1
12 7
ini dulu
7 T4 3 12
T2 T3 T1 T2 T3 T4
8 x 8
menjadi skewedLeft
3 T
diubah 3 y
8
5 5
x Left(T) 5
BST y Right(x)
UnBalanced Right(x)Left(y) BST belum
3 Balanced,
Left(y)x
Left(T) y putar sekali
lagi
Pemutaran Ganda
kasus Ki-Ka (tak langsung)
T T
diubah 3 menjadi skewedRight
3 x T
8 3
y 8
5 5 5
BST x Right(T) 8
y Left(x)
BST belum
UnBalanced Balanced,
Left(x)Right(y)
Right(y)x putar sekali
Right(T) y lagi
Balancing
procedure Balancing (input/output T:BinTree)
{IS: T BST terdefinisi mungkin kosong
FS: T menjadi BST seimbang }
Kamus x,y:BinTree
Algoritma
if(not IsBalancedTree(T)) then
if(IsHigherLeft(T)) then {condong kiri}
if(IsBalancedTree(Left(T))) then
if(Height(Left(Left(T)))<Height(Right(Left(T)))) then
xLeft(T) {Ki-Ka lsg}
yRight(x)
Right(x)Left(y)
Left(y) x
Left(T) Right( y)
Right(y)T
Ty
else {pemutaran tunggal ke kanan}
x Left(T)
Left(T) Right(x)
Right(x) T
Tx
else Balancing(Left(T)) {putar subtree terbawah dulu}
Balancing (lanjt)
Ketentuan :
a. Semua left child harus lebih kecil dari parent
b. Semua right child harus lebih besar dari parent
Keuntungan : Pencarian node target menjadi lebih efisien dan cepat
Procedure Tampil(T);
Var Pilih : Integer;
Begin
Clrscr;
Writeln(‘1. Tampil Secara Preorder’);
Writeln(‘2. Tampil Secara Inorder’);
Writeln(‘3. Tampil Secara Postorder’);
Writeln;
Write(‘Silahkan Pilih : ‘); Readln(Pilih);
If (Pilih = 1) Then
Preorder(T)
Else If (Pilih = 2) Then
Inorder (T)
Else
Postorder(T);
Readln
End;
AVL TREE
Pivot Point :
- Adanya node pada search path yang balancenya TallLeft
(tanda -) atau TallRight (tanda +) dan terletak paling dekat
dengan node yang baru
- Contoh : Jika diinsert node baru dengan nilai 5, maka pivot
pointnya di node 25
Operasi Insert :
- Kasus-1
Tidak ada pivot point dan setiap node adalah balance, maka
bisa langsung diinsert sama seperti BST
- Kasus 2
Jika ada PP tetapi subtree yang akan ditambahkan node baru
memiliki height yang lebih kecil, maka bisa langsung di insert
- Kasus 3
Jika ada PP dan subtree yang akan ditambahkan node baru
memiliki height yang lebih besar, maka tree harus digenerate
supaya tetap menghasilkan AVL Tree
Regenerate :
- Single Rotation
a. Single Left Rotation
b. Single Right Rotation
- Double Rotation
a. Double Left Rotation
b. Double Right Rotation
Algoritma Single Right Rotation :
BST SRR (BST R)
{ BST P = R->Kiri;
R-Kiri = P->Kanan;
P->Kanan = R;
return P;
}