• Tidak ada hasil yang ditemukan

Struktur Data & Algoritma

N/A
N/A
Protected

Academic year: 2021

Membagikan "Struktur Data & Algoritma"

Copied!
62
0
0

Teks penuh

(1)

Struktur Data & Algoritma

Suryana Setiawan, Ruli Manurung & Ade Azurat

(acknowledgments: Denny)

Fasilkom UI

(2)

Tujuan

Memahami variant dari Binary Search Tree yang

(3)

Outline

AVL Tree

Definition

Property

operations

(4)

Motivasi

Binary Search Tree yang tidak balance dapat membuat

seluruh operasi memiliki kompleksitas running time

O(n) pada kondisi worst case.

(5)

X

X

AVL Trees

Untuk setiap node dalam tree, ketinggian subtree di

anak kiri dan subtree di anak kanan hanya

berbeda

maksimum 1

.

H

(6)

AVL Trees

10

5

3

20

2

1

3

10

5

3

20

1

43

5

(7)

AVL Trees

12

8

16

4

10

2

6

14

(8)

12

8

16

4

10

2

6

14

1

Insertion pada AVL Tree

(9)

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

(10)

Kondisi tidak balance

R

P

Q

k

1

k

2

Q

k

2

P

k

1

R

Sebuah penambahan pada subtree:

P (outside) - case 1

Q (inside) - case 2

Sebuah penambahan pada subtree:

Q (inside) - case 3

R (outside) - case 4

(11)

A

k

2

B

k

1

C

C

B

A

k

1

k

2

Single Rotation (case 1)

H

A

=H

B

+1

H

B

=H

C

(12)

Single Rotation (case 4)

C

k

1

B

k

2

A

A

B

C

k

2

k

1

H

A

=H

B

H

C

=H

B

+1

(13)

Q

k

2

P

k

1

R

R

P

Q

k

1

k

2

Keterbatasan Single Rotation

Single rotation tidak bisa digunakan untuk kasus 2 dan

3 (

inside case

)‏

H

Q

=H

P

+1

H

=H

(14)

C

k

3

A

k

1

D

B

k

2

Double Rotation: Langkah

C

k

3

A

k

1

D

B

k

2

H

=H

=H

=H

(15)

C

k

3

A

k

1

D

B

k

2

(16)

C

k

3

A

k

1

D

B

k

2

C

k

3

A

k

1

D

B

k

2

Double Rotation

H

A

=H

B

=H

C

=H

D

(17)

B

k

1

D

k

3

A

C

k

2

B

k

1

D

k

3

A

C

k

2

Double Rotation

H

A

=H

B

=H

C

=H

D

(18)

3

Contoh

penambahan 3 pada AVL tree

11

8

20

4

16

27

8

8

11

4

20

3

16

27

(19)

Contoh

penambahan 5 pada AVL tree

5

11

8

20

4

16

27

8

11

5

20

4

16

27

8

(20)

AVL Trees: Latihan

Coba simulasikan penambahan pada sebuah AVL

dengan urutan penambahan:

(21)

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

.

(22)

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

(23)

Delete 55 (Kasus 1)

60

20

70

10

40

65

85

5

15

30

50

80

90

55

(24)

Delete 55 (Kasus 1)

60

20

70

10

40

65

85

5

15

30

50

80

90

55

(25)

Delete 50 (Kasus 2)

60

20

70

10

40

65

85

5

15

30

50

80

90

55

(26)

Delete 50 (Kasus 2)

60

20

70

10

40

65

85

5

15

30

50

80

90

55

(27)

Delete 60 (Kasus 3)

60

20

70

10

40

65

85

5

15

30

50

80

90

55

prev

(28)

Delete 60 (Kasus 3)

55

20

70

10

40

65

85

(29)

Delete 55 (Kasus 3)

55

20

70

10

40

65

85

5

15

30

50

80

90

prev

(30)

Delete 55 (Kasus 3)

50

20

70

10

40

65

85

(31)

Delete 50 (Kasus 3)

50

20

70

10

40

65

85

5

15

30

80

90

prev

(32)

Delete 50 (Kasus 3)

40

20

70

10

30

65

85

(33)

Delete 40 (Kasus 3)

40

20

70

10

30

65

85

5

15

80

90

prev

(34)

Delete 40 : Rebalancing

30

20

70

10

65

85

5

15

80

90

Kasus ?

(35)

Delete 40: setelah rebalancing

30

70

10

20

65

85

5

15

80

90

(36)

Delete 5

30

70

10

20

65

85

5

15

80

90

(37)

Delete 5

30

70

10

20

65

85

15

80

90

(38)

Delete 5 (After Rotation)

30

70

10

20

65

85

15

80

90

(39)

Delete 10 & 15

30

70

10

20

65

85

15

80

90

(40)

Delete 10 & 15

30

70

20

65

85

80

90

(41)

Delete 10 & 15

30

70

20

65

85

80

90

(42)

Delete 60

30

50

20

40

70

60

80

10

15

5

45

90

(43)

Delete 60 (Setelah rotasi pertama)

30

50

20

40

80

70

90

10

15

5

45

(44)

Delete 60 (Setelah rotasi kedua)

30

50

20

40

80

70

90

10

15

5

45

(45)

Jumlah node minimum pada AVL Tree

Sebuah AVL Tree dengan tinggi

H

memiliki paling tidak sebanyak F

H+3

-1

nodes, dimana F

i

elemen ke-i dari deret bilangan fibonacci.

S

0

= 1

S

1

= 2

S

H

= S

H-1

+ S

H-2

+ 1

S

H-1

S

H-2

H

H-1

H-2

(46)

AVL Tree: analisa (1)

1.328

2

log

1.44

5

/

(roughly)

least

at

has

H

height

of

Tree

1.618

2

/

5

1

5

/

3

)

+

(N

<

H

φ

AVL

)

+

(

=

φ

φ

F

+

H

i

i

(47)

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

(48)

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

(49)

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

(50)

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

(51)

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.

(52)

Diskusi?

Bagaimana menentukan insertion terjadi pada bagian

(53)

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;

}

(54)

Diskusi

Apakah implementasi tersebut sudah efisien?

(55)

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;

}

(56)

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

(57)

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;

}

(58)

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

(59)

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;

(60)

Pseudocode: Double rotasi

static <A extends Comparable<A>> AvlNode<A>

doubleRotateWithLeftChild( AvlNode<A> k3 )

{

k3.left = singleRotateWithRightChild( k3.left );

return singleRotateWithLeftChild( k3 );

(61)

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

(62)

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

Referensi

Dokumen terkait

Kepuasan kerja dan komiten organisasi sangat berkaitan dengan kinerja karyawan, karena dengan adanya kepusan kerja yang tinggi dan komitmen yang kuat maka akan

Hasil yang diharapkan adalah mengetahui kandungan kimia dan fisika dari lumpur lapindo, dapat menentukan komposisi paling optimal lumpur lapindo sebagai campuran bahan pembuatan

Setelah melakukan prosedur penelitian seperti melakukan analisis data, melakukan pengujian hipotesis, menunjukkan bahwa ada kontribusi yang signifikan antara penguasaan

Dari Diagram kendali X  R maka didapat hasil penimbangan Weight Feeder banyak yang keluar dari batas kendali untuk itu perlu dilakukan perbaikan dalam

Pedoman ini dimaksudkan sebagai acuan bagi setiap instansi pemerintah dalam menghitung kebutuhan pegawai berdasarkan beban kerja dalam rangka penyusunan formasi

Daerah wilayahnya termasuk daerah praja (kasunanan) Surakarta Hadiningrat yang dipimpin oleh Raden Mas Said atau dengan gelar Pangeran Adipati Arya Mangkunegara

Hasil perhitungan dan pengujian data dapat diperoleh kesimpulan bahwa setiap variabel independent dalam penelitain ini yaitu kualitas pelayanan dan citra merek memiliki

f) Tidak baik digunakan pada perempuan dengan IMS atau perempuan yang sering berganti pasangan. g) Penyakit radang panggul terjadi. h) Prosedur medis, termasuk pemeriksaan