“Algoritma Greedy”
DISUSUN OLEH :
Nilai :
ii
DAFTAR ISI
iii
BAB I
PENDAHULUAN
1
Agar suatu perintah dapat dilaksanakan oleh komputer, algoritma harus
ditulis dalam notasi bahasa pemrograman sehingga dinamakan program. Banyak
cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun, jangan
beranggapan algoritma selalu identik dengan ilmu komputer saja. Dalam
kehidupan sehari-haripun banyak terdapat proses yang dinyatakan dalam suatu
algoritma. Cara-cara membuat kue atau masakan yang dinyatakan dalam suatu
resep juga dapat disebut sebagai algoritma. Pada setiap resep selalu ada urutan
langkah-langkah membuat masakan. Bila langkah-langkahnya tidak logis, tidak
dapat dihasilkan masakan yang diinginkan. Dari uraian tersebut dapat dilihat
besarnya peranan algoritma.
2
BAB II
TINJAUAN KEPUSTAKAAN
3
dan minimasi. Pada penelitian ini, algoritma greedy yang digunakan menerapkan
pendekatan maksimasi. Algoritma Greedy adalah algoritma yang memecahkan
masalah langkah per langkah. Pada setiap langkah terdapat banyak pilihan yang
perlu dieksplorasi. Persoalan optimalisasi dalam konteks algoritma greedy disusun
oleh elemen-elemen sebagai berikut:
1. Himpunan Kandidat, C.
Himpunan ini berisi elemen-elemen pembentuk solusi. Pada setiap
langkah, satu buah kandidat diambil dari himpunannya.
2. Himpunan Solusi, S
Himpunan ini berisi kandidat-kandidat yang terpilih sebagai solusi
persoalan. Dengan kata lain, himpunan solusi adalah himpunan bagian dari
himpunan kandidat.
3. Fungsi Seleksi (Selection Function)
Fungsi ini dinyatakan dengan predikat seleksi. Merupakan fungsi yang
pada setiap langkah memilih kandidat yang paling memungkinkan
mencapai solusi optimal. Kandidat yang sudah dipilih pada suatu langkah
tidak pernah dipertimbangkan lagi pada langkah selanjutnya.
4. Fungsi Kelayakan (Feasible)
Fungsi ini dinyatakan dengan predikat layak. Fungsi kelayakan ini
merupakan fungsi yang memeriksa apakah suatu kandidat yang telah
dipilih dapat memberikan solusi yang layak, yakni kandidat tersebut
bersama-sama dengan himpunan solusi yang sudah terbentuk tidak
melanggar batasan/aturan (constraints) yang ada. Kandidat yang layak
dimasukkan ke dalam himpunan solusi, sedangkan yang tidak layak
dibuang dan tidak pernah dipertimbangkan lagi.
5. Fungsi Obyektif
Fungsi obyektif ini merupakan sebuah fungsi yang memaksimumkan atau
meminimumkan nilai solusi. Dengan kata lain, algoritma greedy
melibatkan pencarian sebuah himpunan bagian, S, dari himpunan
kandidat, C yang dalam hal ini, S harus memenuhi beberapa kriteria yang
ditentukan, yaitu menyatakan suatu solusi dan S dioptimasi oleh fungsi
4
obyektif. Ada kalanya solusi optimum global yang diperoleh dari
algoritma greedy yang diharapkan sebagai solusi optimum dari persoalan,
belum tentu merupakan solusi optimum (terbaik), tetapi solusi sub-
optimum atau pseudo-optimum. Hal ini dikarenakan algoritma greedy
tidak beroperasi secara menyeluruh terhadap semua alternatif solusi yang
ada dan terdapat beberapa fungsi seleksi yang berbeda, yaitu jika fungsi
seleksi tidak identik dengan fungsi obyektif karena fungsi seleksi biasanya
didasarkan pada fungsi obyektif. Sehingga harus dipilih fungsi yang tepat
jika menginginkan algoritma menghasilkan solusi optimal atau nilai yang
optimum. Jadi, pada sebagian masalah algoritma greedy tidak selalu
berhasil memberikan solusi yang benar-benar optimum, tetapi algoritma
greedy pasti memberikan solusi yang mendekati (approximation) nilai
optimum. jika jawaban terbaik mutlak tidak diperlukan, maka algoritma
greedy sering berguna untuk menghasilkan solusi cukup baik
(approximation), daripada menggunakan algoritma yang lebih rumit untuk
menghasilkan solusi yang terbaik. Bila algoritma greedy optimum, maka
keoptimalannya itu dapat dibuktikan secara matematis (Angga & Munir,
2012).
Pengodean Huffman adalah salah satu metode kompresi dasar, yang telah
terbukti bermanfaat dalam standar kompresi gambar dan video. Saat menerapkan
teknik penyandian Huffman pada Gambar, simbol sumber dapat berupa intensitas
piksel Gambar, atau output dari fungsi pemetaan intensitas. Kode Huffman
sebagai algoritma kompresi data menggunakan teknik greedy untuk
implementasinya. Algoritma didasarkan pada frekuensi karakter yang muncul
dalam file. Kita tahu bahwa file kita disimpan sebagai kode biner di komputer dan
setiap karakter dari file tersebut diberi kode karakter biner dan biasanya, kode
karakter ini memiliki panjang tetap untuk karakter yang berbeda.
Algoritma Huffman menggunakan prinsip pengkodean yang mirip dengan
kode Morse, yaitu tiap karakter (simbol) dikodekan hanya dengan rangkaian
5
beberapa bit, dimana karakter yang sering muncul dikodekan dengan rangkaian
bit yang pendek dan karakter yang jarang muncul dikodekan dengan rangkaian bit
yang lebih panjang. Berdasarkan tipe peta kode yang digunakan untuk mengubah
pesan awal (isi data yang dimasukkan) menjadi sekumpulan code-word, algoritma
Huffman termasuk ke dalam kelas algoritma yang menggunakan metode statik,
yaitu metode yang selalu menggunakan peta kode yang sama. Metode ini
membutuhkan dua fase (two-phase), yaitu fase pertama untuk menghitung
probabilitas kemunculan tiap simbol dan menentukan peta kodenya, dan fase
kedua untuk mengubah pesan menjadi kumpulan kode yang akan ditransmisikan.
Kode Huffman sebagai algoritma kompresi data menggunakan teknik
greedy untuk implementasinya. Algoritma didasarkan pada frekuensi karakter
yang muncul dalam file. Kita tahu bahwa file kita disimpan sebagai kode biner di
komputer dan setiap karakter dari file tersebut diberi kode karakter biner dan
biasanya, kode karakter ini memiliki panjang tetap untuk karakter yang berbeda.
Kode Awalan, berarti kode (urutan bit) ditetapkan sedemikian rupa sehingga kode
yang ditetapkan untuk satu karakter bukan awalan kode yang ditugaskan untuk
karakter lain. Ini adalah bagaimana Huffman Coding memastikan bahwa tidak ada
ambiguitas ketika decoding bitstream yang dihasilkan. Jika diketahui ada empat
karakter a, b, c dan d, dan kode panjang variabel yang sesuai adalah 00, 01, 0 dan
1. Pengkodean ini mengarah pada ambiguitas karena kode yang ditugaskan ke c
adalah awalan dari kode yang ditugaskan ke a dan b. Jika bit stream terkompresi
adalah 0001, output de-kompresi mungkin "cccd" atau "ccb" atau "acd" atau "ab".
6
3. Buat simpul internal baru dengan frekuensi yang sama dengan jumlah dari
dua node frekuensi. Jadikan simpul yang diekstraksi pertama sebagai anak
kirinya dan simpul yang diekstrak lainnya sebagai anak kanannya.
Tambahkan simpul ini ke tumpukan min.
4. Ulangi langkah # 2 dan # 3 hingga heap hanya berisi satu node. Node yang
tersisa adalah node root dan pohon sudah selesai.
7
yang melambangkan bilangan 100 sebanyak enam kali diikuti simbol yang
melambangkan bilangan 10 sebanyak dua kali, kemudian simbol yang
melambangkan bilangan 1 sebanyak dua kali.
Algoritma yang paling mendasar dalam memecahkan masalah pecahan
Mesir ini adalah algoritma greedy, dimana dalam setiap langkah kita mencari unit
pecahan terbesar yang tidak lebih dari bilangan yang terisisa. Algoritma ini telah
cukup banyak dikembangkan, termasuk salah satunya yang disebut reverse greedy
algorithm. Namun algoritma ini memiliki masalah dalam memisahkan unit-unit
pecahan yang sama, yang kemudian digunakan algoritma conflict resolution untuk
memecahkan masalah ini.( Olsen, A.L.1994)
Permasalahan muncul ketika dibutuhkan penghitungan yang melibatkan
pecahan. Untuk menyatakan pecahan, bangsa Mesir Kuno menambahkan satu
simbol yang berbentuk seperti mulut di atas simbol angka untuk membaliknya.
Jadi, untuk menyatakan bilangan 1/3 cukup dilakukan dengan menambahkan
simbol “mulut” tersebut di atas simbol yang menyatakan bilangan 3. Perkecualian
ada pada pecahan-pecahan 2/3 dan 3/4 yang memiliki simbol sendiri (Fithria, N.
2008)
Algoritma greedy merupakan salah satu dari sekian banyak algoritma yang
sering di pakai dalam implementasi sebuah system atau program yang
menyangkut mengenai pencarian“optimasi”. Dalam kehidupan sehari hari, banyak
terdapat persoalan yang menuntut pencarian solusi optimum. Persoalan tersebut
dinamakan persoalan optimasi (optimization Problems). Persoalan Optimasi
adalah persoalan yang tidak hanya mencari sekedar solusi, tetapi mencari solusi
terbaik. (G. I. Sampurno, E. Sugiharti, dan A. Alamsyah.2018)
Algoritma greedy merupakan algoritma yang digunakan untuk
menemukan solusi optimal untuk masalah yang diberikan. Algoritma greedy
bekerja dengan menemukan solusi optimal secara lokal (solusi optimal untuk
sebagian masalah) pada setiap bagian sehingga menunjukkan solusi optimal
Global dapat ditemukan.
8
Dalam masalah ini, kita akan menggunakan algoritma greedy untuk
menemukan jumlah minimum koin /atau pengembalian coin yang dapat
disesuaikan dengan jumlah yang diberikan. Untuk ini, kita akan
mempertimbangkan semua koin atau catatan yang valid, yaitu denominasi {1, 2,
5, 10, 20, 50, 100, 200, 500, 2000}. Dan kita perlu mengembalikan jumlah
koin/uang kertas ini yang kita butuhkan untuk membayar jumlahnya.
Algoritma Greedy ini hampir sama dengan metode exhaustive search dan
brute force, dimana Exhaustive search ialah teknik pencarian solusi secara brute
force pada masalah yang melibatkan pencarian elemen dengan sifat khusus,
biasanya di antara objek-objek kombinatorik seperti permutasi, kombinasi, atau
himpunan bagian dari sebuah himpunan. Berdasarkan definisi ini, maka
exhaustive search adalah brute force juga. Oleh karena itu exhaustive search
adalah salah satu implementasi dalam brute force dalam kasus pencarian.
Secara Harfiah Greedy artinya rakus atau tamak, sifat yang berkonotasi
negatif. Orang yang memiliki sifat ini akan mengambil sebanyak mungkin atau
mengambil ang paling bagus atau yang paling mahal. Sesuai dengan arti tersebut,
“Prinsip Greedy adalah take what you can get now”. Oleh karena itu, Algoritma
Greedy merupakan algoritma yang lazim untuk memecahkan persoalan optimasi
meskipun hasilnya tidak selalu merupakan solusi yang optimum. Prinsip utama
dari algoritma ini adalah mengambil sebanyak mungkin apa yang dapat diperoleh
sekarang. ( Zhao, J., Huang, T., Pang, F. dan Liu, Y.2009)
9
BAB III
LANGKAH – LANGKAH PERCOBAAN
3.1 Peralatan
a. Laptop atau PC yang dilengkapi dengan sound card.
b. Sistem Operasi Windows
3.2 Bahan
a. Software Dev C++
10
BAB IV
PEMBAHASAN DAN HASIL PRAKTIKUM
11
12
13
14
Output :
Pembahasan :
Pada percobaan Pada percobaan ini, Masukan (input) melalui keyboard.
Setiap inputan akan dicatat sebagai karakter dan nilai. Kemudian pogram akan
mengsortir inputan yang telah di masukkan menjadi yang terkecil sampai terbesar.
Kemudian karakter digantu menjadi kode biner, Selanjutnya, kode bit tersebut
disimpan dari karakter yang nilai terbesar. Cara menyimpan data jenis karakter
adalah dengan mengurutkan data jenis karakter dari yang frekuensinya paling
banyak sampai ke yang paling sedikit.
Tracer :
Inputan Keyboard
num = 4
arr[0] = A, arr[1] = B, arr[2] =C , arr[3] =D
freq[0] = 5, freq[1] = 4, freq[2] =13 , freq[3] =2
15
A A<Total Arr[i] Freq[i] A+A=1
0 0<4T arr[0] = A freq[0] = 5 a=0+1=1
1 1< 4 T arr[1] = B freq[0] = 4 a=1+1=2
2 2<4T arr[2] = C freq[0] = 13 a=2+1=3
3 3<4T arr[3] = D freq[0] = 2 a=3+1=4
4 4<4T - - -
16
Output :
Pembahasan :
Tracer :
Input = nr = 7; dr = 17
17
4.3 Koin–Koin Pecahan Minimum
Input :
Output :
Pembahasan :
Pada percobaan ini nilai yang diinput yaitu 32. Kita menggunakan
algoritma greedy untuk menemukan jumlah minimum koin /atau pengembalian
coin yang dapat disesuaikan dengan jumlah yang diberikan. Untuk ini, kita akan
mempertimbangkan semua koin atau catatan yang valid. Dan kita perlu
mengembalikan jumlah koin/uang kertas ini yang kita butuhkan untuk membayar
jumlahnya. Untuk menyelesaikan masalah tersebut maka kita akan menemukan
denominasi terbesar yang dapat digunakan. selanjutnya kita akan mengurangi
denominasi terbesar dari jumlah dan lagi melakukan proses yang sama sampai
jumlahnya menjadi nol.
18
Tracer :
N=5
V=32
0 >= 3(T) 20 1
1 >= 3(T) 10 2
2 >= 4 (T) 2 3
3 >= 3(T) - -
19
• Tugas
Input :
Output :
20
BAB V
SIMPULAN
5.1 Kesimpulan
21
REFERENSI
22