You are on page 1of 20

MAKALAH

Algoritma Pemrograman

DI SUSUN OLEH :
VIVIN DEVILIA 061730700524

Dosen : M. Miftakul Amin,S. Kom, M. Eng

POLITEKNIK NEGERI SRIWIJAYA

PALEMBANG

TAHUN AKADEMIK 2017 / 2018


Kata Pengantar
puji syukur kehadirat Tuhan yang maha Esa yang telah melimpahkan
segala rahmat dan segala rahim bagi kita semua, hingga akhirnya kami dapat
menyelesaikan Makalah tentang bahasa Pemrograman mata kuliah Teknologi
Informatika sebagai syarat mengikuti praktikum di Laboratorium Decision
Support System.
Kami sampaikan terima kasih pada Dosen Mata kuliah Teknologi
Informatika, Bapak Sriyanto ST.,MT. juga kepada para kakak Asisten Lab.DSS
selaku pembimbing dalam kegiatan praktikum teknologi informatika. Turut
kami sampaikan terima kasih dengan rasa bangga pada keluarga TI 2013 yang
turut menyelesaikan Seluruh Tugas pendahuluan dengan semangat juang
tanpa henti.
Saran dan kritik sangat kami harapkan untuk lebih baiknya karya
Makalah kami kedepannya nanti.
KATA PENGANTAR................................................................................. i
DAFTAR ISI............................................................................................. ii
BAB 1 PENDAHULUAN
1.1 Latar belakang....................................................................................... 1

BAB 2 PEMBAHASAN
2.1 Definisi........................................................................................ .......... 2

2.2 Rancangan dalam bentuk (flowcart/kode semu/notasi aloritma)......... 3

2.3 Contoh program.................................................................................... 4

2.4 Studi kasus.................................................................................. .......... 5

BAB 3 PENUTUP
3.1 Kesimpulan............................................................................................ 6

3.2 Saran...................................................................................................... 7

DAFTAR PUSTAKA................................................................................................ iii


BAB 1
PENDAHULUAN

1.1 LATAR BELAKANG


Untuk memecahkn masalah pengurutan dalam pembangunan suatu
program aplikasi,dibutuhkan algoritma pengurutan. Di dalam bidang teknik
infirmatik terdapat banyak sekali jenis-jenis algoritma pengurutan yng dapat
dapat digunakan untuk memecahkan masalah pengurutan. Pegrutan data (data
sorting) merupakan bagian dari pengolahan ata informasi. Data data-data yang
telah di depat, ada kalanya data tersebut harus diurutkann terlebih dahulu
berdasarkan aturan yang lebih dulu ditentukan. Berdasrakan nilai maupun
alpabet misalnya, metode-metode pengurutan data pun ada berbagai jenis mulai
dari binary sortinsertion sort,merge sort,hep sort,dll. Penggunaan metode mana
yang akan di pakai nanti nya tergatung dari jenis maupun kualitas data yang
diolah. Heap sort,algoritma pengurutan,merupakan salah satu metode
pengurutan yang sering digunakan. Memulai jurnal ini akan dibahas teknik
pencarian ini besrta kelebihan dan kekurangan.oleh karena itu, teknik untuk
memilih algoritma pengurutan yang tepat,sesuai degan kebutuhan,dan mngjus
sangat diperlukan karena masing-masing algoritma penggurutan memiliki
karakteristik yang berbeda-beda. Heao sort merupakan salah satu contoh
algoritma pengurutn yang memiliki kompleksitas waktu asimptotik terbauk
serta menerapkn teknik yang unik/khas di dalam memecahkan masalah
pengurutan,yaitu dangan mengunakan heap sort.
BAB 2
PEMBAHASAN
2.1 Definisi heap sort
Heap sort adalah sebuah metode sorting (pengurutan) angka pada sebuah
array dengan cara menyerupai binary tree, yaitu dengan cara memvisualisasikan
sebuah array menjadi sebuah binary tree yang nantinya pada binary tree tersebut
nilai pada masing-masing index array akan diurutkan. Pada heap sort terdapat 3
bagian yaitu Node, Edge, dan leaf dimana node itu adalah setiap index yang
berada pada array, edge adalah garis yang menghubungkan tiap node dan leaf
adalah setiap node yang tidak memiliki child node (node turunan). Selain itu
juga ada yang bernama root yaitu node awal pada sebuah heap, berikut adalah
ilustrasi dari bagian yang dimiliki oleh heap :

Heap tree terbagi menjadi 2 jenis yaitu Max-Heap dan Min-Heap, dimana
max-heap adalah kondisi heap tree yang memiliki nilai tertinggi berada di node
root dan setiap child node memiliki nilai yang lebih kecil dari nilai yang dimiliki
parent nodenya. Sedangkan pada min-heap adalah kondisi kebalikan dengan
max-heap, pada min-heap nilai terkecil berada di node root dan setiap child node
memiliki nilai yang lebih besar dari nilai yang dimiliki parent nodenya. Pada
metode heap sort jenis heap tree yang digunakan adalah Max-Heap.

Dan untuk memvisualisasikan sebuah array menjadi sebuah heap tree adalah
dengan cara mencari node root terlebih dahulu yaitu node pertama node pertama
sebuah heap tree adalah index pertama di array yaitu index 0 akan tetapi pada
heap tree node awal berada di posisi 1 berbeda dengan array yang memiliki index
awal yaitu index 0. Setelah node root telah ditemukan maka sekarang tinggal
mencari child node dari node root dan child node terbagi menjadi 2 yaitu left child
dan right child dan untuk mencari left child, right child, dan parent digunakan
rumus sebagai berikut :
 Left Child : 2i (Contoh : Left child dari 1 adalah 2 x 1 = 2)
 Right Child : 2i + 1 (Contoh : Right Child dari 1 adalah (2 x 1) + 1)= 3
 Parent : └ i/2 ┘ (Contoh : Parent dari 3 adalah 3 / 2 = 1 )
NB : Untuk i adalah posisi node yang ingin dicari left/right childnya atau parent
nodenya dan untuk lambing (└ ┘) adalah floor yaitu pembulatan kebawah missal
3 / 2 = 1,5 dibulatkan kebawah menjadi 1. Berikut adalah contoh cara
memvisualisasikan sebuh array menjadi sebuah heap tree :
Contoh : Kita memiliki sebuah aray A = 4, 1, 3, 2, 16, 9, 10, 14, 8, 7. Dan untuk
memvisualisasikan array tersebut gunakan rumus yang sudah disediakan dan
prosesnya akan terlihat seperti ini :

Dan hasil heap treenya adalah sebagai berikut :

Akan tetapi pada max-heap kondisi heap tree adalah node dengan nilai tertinggi
adalah root dan setiap parent node memiliki nilai yang lebih besar dari child
nodenya, dan heap tree yang terbentuk dari array A tidak memenuhi kondisi max-
heap oleh karena itu dibutuhkan metode untuk membuat heap tree tersebut
memiliki kondisi max-heap. Dalam metode sorting heap sort terdapat 2 metode
yang digunakan yaitu Build-Max-Heap dan Max-Heapfy, Build-Max-Heap
adalah metode yang digunakan untuk membuat heap tree diatas memenuhi
kondisi dari max-heap, berikut ini adalah ilustrasi penggunaan metode HeapSort,
Build-Max-Heap, dan Max-Heapfy pada sebuah heap tree :

HeapSort(A)
1. Deklarasi array A
2. Deklarasi Elemen
3. Input elemen array A
4. Input nilai-nilai elemen array A
5. Build-Max-Heap(A)
6. For i = Elemen – 1 selama i > 0
7. Tukar A[i] dengan A[0]
8. Elemen – 1
9. Max-Heapfy(A, 1)
10. End for

Dapat dilihat pada algoritma HeapSort terdapat 2 metode yang dipanggil yaitu Build
Max dan Max-Heapfy, dan algoritma dari Build-Max-heap adalah :

Build-Max-Heap(A)
1. For i = (Elemen - 1) / 2 selama i ≥ 0
2. Max-Heapfy(A, i)
3. End for

Pada metode -Max-Heap terdapat for looping yang membagi 2 jumlah elemen,
disini elemen – 1 karena pada array index awal adalah 0 sedangkan pada heap
tree adalah 1, lalu elemen dibagi 2 dan selama i ≥ 0 maka for looping akan terus
berajalan. Dan berikut adalah metode Max-Heapfy :

Max-Heapfy(A, i)
1. Deklarasi left = (i + 1) * 2 – 1
2. Deklarasi right = (i + 1) * 2
3. Deklarasi largest
4. if(left < elemen dan A[left] > A[i])
5. largest = left
6. end if
7. else
8. largest = i
9. end else
10. if(right < elemen dan A[right] > A[i])
11. largest = right
12. end if
13. if(largest != i)
14. Tukar A[i] dengan A[largest]
15. Max-Heapfy(A, i)
16. end if

Sebenarnya metode Max-Heapfy digunakan untuk mengkoreksi posisi dari


index yang dipilih apakah posisinya sudah memenuhi kondisi Max-Heap yaitu
tiap node parent harus memiliki nilai yang lebih tinggi dari nilai yang dimiliki
child nodenya, dan dengan metode Max-Heapfy pengaturan posisi node yang
memenuhi kondisi Max-Heap dapat dilakukan. Maka pada metode Build-Max-
Heap banyaknya elemen array dibagi menjadi 2 dan hasil bagianya itu adalah
lokasi index awal yang akan diperiksa apakah sudah memenuhi kondisi Max-
Heap atau belum dan proses pemeriksaan dilakukan oleh metode Max-Heapfy.
Berikut adalah ilustrasi penggunakan metode Build-Max-Heap :
Heap tree awal adalah seperti ini:

Karena pada heap tree jumlah node/elemen ada 10 (kalo di array adalah
9) maka jumlah elemen di bagi 2 (10 / 2 = 5 atau └ 9 / 2 ┘ = 4) maka
yang menjadi variabel i adalah 5 (untuk heap tree) atau 4 (untuk array)
maka ilustrasinya adalah sebagai berikut :

Karena node sebagai parent node sudah memiliki nilai lebih besar dari child
nodenya (node 10) maka pertukaran posisi tidak terjadi, selanjutnya adalah
lanjut ke index 4 :
Disini ternyata nilai yang dimiliki node 4 lebih kecil dari nilai yang dimiliki child
nodenya (node 8 dan 9) maka pertukaran posisi dilakukan dan hasilnya adalah
sebagai berikut :

Selanjutnya adalah node 3

Disni node 3 memiliki nilai yang lebih kecil dari child nodenya (node 6 dan 7)
maka pertukaran posisi dilakukan antara node 3 dan 7 karena antara node 3, 6,
dan 7 node 7 lah yang memiliki nilai yang paling tinggi. Maka hasilnya adalah
sebagai berikut :
Selanjutnya adalah node 2 :

Node 2 memiliki nilai yang lebih kecil dari child nodenya (node 4 dan 5) maka
pertukaran posisi dilakukan disini node 5 memiliki nilai yang paling tinggi maka
nilai pada index 2 bertukar posisi dengan nilai pada index 5. Maka hasilnya adalah
sebagai berikut :

Setelah itu posisi index berubah menjadi pada node 5 dan ternyata disini nilai
pada node 5 lebih kecil dari nilai yang berada di child nodenya yaitu node 10
maka perpindahan posisi kembali dilakukan dan hasilnya terlihat seperti ini

Selanjutnya posisi index berada di node 1 :


Disini nilai pada index 1 lebih kecil dbandingkan dengan nilai yang dimiliki child
nodenya (node 2 dan 3) maka nilai pada node 1 ditukar dengan nilai pada node 2
karena nilai pada node 2 adalah nilai tertinggi dari nilai pada 1 dan 3 dan hasilnya
adalah :

Setelah pertukaran posisi sekarang posisi i ada di index 2 disini nilai pada index
2 lebih kecil dibandingkan nila yang dimiliki child nodenya (index 4 dan 5) maka
pertukaran posisi kembali terjadi disini index 4 memiliki nilai tertinggi maka nilai
pada indx i ditukar dengan nilai pada index 4 dan hasilnya adalah sebagai berikut:

Setelah proses tukar posisi selesai maka posisi i adalah di node 4 akan tetapi disini
kembali nilai pada index i lebih kecil dibandingkan dengan nilai yang dimiliki
child nodenya (node 9), maka nilai pada dex i ditukar dengan nilai pada index 9
dan hasilnya adalah sebagai berikut:
Sampai disini maka proes Build-Max-Heap telah selesai karena masing-masing
parent node memiliki nilai yang lebih besar dari child nodenya, yaitu seperti heap
tree berikut :

Setelah proses Build-Max-Heap telah selesai baru lah kita dapat menggunakan
metode HeapSort untuk mengurutkan nilai pada array A. Pada algoritma heapsort
setelah melakukan algoritma Build-Max-Heap nilai pada index terakhir i akan
ditukar dengan node 1 atau root selama i > 0 disini nilai 16 akan ditukar dengan
1 dan jumlah elemen akan dikurangi 1 akan tetapi setelah perkukaran posisi
dilakukan tree heap tidak memenuhi kondisi Max-Heap maka algoritma Max-
Heapfy digunakan dan ilustrasinya adalah sebagai berikut :

Sampai pada tahap ini nilai tertinggi sudah berada di index yang benar index
terakhir 10 pada heap tree dan 9 di array, langkah selanjutnya adalah mengulang
cara yang sama dengan fool looping selama i > 0. Berikut adalah ilustrasi
lengkapnya :
Maka setelah algoritma HeapSort dilakukan nilai-nilai pada array akan terurut
dari nilai terkecil sampai terbesar. A = 1, 2, 3, 4, 7, 8, 9, 10, 14, 16. Dan berikut
adalah flowchart untuk algoritma Heapsort
2.2 RANCANGAN DALAM BENTUK FLOWCHART

Flowchart atau bagan alir adalah skema/bagan (chart) yang menunjukkan


aliran (flow) di dalam suatu program secara logika. Flowchart merupakan alat
yang banyak digunakan untuk menggambarkan algoritma dalam bentuk notasi-
notasi tertentu. Flowchart merupakan gambar atau bagan yang memperlihatkan
urutan dan hubungan antar proses beserta pernyataannya. Gambaran ini
dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan
proses tertentu. Sedangkan antara proses digambarkan dengan garis
penghubung. Dengan menggunakan flowchart akan memudahkan kita untuk
melakukan pengecekan bagian-bagian yang terlupakan dalam analisis masalah.
Di samping itu. F l o w chart juga berguna sebagai fasilitas untuk berkomunikasi
antara pemrogram ya n g b e k e r ja d a l a m t i m s u a t u p r o ye k .
Simbol dan Notasi Flowchart

Dipakai sebagai alat Bantu menggambarkan proses di dalam program.


Dan dibagi menjadi tiga kelompok :

♦ Flow Direction Symbols ♦

dipakai untuk menggabungkan antara symbol yang satu dengan symbol


lainnya

Symbol Off-line Connector ( Simbol untuk keluar/masuk


prosedure atau proses dalam lembar/halaman yang lain)

Symbol Connector (Simbol untuk keluar/masuk prosedur atau


proses dalam lembar/halaman yang sama)

♦ Processing symbols ♦

Menunjukkan jenis operasi pengolahan dalam suatu prosedur

Symbol Process (Simbol yang menunjukkan pengolahan yang


dilakukan oleh komputer)
Symbol Manual Operation (Simbol yang menunjukkan
pengolahan yang tidak dilakukanoleh komputer)

Symbol Decision (Simbol untuk kondisi yang akan


menghasilkan beberapa kemungkinan jawaban/aksi)

Symbol Predefined Process (Simbol untuk mempersiapkan


penyimpanan yang akan digunakan sebagai tempat pengolahan di
dalam storage)

Symbol Terminal (Simbol untuk permulaan atau akhir dari


suatu program)-

Symbol Off-line Storage (Simbol yang menunjukkan bahwa data


di dalam symbol ini akan disimpan)
-

Symbol Manual Input (Simbol untuk pemasukan data secara

manual on-line keyboard)

Symbol Keying Operation (Simbol operasi dengan


menggunakan mesin yang mempunyai keyboard)

♦ Input-output symbols ♦

menyatakan jenis peralatan yang digunakan sebagai media input atau


output.

Symbol input-output (Symbol yang menyatakan proses input


dan output tanpa tergantung dengan jenis peralatannya)

Symbol magnetic-tape unit (Symbol yang menyatakan input


berasal pita magnetic atau output disimpan ke pita magnetic)

- Symbol punched card (Symbol yang menyatakan input


berasal dari kartu atau output ditulis ke kartu)-
Symbol disk and on-line storage (Symbol untuk menyatakan
input berasal dari disk atau output disimpan ke disk)

Symbol display (Symbol yang menyatakan peralatan output


yang digunakan yaitu layar, plotter, printer, dan sebagainya)

Symbol dokumen (symbol yang menyatakan input berasal dari


dokumen dalam bentuk kertas atau output dicetak ke kertas

2.3 Contoh Algoritma Heap Sort

Pseudocode:
Judul: program_heap_sort
Deklarasi: if (largest != i) {
Integer= A[100], i, length, le, ri, heapsize, largest exchange A[i] <-> A[largest]
Deskripsi: Heapify(A, largest)
Heapsort(A) { }
BuildHeap(A) }
for i <- length(A) downto 2 {
exchange A[1] <-> A[i]
heapsize <- heapsize -1
Heapify(A, 1)
}
BuildHeap(A) {
heapsize <- length(A)
for i <- floor( length/2 ) downto 1
Heapify(A, i)
}
Heapify(A, i) {
le <- left(i)
ri <- right(i)
if (le<=heapsize) and (A[le]>A[i])
largest <- le
Else
largest <- i
if (ri<=heapsize) and (A[ri]>A[largest])
largest <- ri
2.4 Studi Kasus Heap Sort
[5]=1,4,5,3,2 = integer
Buatlah array A[5] dalam MAX HEAP Tree!
Solusi

Pada gambar 1, angka 1 merupakan orangtua dan angka 4 merupakan


anaknya. Pada heap tree max heap, nilai orangtua ≥ nilai anaknya. Karena pada
gambar 1 nilai orangtua < nilai anaknya maka nilai orangtua dengan nilai
anaknya di tukar. Sehingga heap tree pada gambar 1 berubah menjadi heap tree
pada gambar 2.
Pada gambar 2, angka 4 merupakan orangtua dan angka 5 merupakan
anaknya. Pada heap tree max heap, nilai orangtua ≥ nilai anaknya. Karena pada
gambar 2 nilai orangtua < nilai anaknya maka nilai orangtua dengan nilai
anaknya di tukar. Sehingga heap tree pada gambar 2 berubah menjadi heap tree
pada gambar 3.
Pada gambar 3, angka 1 merupakan orangtua dan angka 3 merupakan
anaknya. Pada heap tree max heap, nilai orangtua ≥ nilai anaknya. Karena pada
gambar 3 nilai orangtua < nilai anaknya maka nilai orangtua dengan nilai
anaknya di tukar. Sehingga heap tree pada gambar 3 berubah menjadi heap tree
pada gambar 4.
Pada gambar 4, angka 3 merupakan orangtua dan angka 2 merupakan
anaknya. Pada heap tree max heap, nilai orangtua ≥ nilai anaknya. Karena pada
gambar 4 nilai orangtua ≥ nilai anaknya maka nilai orangtua dengan nilai
anaknya tidak di tukar. Sehingga heap tree pada gambar 4 tidak berubah
(gambar 5)
BAB III
KESIMPULAN DAN SARAN
3.1 Kesimpulan
Algoritma pengurutan heap sort dapat digunakan untuk menyelesaikan
masalah-masalah pengurutan dala membangun suatu program aplikasi dengan
mangkus. Keunggulan algoritma pengurtn heap sort terletak padda
kompleksitas waktu asimptotiknya yang sangat baik. Meskipun leih lambat dari
algoritma pengurtan data yang lain, algoritma heap sort memiliki kelebihan
ketika menangani data dalam skala yang besar/massive. Karena akgoritma ini
memiliki kelebihan tidak menggunakan banyak tabel, tetapi hanya satu tabel
yang dipakai untuk menyimpan hasil dari pengurutan tersebut.
3.2 Saran
Saya mengharapkan agar kita semua mampu memahami pengurutan
data meggunakan metode heap sort dan tanpa merasa bngung mengenai
bagaimana cara atau langkah awal pngurutan ny. Serta penulis mengharapkan
semoga makalah ini menjadi pedoman atau bahkan wawasan dan
pengetahuan mahasiswa maupun pembaca pasa umumnya
DAFTAR PUSTAKA

http://loserbombti.blogspot.co.id/2014/07/algoritma-heap-sort.html
http://serilmu.blogspot.co.id/2015/02/pengertian-flowchart-dan-
simbol.htmlhttp://alitdwipayana.blogspot.co.id/2016/10/algoritma-dan-contoh-kasus-
heapsort.html

You might also like