Anda di halaman 1dari 10

LAPORAN PRAKTIKUM

STRUKTUR DATA DAN ALGORITMA II

BINARY HEAP

DISUSUN OLEH :

AFIFAH NURLAILA

M0513004

ASISTEN : 1. DIAN SUPRABA (M0512012)

2. DWI PUTRI P (M0512015)

3. RIO PAHLEVY (M0512048)

4. RIZAL K. N. (M0512050)

JURUSAN INFORMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SEBELAS MARET

SURAKARTA

Kamis, 25 September 2014


BINARY HEAP

I. PRINT SCREEN SOURCE CODE


Output :
II. ANALISIS JALANNYA PROGRAM
Sebelum kita menganalisis program sorting dengan binary heap diatas, alangkah
lebih baiknya jika kita mengetahui konsep dasar dari binary heap terlebih dahulu.
Binary heap adalah sebuah binary tree yang memiliki priority queue dan element.
Ada 2 (dua) struktur utama dari binary heap yaitu :
1. Setiap level harus diisi mulai dari sebelah kiri. Jika sebelah kiri sudah full,
maka lanjut ke sebelah kanan.
2. Nilai node dari child harus lebih besar atau sama dengan parent-nya (tidak
peduli dengan tetangganya).
Operasi yang biasanya digunakan pada binary heap yaitu :
 Delete-min  Operasi ini digunakan untuk menghapus nilai terkecil dari node. Pada
operasi ini terdapat method percolatingDown. Method percolatingDown tersebut
digunakan untuk merekonstruksi tree menjadi sesuai dengan apa yang telah menjadi
patokan binary heap.
 Insert  Operasi ini digunakan untuk menginputkan data ke dalam tree.
 Building a heap in O(n) time  Operasi ini digunakan untuk membuat suatu heap yang
sesuai dengan struktur datanya dengan kompleksitas waktunya ada O(n).
 Heap Sort  Operasi ini digunakan untuk mengurutkan node dengan algoritma binary
heap. Pada operasi ini juga terdapat dua method yaitu percolatingDown dan BuildHeap.
Type data untuk heap adalah array. Sehingga untuk merepresentasikan child,
parent, dan segolongannya yang lain ke dalam program, dilakukan dengan cara :
- Parent (i)  nilai dari array [i/2]
- Left (i)  nilai dari array [2i]
- Right (i)  nilai dari array [2i+1]
Sedangkan untuk mengecek apakah suatu node memiliki child left ataukah child
right, menggunakan code berikut :
~ Untuk child left  array [2i] <= size. Nilai dari size merupakan nilai dari indeksnya.
~ Untuk child right  array [2i+1] <= size
Kemudian, setelah mengetahui konsep dasar dari binary heap, mari kita analisis
bersama program sorting binary heap yang telah saya buat, yaitu sebagai berikut.

Baris pertama tersebut menyatakan letak kelas Heap berada dalam package heap.
Dalam satu package dapat menyimpan berbagai class maupun interface.
Baris ketiga tersebut menyatakan operasi pada java yang diimport ke dalam
program. Operasi yang dimaksud yaitu Arrays. Apabila kita tidak mengimportkan operasi
ini, maka Arrays tidak akan dapat digunakan dalam program.

Baris kelima sampai dengan kesembilan diatas merupakan suatu comment. Hal ini
ditandai dengan tanda awal /* dan tanda akhirnya */. Comment ini tidak akan diproses
oleh program. Ia hanya digunakan sebagai penjelas program untuk memudahkan user
memahami program tersebut.

Baris kesepuluh ini menyatakan nama class yang dibuat yaitu Heap dengan tipe
data public. Public berarti bahwa class ini dapat diakses oleh semua kelas lain asalkan
masih dalam package yang sama. Karena binary heap masih merupakan suatu tree maka
harus digunakan simbol khusus yang menyatakan bahwa dia adalah tree. Untuk itu
digunakanlah AnyTipe sebagai tandanya. Selain AnyTipe, simbol lain yang sering
digunakan yaitu T. Extends menyatakan bahwa class ini dapat mewarisi statement-
statement yang terdapat pada class Comparable.

Baris diatas merupakan suatu pendeklarasian variabel-variabel yang akan


digunakan pada program ini. Diantaranya yaitu CAPACITY dengan tipe data integer yang
tipe aksesnya yaitu private static final. Private static final merupakan suatu static
initializer. Static initializer adalah suatu blok yang berada di dalam class dan dijalankan
ketika suatu class di-load. Biasanya static initializer ini digunakan untuk melakukan
inisialisasi suatu variable constant. SIZE tipe datanya juga integer dengan tipe aksesnya
private. Sedangkan HEAP datanya merupakan array dari AnyType yang tipe aksesnya
private. Tipe akses private hanya dapat digunakan untuk method-method yang berada
dalam satu kelas yang sama.
Baris diatas merupakan suatu konstruktor default. Konstruktor memiliki nama yang
sama dengan classnya. Isi dari konstruktor yaitu size dan heap. Size diinisialisasikan
dengan nilai 0. Sedangkan heap dideklarasikan dengan AnyType[] new
Comparable[CAPACITY].

Sedangkan untuk baris kedua puluh tujuh sampai tiga puluh empat merupakan
sebuah konstruktor yang sudah diisi oleh parameter AnyType[] array. Didalam konstruktor
ini, size dirubah nilainya menjadi panjang dari suatu array. Untuk heapnya dirubah
nilainya dengan AnyType[] new Comparable[panjang array ditambah 1].

Arraycopy merupakan suatu method yang digunakan untuk menyalin nilai elemen
larik. Arraycopy berada pada kelas System yang ada di paket java.lang. namun kelas
System tersebut tidak perlu diimpor karena secara otomatis akan diimpor oleh kompiler
Java saat digunakan. Sintak metoda arraycopy dari kelas System yaitu :

arraycopy(larikSumber, posisi-sumber, larikTarget, posisi-target, jumlah-elemen);

buildHeap merupakan suatu method yang akan dipanggil untuk mengoperasikan


node dalam heap.

Baris diatas menyatakan method dengan nama buildHeap dengan tipe data void
(tidak menghasilkan nilai kembalian) yang hanya dapat diakses oleh kelas yang sama
(karena private). Didalam method ini akan dijalankan perulangan for dengan k sebagai
variabelnya. Jika sesuai maka ia akan menjalankan method percolatingDown dengan
parameter k.

Baris tersebut menyatakan sebuah method dengan nama percolatingDown yang


bertipe data void (tidak menghasilkan nilai kembalian) dan hanya dapat diakses oleh kelas
yang sama saja. Selain itu pada method ini, terdapat code-code untuk me-percolating
down node. Maksudnya apabila node tidak sesuai dengan struktur binary heap, nodenya
akan diturunkan ke tempat yang sesuai.

Baris diatas merupakan sebuah method yang bernama heapSort dengan parameter
AnyType[] array. Tipe datanya void dan tipe aksesnya public. Method ini digunakan untuk
mensorting atau mengurutkan node.
Dengan cara :
1. Cari pathnya nilai yang mendekati node yang akan diinsert
2. Setelah mengetahui nodenya, pindahkan node yang akan diinsert ke node yang
kita cari pathnya tersebut
3. Lalu geser semua node dengan percolating down

Baris tersebut menyatakan method dengan nama isEmpty. isEmpty bertipe data
boolean sehingga menghasilkan kemungkinan true or false. Dapat diakses oleh semua
kelas dalam package yang sama. Method ini digunakan untuk mengecek apakah node
kosong ataukah tidak.

Baris kedelapan puluh sembilan tersebut menyatakan method dengan nama peek
yang datanya berasal dari AnyType dengan tipe akses public. Karena array pada java
dimulai dari 1 maka hasil kembaliannya menunjuk ke heap[1].

Baris diatas menyatakan method dengan nama deleteMin yang datanya berasal dari
AnyType dengan tipe data akses public.
Cara kerja dari deleteMin yaitu :
1. AnyType result = heap[0];  dijadikan sebagai rootnya terlebih dahulu untuk
memudahkan penghapusan
2. Kemudian tukar posisi root dengan last node
3. Selanjutnya kerjakan method percolatingdown
4. Lalu node minimal akan hilang (terhapus) secara sendirinya
Baris tersebut menyatakan method dengan nama insert berparameter AnyType x
yang bertipe data void dan dapat diakses oleh semua kelas dalam package yang sama. Cara
menginsertkan nodenya yaitu: dilihat terlebih dahulu apakah size=panjangnya heap -1.
Jika ia maka array akan menjadi dua kali lipatnya. Setelah itu dilakukanlah proses
percolating up. Yaitu node disisipkan keatas node-node yang lain hingga sesuai dengan
struktur binary heap.

Baris ke-117 sampai ke-121 menyatakan bahwa method dengan nama doubleSize
bertipe data void dan berdata akses private. Method ini digunakan untuk membuat panjang
array menjadi dua kali lipat panjang semula.

Baris diatas merupakan method dengan nama toString yang bertipe akses public
dan bertipe data String. Method ini akan menghasilkan Arrays.toString(heap).
Baris ke-127 sampai dengan baris ke-128 ini merupakan main class dari class
Heap. Main class ini digunakan untuk menjalankan program. Disini akan dihasilkan ke
layar monitor nilai dari array yang belum terurut dan nilai dari array yang telah diurutkan.
Untuk mengurutkan nilai array digunakanlah method heapSort. Pemanggilan method
heapSort tersebut menggunakan object tmp. Sehingga diawal dideklarasikan
Heap<Integer> tmp = new Heap<>(); Pembuatan object tmp menggunakan nama
classnya.

Array ke- 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Value 20 37 25 63 92 17 21 12 55 47 45 64 83 73

Arrays.copyOf digunakan untuk menyalin nilai elemen larik. Sehingga array a2


menampung nilai dari array a. Maka ketika Arrays memanggil toString(a2) outputnya
adalah . Kemudian untuk
mengurutkannya dipanggillah method heapSort oleh object tmp.

Sehingga :

Array ke- 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Value 12 17 20 21 25 37 45 47 55 63 64 73 83 92

Anda mungkin juga menyukai