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

dokumen-dokumen yang mirip
Politeknik Elektronika Negeri Surabaya

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

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK

Binary Tree kosong Gambar 1. Binary Tree dalam kondisi kosong

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

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA QUEUE

Struktur Data Tree/Pohon dalam Bahasa Java

BAHASA PEMROGRAMAN JAVA

Percabangan & Perulangan

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

IKI 20100: Struktur Data & Algoritma

ANALISIS ALGORITMA BINARY SEARCH

Gambar 1. Single Linked List

Belajar ArrayList di Java

Algoritma Pemrograman & Struktur Data

Struktur Kontrol Pemrograman Java : PERCABANGAN

Politeknik Elektronika Negeri Surabaya

MODUL III ARRAYLIST TUGAS PENDAHULUAN

2 TIPE DATA DAN VARIABEL

Modul Praktikum 3 Pemograman Berorientasi Objek

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

HEAP. Heap dan Operasinya. Oleh Andri Heryandi

IF PEMROGRAMAN LANJUT PERCABANGAN. Oleh : Andri Heryandi, M.T.

Struktur Data dan Algoritma

Gambar 1. Single Linked List

Obyektif : KONTROL ALUR PROGRAM

KENDALI PROSES. Untuk mengatur arus program, pemrograman java menyediakan struktur perulangan (looping), kondisional, percabangan, dan lompatan.

BAB II VARIABEL DAN TIPE DATA

Percabangan & Perulangan

Gambar 1. Single Linked List

MODUL PRAKTIKUM BASIS DATA PENGENALAN STRUKTUR DATA DAN KOMPLEKSITAS WAKTU

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

JAVA BASIC PROGRAMMING Joobshet

LAB PEMROGRAMAN I (JAVA FUNDAMENTAL) PERTEMUAN 3 Dosen : Bella Hardiyana S. Kom

Penerapan Divide and Conquer dalam Membandingkan Alur Proses 2 Source Code

Badiyanto, S.Kom., M.Kom. PBO java

1. Mana diantara pilihan-pilihan berikut ini yang merupakan penulisan loop yang benar?

Tujuan : A. Percabangan Percabangan di dalam Java terdapat 2 macam, yaitu dengan memakai if dan switch.

Algoritma dan Struktur Data. Queue

TPI4202 e-tp.ub.ac.id. Lecture 5 Mas ud Effendi

Java Basic. Variabel dan Tipe Data. Lokasi di dalam memori komputer yang digunakan untuk menyimpan suatu informasi (nilai)

Pertemuan 7. REVIEW dan QUIS

Linked List dan Implementasinya dalam Bahasa Java

Identifier, Keywords, Variabel, Tipe Data Primitif dan Operator PBO. Ramos Somya

Metode Binnary Searching di Java Console

PEMROGRAMAN JAVA : VARIABEL DAN TIPE DATA

SUMBER BELAJAR PENUNJANG PLPG

LAPORAN PRAKTIKUM PEMROGRAMAN DASAR TIPE-TIPE FUNGSI ATAU METHOD

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 2)

Tipe if : If tanpa else (if) If dengan else (if-else) Nested if

int i = 0; while (i < 10) { System.out.println( Informatika Unpas ); i++; }

Pada akhir pertemuan ini, diharapkan mahasiswa memiliki kemampuan untuk: Menggunakan struktur kendali pencabangan bersyarat dalam bahasa pemrograman.

Elemen Dasar Dalam Bahasa Java

Sekarang, kita akan mencoba untuk menganalisa program Java pertama : public class Hello {

PRAKTEK 1 CLASS, ATTRIBUTE, METHOD, DAN OBJEK

BAB XI Manipulasi Binary Tree

MAKALAH STRUKTUR DATA HEAP SORT. Disusun Oleh :

Array. Adharul Muttaqin Universitas Brawijaya Malang. Array

BAB 3 TYPE DATA, VARIABLE DAN OPERATOR

Tipe Data dan Operator

ARRAY. 7 th week Estu Sinduningrum ST,MT

Membuat Binary Search Tree Menggunakan STL Vector C++

Pemrograman. Pertemuan-3 Fery Updi,M.Kom

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

Struktur Data & Algoritma

Algoritma & Struktur Data. Array. Oleh : Nur Hayatin, M.Kom

Praktikum Algoritma dan Setruktur Data

Struktur Data & Algoritma

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-7 Pencarian (Searching) 2

PEMROGRAMAN JAVA. Yoannita, S.Kom. Input Kondisi (IF-ELSE, SWITCH)

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

Variabel dengan tipe dasar hanya dapat menyimpan sebuah nilai

Operator, Statement kondisional, dan Iterasi pada Java

if (ekspresi_boolean) { Pernyataan1; } else { Pernyataan2; }

Gambar 1. Single Linked List

Algoritma dan Struktur Data. Linear & Binary Search Tree

Pemrograman Berorientasi Obyek Lanjut (IT251) Ramos Somya, S.Kom., M.Cs.

BAB V. STATEMEN KONTROL

String. String merupakan tipe data untuk menyimpan nilai berupa teks.

PEMROGRAMAN TERSTRUKTUR PERTEMUAN VI KOMPONEN KOMPONEN PEMROGRAMAN TERSTRUKTUR

PEMAHAMAN DASAR DASAR JAVA

Perulangan, Percabangan, dan Studi Kasus

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA LINKED LIST (BAGIAN 1)

PRAKTIKUM PEMROGRAMAN LANJUT MODUL 1

Array Multidimensi. Pemrograman Dasar. Java

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA FAKULTAS ILMU KOMPUTER UNIVERSITAS BRAWIJAYA

KUM 3 IMPLEMENTASI LIST

IKG2I4 / Software Project I

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 4 CONTROL FLOW STATEMENT

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

Modul Praktikum 4 Pemograman Berorientasi Objek

Array Sebagai Parameter Method

BAB 1 KONSEP DASAR JAVA

Dasar Pemrograman Java

Pada akhir pembahasan, peserta diharapkan mampu untuk:

Struktur dan Kondisi Perulangan. Struktur Kondisi

6 Maret Structure of Java [Penyeleksian Kondisi]

Percabangan dan Perulangan

MODUL PRAKTIKUM TI014 STRUKTUR DATA Season 1

Transkripsi:

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

Pengenalan Heap Heap adalah struktur data dengan konsep Binary Tree. Heap dibagi menjadi 2 jenis, yaitu max heap dan min heap. Max Heap adalah heap dengan konsep nilai parent node lebih besar sama dengan child node, kalau min heap parent node lebih kecil sama dengan child node. Heap mempunyai karakteristik sebagai berikut : Mempunyai ciri ciri Tree yang penuh ( complete ), dalam artian tree tersebut ter isi mulai dari kiri ke kanan dalam setiap garis / level. Walaupun begitu, untuk baris terakhir tidak perlu menjadi Tree yang penuh. Pada umumnya diimplementasikan menggunakan Array. Setiap node pada Heap harus memenuhi kondisi atau sifat dari Heap, yaitu parent node lebih besar daripada child node.

Implementasi Heap Seperti yang sudah dijelaskan sebelumnya bahwa Heap biasanya diimplementasikan menggunakan array (fixed size atau dynamic array), maka dari itu elemen pertama pada array (index 1) akan menjadi root dan 2 elemen selanjutnya akan menjadi child dari elemen pertama dan empat elemen selanjutnya akan menjadi child dari 2 elemen sebelumnya. maka node yang ada pada posisi n akan mempunyai posisi child pada 2n dan 2n + 1 dalam suatu array. Jika kita ingin mencari parent node dari node n, maka rumusnya adalah n/2 lalu dibulatkan kebawah, contohnya: jika kita ingin mencari child dari node index ke 2, maka : n = 2 child1 = 2n = 4 child2 = 2n+1 = 5 jika kita ingin mencari parent node dari node index ke 5, maka: n = 5 parent = 5 / 2 = 2 // dibulatkan kebawah Note : index array dalam kontes di atas dimulai dari 1, jika diimplementasikan pada java code hanya tinggal dikurangi 1 ( 1) pada rumus diatas. Weakly Ordered Jika dibandingkan dengan BST (Binary Search Tree) yang setiap meng inputkan Node selalu dibandingkan dengan Node node yang lain yaitu Node kiri harus lebih kecil daripada Node kanan, Heap hanya mempunyai prinsip yaitu parent node harus lebih besar daripada child node. Basic Operation find max (max heap) or find min (min heap) hanya untuk menemukan node maksimal atau minimal pada suatu heap yang mana adalah root dari Heap, find max atau find min tergantung pada jenis Heap yang dipakai. jika pada mad heap lalu kita ingin find min maka hanya perlu dengan konsep searching pada array. insert menambahkan elamen atau node baru pada Heap. remove menghapus root node, dalam konteks ini heap hanya bisa menghapus root node. trickleup membandingkan dan memindahkan node terakhir dengan parent node agar parent node lebih besar daripada child node

trickledown membandingkan dan memindahkan node pertama / root node dengan child node agar parent node lebih besar daripada child node. Basic Variable Disini akan dijelaskan beberapa nama variable yang digunakan sebagai contoh untuk penjelasan selanjutnya heaparray : nama variabel array yang digunakan untuk menyimpan heap. maxsize : maksimal index dari array / maksimal panjang array yang digunakan untuk menyimpan heap. currentsize : Digunakan untuk mengetahui panjang array yang digunakan dalam heap.

Remove Remove / hapus dalam Heap berarti menghapus root dalam Tree tersebut, mudah kan? Masalahnya adalah apa yang akan terjadi setelah proses penghapusan node. Berikut adalah langkah langkah untuk menghapus elemen root. Hapus root node Pindah node terakhir ke root node. Pindah node tersebut sampai parent node lebih besar dari semua child node (trickledown). Dalam kode diatas method remove langsung menghapus / mengganti root dengan node paling terakhir this.heaparray[ this.currentsize].

Algoritma trickledown mengecek manakah dari kedua child node yang lebih besar, setelah mendapatkan node yang lebih besar, node tersebut akan dipindah atau dijadikan menjadi parent node.

Insert Menambahkan node sangatlah mudah, jika remove menggunakan trickledown, maka Insert menggunakan trickleup. Pertamanya insert kita harus menambahkan elemen pada index array terakhir, masalahnya adalah apa yg harus dilakukan setelah menambahkan di index terakhir, apa yang harus dilakukan jika node baru mempunyai nilai lebih besar daripada parent node? berikut adalah gambaran jalannya proses insert dari Heap.

Dalam kode diatas node baru newnode langsung dimasukkan pada array yang index terakhir this.heaparray[this.currentsize]. Setelah itu langsung melakukan algoritma trickleup dengan parameter this.currentsize++, dimana this.currentsize++ adalah size setalah elemen baru. TrickleUp adalah algoritma yang lebih mudah, karena kita hanya perlu membandingkan satu node saja, yaitu parent node. TrickleDown perlu membandingkan kedua child node.

Change Setelah memahami konsep dari trickleup maupun trickledown, kita dapat dengan mudah mengimplementasikan algoritma change. Jika trickleup digunakan oleh insert dan trickledown digunakan oleh remove, kalau change ada kemungkinan kita menggunakan trickleup atau trickledown tetapi tidak mungkin kita menggunakan keduanya. Cara mengetahui algoritma mana yang akan kita buat adalah dengan membandingkan nilai dari node yang lama dan node yang baru. Berikut langkah langkah dari algoritma change diatas : meng inputkan index array yang akan diubah dan nilai yang akan dimasukkan. Jika index kurang dari 0 atau lebih dari currentsize, maka dianggap gagal lalu keluar dari method tersebut. Jika >= 0 dan < this.currentsize, setelah itu membandingkan nilai dari array ber index yang diinputkan dengan nilai yang baru. Jika nilai node lama lebih kecil daripada nilai yang baru maka melakukan algoritma trickleup. Selain itu / lebih besar daripada nilai baru maka akan melakukan algoritma trickledown.

Heap.java class Heap{ private Node [] heaparray; private int maxsize; private int currentsize; public Heap ( int max ){ this. maxsize = max; this. currentsize = 0; this. heaparray = new Node [ maxsize ]; public boolean isempty (){ return ( this. currentsize == 0 ); public boolean insert ( int key ){ if ( this. currentsize == this. maxsize) return false; Node newnode = new Node ( key ); this. heaparray [ this. currentsize ] = newnode; trickleup ( this. currentsize ++); return true; public void trickleup ( int index ){ int parent = ( index - 1 ) / 2; Node bottom = this. heaparray [ index ]; while ( index > 0 && this. heaparray [ parent ]. getkey () < bottom. getkey ()){ this. heaparray [ index ] = this. heaparray [ parent ]; index = parent; parent = ( parent - 1 )/ 2; this. heaparray [ index ] = bottom; public Node remove () { Node root = this. heaparray [-- this. currentsize ]; trickledown ( 0 ); return root; public void trickledown ( int index ){ int largerchild; Node top = this. heaparray [ index ]; while ( index < this. currentsize / 2 ){ int leftchild = 2 * index + 1; int rightchild = leftchild + 1; if ( rightchild < this. currentsize &&

else this. heaparray [ leftchild ]. getkey () < this. heaparray [ rightchild ]. getkey ()) largerchild = rightchild; largerchild = leftchild; if ( top. getkey () >= this. heaparray [ largerchild ]. getkey ()) break; this. heaparray [ index ] = this. heaparray [ largerchild ]; index = largerchild; this. heaparray [ index ] = top; public boolean change ( int index, int newvalue ){ if ( index < 0 index >= this. currentsize) return false; int oldvalue = this. heaparray [ index ]. getkey (); this. heaparray [ index ]. setkey ( newvalue ); if ( oldvalue < newvalue) trickleup ( index ); else trickledown ( index ); return true; public void displayheap (){ System. out. print ( "HeapArray:" ); for ( int m = 0 ; m < this. currentsize ; m ++) if ( this. heaparray [ m ]!= null) System. out. print ( heaparray [ m ]. getkey () + "" ); else System. out. print ( ".." ); System. out. println (); int nblanks = 32; int itemsperrow = 1; int column = 0; int j = 0; String dots = "..."; System. out. println ( dots + dots ); while ( this. currentsize > 0 ){ if ( column == 0) for ( int k = 0 ; k < nblanks ; k ++) System. out. print ( "" ); System. out. print ( this. heaparray [ j ]. getkey ());

if (++ j == this. currentsize) break; if (++ column == itemsperrow ){ nblanks /= 2; itemsperrow *= 2; column = 0; System. out. println (); else{ for ( int k = 0 ; k < nblanks * 2-2 ; k ++) System. out. print ( "" ); System. out. println ( "\n" + dots + dots );

Node.java class Node { private int key; public Node ( int key ){ this. key = key; public int getkey (){ return this. key; public void setkey ( int key ){ this. key = key; HeapApp.java import java. util. Scanner; class HeapApp{ public static void main ( String [] args ){ int value, value2; Heap theheap = new Heap ( 31 ); boolean success; theheap. insert ( 70 ); theheap. insert ( 40 ); theheap. insert ( 50 ); theheap. insert ( 20 ); theheap. insert ( 60 ); theheap. insert ( 100 ); theheap. insert ( 80 ); theheap. insert ( 30 ); theheap. insert ( 10 ); theheap. insert ( 90 ); while ( true ){ System. out. print ( "Enterfirstletterof" ); System. out. print ( "show, insert, remove, change:" ); int choice = getchar (); switch ( choice ){ case 's' : theheap. displayheap (); break; case 'i' :

System. out. print ( "Entervaluetoinsert:" ); value = getint (); success = theheap. insert ( value ); if (! success) System. out. println ( "Can'tinsert; heapfull" ); break; case 'r': if (! theheap. isempty ()) theheap. remove (); else System. out. println ( "Can'tremove; heapempty" ); break; case 'c': System. out. print ( "Entercurrentindexofitem:" ); value = getint (); System. out. print ( "Enternewkey:" ); value2 = getint (); success = theheap. change ( value, value2 ); if (! success) System. out. println ( "Invalidindex" ); break; default : System. out. println ( "Invalidentry\n" ); public static String getstring () { Scanner sc = new Scanner ( System. in ); String s = sc. nextline (); return s; public static char getchar () { String s = getstring (); return s. charat ( 0 ); public static int getint (){ String s = getstring (); return Integer. parseint ( s );

Jurnal Buatlah program Heap, lalu berikan komentar yang berisi kegunaan dari method tersebut. Lakukan pada setiap method yang kalian buat, contohnya : Jika kalian membuat method setkey dengan isi method seperti dibawah ini, maka komentarnya bisa seperti berikut. // untukmemberikannilaipadavariabelkey. public void setkey ( int key ){ this. key = key; NB: Jangan biasakan copy paste kodingan dari modul, punya teman, maupun sumber dari internet, lakukan minimal menulis ulang kodingan agar bisa lebih mudah mengerti dan setidaknya membiasakan menulis cepat. Jika jujur adalah hal yang kalian miliki saat ini, maka pertahankan, karena jujur adalah hal yang lebih mahal daripada ilmu yang tinggi Prodase Assistant