• Tidak ada hasil yang ditemukan

Struktur Data dan Algoritma

N/A
N/A
Protected

Academic year: 2021

Membagikan "Struktur Data dan Algoritma"

Copied!
33
0
0

Teks penuh

(1)

Struktur Data dan Algoritma

Suryana Setiawan, Ruli Manurung & Ade Azurat

(acknowledgments: Denny)‏

Fasilkom UI

(2)

Tujuan

Memahami sifat dari Binary Search Tree (BST)‏

Memahami operasi-operasi pada BST

Memahami kelebihan dan kekurangan dari

BST

(3)

Outline

Properties of Binary Search Tree (BST)‏

Operation

Insert

find

(4)

Properties of Binary Search Tree

Untuk setiap

node X

pada tree, nilai elemen

pada subtree

sebelah kiri selalu lebih kecil dari

elemen node X

dan nilai elemen pada

subtree

sebelah kanan selalu lebih besar dari elemen

node X

.

Jadi object elemen harus

comparable

.

X

(5)

Binary Search Tree

9

3

6

5

1

2

7

(6)

7

2

3

9

1

5

6

(7)

3

2

1

3

1

2

2

1

3

1

3

2

1

2

3

(8)

Basic Operations

insert

findMin and findMax

remove

(9)

Print InOrder

class BinaryNode {

void printInOrder( )‏

{

if( left != null )‏

left.printInOrder( ); // Left

System.out.println( element ); // Node

if( right != null )‏

right.printInOrder( ); // Right

}

}

class BinaryTree {

public void printInOrder( )‏

{

if( root != null )‏

root.printInOrder( );

}

(10)

Insertion

Penyisipan sebuah elemen baru dalam binary

search tree, elemen tersebut pasti akan

menjadi leaf

10

2

3

15

1

5

6

12

14

(11)

Insertion: algorithm

Menambah elemen X pada binary search tree:

mulai dari root.

Jika X lebih kecil dari root, maka X harus diletakkan

pada sub-tree sebelah kiri.

jika X lebih besar dari root, then X harus diletakkan

pada sub-tree sebelah kanan.

Ingat bahwa: sebuah sub tree adalah juga

sebuah tree. Maka, proses penambahan elemen

pada sub tree adalah sama dengan

penambahan pada seluruh tree. (melalui root

tadi)

Apa hubungannya?

(12)

BinaryNode insert(int x, BinaryNode t)

{

if (t == null) {

t = new BinaryNode (x, null, null);

} else if (x < t.element) {

t.left = insert (x, t.left);

} else if (x > t.element) {

t.right = insert (x, t.right);

} else {

throw new DuplicateItem(“exception”);

}

return t;

}

(13)

BinaryNode findMin (BinaryNode t)

{

if (t == null) throw

exception

;

while (t.left != null) {

t = t.left;

}

return t;

}

FindMin

Mencari node yang memiliki nilai terkecil.

Algorithm:

ke kiri terus sampai buntu….:)‏

Code:

(14)

FindMax

Mencari node yang memiliki nilai terbesar

Algorithm?

(15)

Find

Diberikan sebuah nilai yang harus dicari

dalam sebuah BST. Jika ada elemen tersebut,

return node tersebut. Jika tidak ada, return

null.

Algorithm?

Code?

7

2

3

9

1

5

6

(16)

Remove

Kasus 1: jika node adalah leaf (tidak punya

anak), langsung saja dihapus.

Kasus 2: jika node punya satu anak: node

parent menjadikan anak dari node yang

dihapus (cucu) sebagian anaknya.

(mem-by-pass node yang dihapus).

(17)

8

4

5

12

1

6

3

Remove

5

6

4

Kasus 1

Kasus 2

Kasus 3

(18)

Removing 6

8

4

5

12

1

6

3

(19)

After 6 removed

8

5

12

1

3

4

6

(20)

Remove (lanj.)‏

Bagaimana bila node punya dua anak?

1. Hapus isi node (tanpa mendelete node)

2. Gantikan posisinya dengan:

Succesor Inorder node terkecil dari sub tree

kanan, dilanjutkan dengan melakukan

removeMin di subtree kanan.

[Alternatif: dengan kaidah Predecesor Inorder,

2. Gantikan posisinya dengan:

Predecesor Inorder, node terbesar dari sub

tree kiri, dilanjutkan dengan melakukan

removeMax di subtree kiri.]

(21)

7

3

9

1

5

4

Removing 2 (Sucessor Inorder)

Cari node

berisi 2

2

2

(22)

7

9

1

5

4

Removing 2 (Sucessor Inorder)

2

Cari sucessor

Indorder

3

3

(23)

7

9

1

5

4

Removing 2 (Sucessor Inorder)

3

Gantikan

posisi yang

(24)

After 2 deleted

7

3

9

1

5

4

Hapus node

ini

(25)

Removing Root

7

2

3

12

1

5

4

10

14

9

11

9

(26)

removeMin

BinaryNode removeMin(BinaryNode t)

{

if (t == null) throw exception;

if (t.left != null) {

t.left = removeMin (t.left);

} else {

t = t.right;

}

return t;

}

(27)

Remove

BinaryNode remove(int x, BinaryNode t) {

if (t == null) throw exception;

if (x < t.element) {

t.left = remove(x, t.left);

} else if (x > t.element) {

t.right = remove(x, t.right);

} else if (t.left != null && t.right != null) {

t.element = findMin(t.right).element;

t.right = removeMin(t.right);

} else {

t = (t.left != null) ? t.left : t.right;

}

return t;

}

(28)

removeMax

(29)

S

L

S

R

X

k < S

L

+ 1

S

L

S

R

X

k == S

L

+ 1

S

L

S

R

X

k > S

L

+ 1

Find k-th element

(30)

Find k-th element

BinaryNode findKth(int k, BinaryNode t)

{

if (t == null) throw exception;

int leftSize = (t.left != null) ?

t.left.size : 0;

if (k <= leftSize ) {

return findKth (k, t.left);

} else if (k == leftSize + 1) {

return t;

} else {

return findKth ( k - leftSize - 1, t.right);

}

(31)

Analysis

Running time:

insert?

Find min?

remove?

Find?

(32)

Rangkuman

Binary Search Tree menjamin urutan elemen

pada tree.

Tiap node harus comparable

Semua operasi membutuhkan O(log n)

-average case, saat tree relatif balance.

Semua operasi membutuhkan O(n) - worst

case, tinggi dari tree sama dengan jumlah

node.

(33)

Selanjutnya:

Sejauh ini struktur Binary Search terbentuk

dengan asumsi data cukup acak sehingga

seluruh bagian tree akan cukup terisi.

Benarkah asumsi tersebut?

Jika tidak benar, maka akan terbentuk tree

yang “tidak balance” yang berakibat tidak

tercapainya performance O(log n)

Solusi?

Dalam kuliah yad akan dibahas struktur

binary tree dengan kemampuan

auto-balancing  AVL tree

Referensi

Dokumen terkait

Tujuan dari penelitian saya ini untuk menghasilkan POS tentang manajemen perawatan luka modern di RSUCND, sehingga akan bermanfaat untuk meningkatkan kemampuan

Sutedi (2004: 106) menyebutkan makna leksikal dalam bahasa Jepang disebut jishoteki imi atau goiteki imi adalah makna kata yang sesungguhnya sesuai dengan

Pivot ini diletakkan pada posisi ke j sedemikian sehingga data antara 1 sampai dengan j-1 lebih kecil daripada x.. Caranya dengan menukarkan data diantara posisi

Manajemen pelatihan kerja sebaiknya mempertimbangkan aspek- aspek: (1) peserta (partisipan) sebagai orang dewasa dan mandiri, (2) tujuan atau kompetensi yang disasar

Lokasi identifikasi flood shelter berada di DAS Beringin Semarang yang terdiri dari 6 Kelurahan yaitu Kelurahan Wates, Kelurahan Wonosari, Kelurahan Mangunharjo, Kelurahan

Menyatakan genotip yang akan disilangkan, misalnya heterozigot dengan heterozigot (Kk x Kk) Dengan ketentuan (KK )dan (Kk) = berambut kuning, (kk) = berambut

Struktur modal merupakan salah satu hal penting yang berpengaruh terhadap kelangsungan operasi perusahaan keputusan struktur modal secara langsung juga berpengaruh

Jadi dapat disimpulkan bahwa tendangan ke arah badan mempunyai probabilitas yang signifikan terhadap peluang poin pada saat pertandingan cabang olahraga