Struktur Data & Algoritma

dokumen-dokumen yang mirip
Struktur Data dan Algoritma

Struktur Data & Algoritma

IKI 20100: Struktur Data & Algoritma

IKI 20100: Struktur Data & Algoritma

METODE AVL TREE UNTUK PENYEIMBANGAN TINGGI BINARY TREE

Outline. Struktur Data & Algoritme (Data Structures & Algorithms) Pengantar. Definisi. 2-3 Trees

Lecture Notes On Algorithms and Data Structures. Oleh Thompson Susabda Ngoen

ANALISIS ALGORITMA BINARY SEARCH

A. TUJUAN Mahasiswa diharapkan mampu : 1. Memahami Konsep Binary Search Tree 2. Mengimplementasaikan Binary Search Tree

Ujian Tengah Semester Struktur Data dan Algoritma Fakultas Ilmu Komputer, Universitas Indonesia 9 November 2006

Sorting. Struktur Data dan Algoritma. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI

13/12/2013. Binary Tree. Contoh Tree

Struktur Data dan Algoritma

BINARY SEARCH TREE. TUJUAN UMUM Mahasiswa memahami binary search Tree

Algoritma dan Struktur Data. Click to edit Master subtitle style Konsep Tree

Algoritma dan Struktur Data. Linear & Binary Search Tree

Algoritma dan Struktur Data. Binary Tree & Binary Search Tree (BST)

Politeknik Elektronika Negeri Surabaya

MODUL PRAKTIKUM STRUKTUR DATA

IT234 Algoritma dan Struktur Data. Tree

TREE ALGORITMA & STRUKTUR DATA. Materi ASD Fakultas Teknik Elektro & Komputer UKSW ( Download Dari :

ALGORITMA DAN STRUKTUR DATA

KUM 6 IMPLEMENTASI BINARY TREE

Soal Pendahuluan Modul 3

Variasi Pohon Pencarian Biner Seimbang

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

HEAP. Heap dan Operasinya. Oleh Andri Heryandi

TREE STRUCTURE (Struktur Pohon)

BAB XI Manipulasi Binary Tree

Syarif Abdullah (G )

Silsilah keluarga Hasil pertandingan yang berbentuk turnamen Struktur organisasi dari sebuah perusahaan. B.1 Pohon Biner (Binary Tree)

Pemrograman Algoritma Dan Struktur Data

Aplikasi Pohon Pencarian Biner Seimbang sebagai Memo Table Dynamic Programming

Everybody in this country should learn how to program a computer because it teaches you how to think. Steve Jobs

Ujian Akhir Semester Ganjil 2013/2014

Red-Black Tree Deletion. Rules for BST Deletion. Tujuan Top-Down Deletion. Terminology. Men-delete X dari BST: Men-delete X dari RB Trees: No problem

Tree. Perhatikan pula contoh tree di bawah ini : Level. Level 2. Level 3. Level 4. Level 5

DIKTAT KULIAH ALGORITMA dan STRUKTUR DATA II

Penerapan Divide and Conquer dalam Membandingkan Alur Proses 2 Source Code

Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

(Binary) Heap. Binary tree yang menyimpan pasangan prioritas (atau prioritas elemen) pada node Property Heap :

Kasus Penggunaan Stack: Komputasi Ekspresi Aritmatika

A B C E F G K Contoh Tree

Struktur Data dan Algoritma

Pertemuan 9 STRUKTUR POHON & KUNJUNGAN POHON BINER

Organisasi Berkas Sekuensial Berindeks

STRUKTUR POHON & KUNJUNGAN POHON BINER

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

Tree (Struktur Data) Nisa ul Hafidhoh, MT

Struktur Data Tree/Pohon dalam Bahasa Java

Penerapan Pohon Dalam Heap Sort

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

Struktur Data dan Algoritma

ABSTRAK. Kata Kunci : Map, TreeMap, AVL tree. vii Universitas Kristen Maranatha

Struktur Data dan Algoritma

Pohon (Tree) Universitas Gunadarma Sistem Informasi 2012/2013

STRUKTUR POHON (TREE) Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak mengandung sirkuit.

BAB IX TREE (POHON) ISTILAH DASAR

Penerapan Teknik Binary Search Tree Sebagai Alternatif Penyimpanan Data

Ringkasan mengenai Tree (Dari beberapa referensi lain) Nina Valentika

STRUKTUR DATA. Literatur

6. TREE / BINARY TREE

Implementasi Skema Pohon Biner yang Persistent dalam Pemrograman Fungsional

Pohon dan Pohon Biner

Algoritma dan Struktur Data. Pertemuan 8 Doubly Linked List

Buku Ajar Struktur Data

Algoritma Pemrograman & Struktur Data

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Praktikum Algoritma dan Setruktur Data

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

Struktur Data & Algoritme (Data Structures & Algorithms)

Data Structure STRUKTUR DATA QUEUE. Chapter 3. Dahlia Widhyaestoeti, S.Kom

Algoritma dan Struktur Data. Tree

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

BAB VII POHON BINAR POHON

MAKALAH STRUKTUR DATA HEAP SORT. Disusun Oleh :

IKI 20100: Struktur Data & Algoritma

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

SORTING DENGAN ALGORITMA DIVIDE AND CONQUER

Koleksi Hirarkis Tree

Pemodelan dan Pengelolaan Data Klasifikasi Tanaman Menggunakan Pohon

UNIVERSITAS GUNADARMA

Outline STRUKTUR DATA. VII. Sorting

Binary Search Tree (BST)

Tenia Wahyuningrum, S.Kom. MT Sisilia Thya Safitri, S.T.,M.T.

Dasar Kerja Pengaplikasian Self-balancing Binary Search Tree untuk Pencarian sebagai Struktur Data yang Lebih Mangkus dan Sangkir

Politeknik Elektronika Negeri Surabaya

JARINGAN UNTUK MERGING

B C D E F G H I J K L M N O P Q R S T. Tinaliah, S.Kom POHON BINER

Decrease and Conquer

1 Bagian 1: Mencetak isi binary tree

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

BAB IV POHON. Diktat Algoritma dan Struktur Data 2

Politeknik Elektronika Negeri Surabaya

Penerapan Teori Pohon Dalam Kajian Struktur Data

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

Kompleksitas Algoritma dari Algoritma Pembentukan pohon Huffman Code Sederhana

Modul 4: Iteratif & Rekursif, Binary Tree

ANALISA RUNNING TIME

Penerapan Pohon Untuk Memanipulasi dan Meritrieve Data

Transkripsi:

Struktur Data & Algoritma AVL Tree Suryana Setiawan, Ruli Manurung & Ade Azurat ( Denny (acknowledgments: Fasilkom UI SUR HMM AA Fasilkom UI - IKI20100/ IKI80110P Semester Ganjil 2009/2010 1

Tujuan Memahami variant dari Binary Search Tree yang balanced 2

Outline AVL Tree Definition Property operations 3

Motivasi Binary Search Tree yang tidak balance dapat membuat seluruh operasi memiliki kompleksitas running time O(n) pada kondisi worst case. 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 H-2 5

AVL Trees 10 10 5 20 5 20 3 3 43 2 1 1 3 6

AVL Trees 12 8 16 4 10 14 2 6 7

Insertion pada AVL Tree Setelah insert 1 12 8 16 4 10 14 2 6 1 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 9

Kondisi tidak balance H P =H Q =H R k 2 k 1 k 1 k 2 P Q R P Q 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 10

( 1 Single Rotation (case H A =H B +1 H B =H C k 2 k 1 k 1 k 2 A B C A B C 11

( 4 Single Rotation (case H A =H B H C =H B +1 k 2 k 1 k 1 k 2 A B C A B C 12

Keterbatasan Single Rotation Single rotation tidak bisa digunakan untuk kasus 2 dan ( case (inside 3 k 2 k 1 k 1 k 2 P Q R P Q R H Q =H P +1 H P =H R 13

Double Rotation: Langkah k 3 k 3 k 1 k 2 k 2 k 1 A B C D A B C D H A =H B =H C =H D 14

Double Rotation: Langkah k 2 k 1 k 3 A B C D 15

Double Rotation k 3 k 2 k 1 k 1 k 3 k 2 A B C D A B C D H A =H B =H C =H D 16

Double Rotation k 2 k 1 k 1 k 3 k 3 k 2 A B C D A B C D H A =H B =H C =H D 17

Contoh penambahan 3 pada AVL tree 11 8 20 11 4 20 4 16 27 3 8 16 27 3 18

Contoh penambahan 5 pada AVL tree 11 8 20 11 5 20 4 16 27 4 8 16 27 5 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 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. 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 22

( 1 Delete 55 (Kasus 60 20 70 10 40 65 85 5 15 30 50 80 90 55 23

( 1 Delete 55 (Kasus 60 20 70 10 40 65 85 5 15 30 50 80 90 55 24

( 2 Delete 50 (Kasus 60 20 70 10 40 65 85 5 15 30 50 80 90 55 25

( 2 Delete 50 (Kasus 60 20 70 10 40 65 85 5 15 30 50 80 90 55 26

( 3 Delete 60 (Kasus 60 20 70 10 40 65 85 5 15 30 50 prev 80 90 55 27

( 3 Delete 60 (Kasus 55 20 70 10 40 65 85 5 15 30 50 80 90 28

( 3 Delete 55 (Kasus 55 20 prev 70 10 40 65 85 5 15 30 50 80 90 29

( 3 Delete 55 (Kasus 50 20 70 10 40 65 85 5 15 30 80 90 30

( 3 Delete 50 (Kasus 50 20 prev 70 10 40 65 85 5 15 30 80 90 31

( 3 Delete 50 (Kasus 40 20 70 10 30 65 85 5 15 80 90 32

( 3 Delete 40 (Kasus 40 20 prev 70 10 30 65 85 5 15 80 90 33

Delete 40 : Rebalancing 30 20 70 10 Kasus? 65 85 5 15 80 90 34

Delete 40: setelah rebalancing 30 10 70 5 20 65 85 15 80 90 Single rotation is preferred! 35

Delete 5 30 10 70 5 20 65 85 15 80 90 36

Delete 5 30 10 70 20 65 85 Double rotation is required! 15 80 90 37

Delete 5 (After Rotation) 30 15 70 20 65 85 10 80 90 Double rotation is required! 38

Delete 10 & 15 30 15 70 20 65 85 10 80 90 Double rotation is required! 39

Delete 10 & 15 30 20 70 65 85 80 90 Single rotation is required! 40

Delete 10 & 15 70 20 30 65 85 80 90 Single rotation is required! 41

Delete 60 50 30 70 20 40 60 80 10 15 45 90 5 42

Delete 60 (Setelah rotasi pertama) 50 30 80 20 40 70 90 10 15 45 5 43

Delete 60 (Setelah rotasi kedua) 30 20 50 10 15 40 5 45 80 70 90 44

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

AVL Tree: analisa (1) F i φ= ( 1+ i φ / 5 )/ 2 5 1.618 AVL Tree of height H has at least (roughly) φ H+ 3 / 5 H < 1.44 log(n + 2 ) 1.328 46

( 2 ) AVL Tree: analisa Tinggi sebuah AVL tree merupakan fungsi logaritmik dari jumlah seluruh node. (ukuran AVL Tree) Oleh karena itu, seluruh operations pada AVL trees juga logaritmik 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. 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. 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. 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. 51

Diskusi? Bagaimana menentukan insertion terjadi pada bagian inside atau outside? 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; 53

Diskusi Apakah implementasi tersebut sudah efisien? Perhatikan pemanggilan method height! 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; 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 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; 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 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; } 59

Pseudocode: Double rotasi static <A extends Comparable<A>> AvlNode<A> doublerotatewithleftchild( AvlNode<A> k3 ) { k3.left = singlerotatewithrightchild( k3.left ); return singlerotatewithleftchild( k3 ); } 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. 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 62