LAPORAN TUGAS
Diajukan untuk memenuhi tugas matakuliah Analisis Algoritma
Dengan dosen Dwikeu Novi Asrika, S.Kom., M.Kom.
Disusun oleh :
10118229 - Ridwan Saleh Nugraha - IF6
UNIVERSITAS KOMPUTER INDONESIA
FAKULTAS TEKNIK DAN ILMU KOMPUTER
PROGRAM STUDI TEKNIK INFORMATIKA
BANDUNG
2021
Algoritma Greedy merupakan metode yang paling populer untuk memecahkan persoalan
optimasi (Munir, 2001). Dalam menyelesaikan permasalahan, algoritma Greedy melakukannya
secara bertahap (Brassard G, 1996). Tahap penyelesaiannya adalah:
a. Mengambil pilihan yang terbaik yang dapat diperoleh pada saat itu tanpa
memperhatikan konsekuensi ke depan.
b. Berharap bahwa dengan memilih optimum lokal pada setiap langkah akan
berakhir dengan optimum global.
Greedy, dalam bahasa Indonesia dapat diartikan sebaai rakus. Algoritma greedy ini disebut
rakus, karena algoritma greedy berbeda dengan brute force yang memilih salah satu pemecahan
masalah tebaik, algoritma greedy langsung melakukan pemecahan masalah saat itu pula tanpa
mempertimbangkan konsekuensi dari pemecahan masalah yang dimaksud. Prinsip utamanya
adalah, lakukan selagi bisa, atau lakukan apa yang kamu bisa sekarang. Algoritma greedy tidak
mempertimbangkan, namun langsung bertindak, sesuai dengan pemikiran logis yang muncul,
tanpa memikirkan konsekuensi atau dampak dari pemecahan masalah yang sedang dihadapi.
Kelebihan dari algoritam greedy:
Apabila kita melihat dari definisi dan pengertian algoritma greedy, maka bisa kita simpulkan
bahwa kelebihan dari algoritma greedy adalah cepat dalam bertindak alias fast response. Apabila
anda membutuhkan penyelesaian masalah secara instant dan juga cepat, algoritma greedy adalah
salah satu metode yang tepat. Algoritma greedy tidak membutuhkan waktu lama untuk
memikirkan opsi – opsi lain yang bisa dilakukan, serta tidak perlu mempertimbangkan baik buruk
serta konsekuensi dari apa yang diputuskan.
Kelemahan dari algoritma greedy:
Meskipun merupakan bentuk pemikiran pemecahan maslaah secara logis yagn cepat, namun
algoritma greedy ini memiliki kelemahan berupa hasil akhirnyayang tidak sebaik algoritma brute
force. Hal ini tentu saja disebabkan karena pemilihan opsi yang ditiadakan, sehhingga dapat
negative ataupun konsekuensi dari pemilihan keputusan tersebut tidak dapat dipertanggung
jawabkan secara penuh.
Bruce Force adalah sebuah pendekatan yang lempang (straightforward) untuk memecahkan
suatu masalah, biasanya didasarkan pada pernyataan masalah (problem statement) dan definisi
konsep yang dilibatkan (Munir, 2004).
Banyak yang mengatakan bahwa algoritma brute force merupakan jenis algoritma yang
sifatnya straight, lurus atau bisa juga disebut sebagai algoritma yang lempeng. Algoritma brute
force merupakan bentuk algoritma yang sangat kompleks, karena untuk dapat menyelesaikan
masalah dengan teknik straight forward atau lempeng ini, dibutuhkan banyak masukan dan juga
pertimbangan secara logis, sehingga dapat diperoleh sebuah keputusan pemecahan masalah yag
langsung mengacu atau menuju kepada hasil aygn diinginkan.
Algoritma brute force ini biasanya menggunakan pendekatan yang disarkan pada pernyataan
masalah atau problem statement, dan juga definisi konsep yang dilibatkan. Dalam
implementasinya, algoritma brute force ini membutuhkan sebuah cara yang jelas namun
sederhana.
Kelebihan algoritma brute force:
Karena merupakan sebuah algoritma yang memecahkan masalah secara jelas, dan melalui
banyak opini atau pilihan, maka algoritma brute force merupakan sebuah metode pemecahan
masalah logis yang memiliki kemampuan untuk memperoleh pemecahan masalah dengan baik.
Dengna mempertimbangan banyak opsi, metode algoritma brute force mampu untuk menyaring
satu dari sekian banyak solusi atau opsi yang ditawarkan,sehingga proses pemecahan masalah yang
dilakukan akan menjadi lebih baik dan juga lebih optimal. Hampir semua masalah yang
dipecahkan dengan menggunakan metode algoritma brute force ini berjalan dengan baik.
Kelemahan dari algoritma brute force:
Namun demikian, meskipun memiliki kelebihan berupa pemecahan masalah yang mampu
berjalan dengan baik dan juga sempurna, algoritma brute force sangat sulit untuk digunakan pada
kebutuhan pemecahan masalah yagn cepat. Hal ini disebabkan karena algoritma brute force
membutuhkan kumpulan banyak opsi terlebih dahulu sebulu dieksekusi. Hal ini membuat
pertimbangan dalam memilih opsi akan menjadi lebih lambat.
1. Knapsack
a. Algoritma Greedy
Strategi Algoritma Greedy
Untuk memilih objek yang akan dimasukkan ke dalam Knapsack, terdapat beberapa
strategi Greedy yang heuristik (Silvano, 1990) yaitu:
a. Greedy by profit
Knapsack diisi dengan objek yang mempunyai keuntungan terbesar pada setiap
tahap. Objek yang paling menguntungkan dipilih terlebih dahulu untuk
memaksimumkan keuntungan. Tahap pertama yang dilakukan adalah mengurutkan
secara menurun objek-objek berdasarkan profitnya. Kemudian baru diambil satu
per-satu objek yang dapat ditampung oleh Knapsack sampai Knapsack penuh atau
sudah tidak ada objek lagi yang dapat dimasukkan.
b. Greedy by weight
Knapsack diisi dengan objek yang mempunyai berat paling ringan pada setiap
tahap. Sebanyak mungkin objek dimasukkan ke dalam Knapsack untuk
memaksimumkan keuntungan. Tahap pertama yang dilakukan adalah mengurutkan
secara menaik objek-objek berdasarkan weight-nya. Kemudian baru diambil satu
per-satu objek yang dapat ditampung oleh Knapsack sampai Knapsack penuh atau
sudah tidak ada objek lagi yang dapat dimasukkan.
c. Greedy by density
Knapsack diisi dengan objek yang mempunyai densitas terbesar pada setiap
tahap. Memilih objek yang mempunyai keuntungan per-unit berat terbesar untuk
memaksimumkan keuntungan. Tahap pertama yang dilakukan adalah mencari nilai
profit per-unit (density) dari tiap-tiap objek. Kemudian objek-objek tersebut diurutkan
berdasarkan density-nya. Kemudian baru diambil satu per-satu objek yang dapat
ditampung oleh Knapsack sampai Knapsack penuh atau sudah tidak ada objek lagi yang
dapat dimasukkan. Algoritma Greedy mengurangi jumlah langkah pencarian.
Algoritma Greedy dalam Menyelesaikan Masalah Knapsack
Algoritma Greedy menyelesaikan suatu masalah dengan beberapa fungsi pembatas
untuk mencapai satu fungsi tujuan (Prihandono, 2009). Jadi dalam penyelesaiannya harus
ditentukan fungsi pembatas dan fungsi tujuan. Cara untuk menyelesaiakan masalah
Knapsack dengan algoritma Greedy adalah:
1. Tentukan Fungsi Tujuan, yaitu mencari nilai maksimum dari jumlah hasil perkalian
antara nilai profit (Pi) dengan nilai probabilitas (Xi).
Maximum ∑Pi × Xi
2. Tentukan Fungsi Pembatas, yang merupakan hasil penjumlahan dari perkalian antara
bobot (Wi) dengan nilai probabilitas (Xi) yang tidak boleh melebihi dari kapasitas
media penyimpanan (M).
∑Wi × Xi ≤ M , dimana 0 ≤ Xi ≤ 1, Pi > 0, Wi > 0
Berikut ini algoritma Greedy dalam menyelesaikan permasalahan Knapsack:
PROCEDURE GREEDY KNAPSACK (P, W, X, n)
REAL P(1:n), W(1:n), X(1:n), M, isi
INTEGER i, n
X(1:n) = 0
isi = M
FOR i = 1 TO n DO
IF W(i) > isi THEN EXIT ENDIF
X(i) = 1
isi = isi – W(i)
REPEAT
IF i ≤ n THEN X(i) = isi/W(i) ENDIF
END GREEDY KNAPSACK
Keterangan :
n = Jumlah objek
Wi = Bobot setiap objek
Pi = Profit setiap objek
Xi = Probabilitas setiap objek
M = Kapasitas media penyimpanan
b. Brute force
Persoalan:
Diberikan n buah objek dan sebuah knapsack dengan kapasitas bobot K. setiap
objek memiliki property bobot (weight) Wi dan keuntungan (profit) Pi.
Bagaimana memilih objek-objek yang akan dimasukkan ke dalam knapsack agar
meiliki keuntungan maksimum tanpa melibihi bobot tampungan knapsack.
Tampilan solusi:
Dimana:
Xi = 1 jika objek ke-i dimasukkan ke dalam knapsack
Xi = 0 jika objek ke-i tidak dimasukkan ke dalam knapsack
Langkah-langkah:
a. Enumerasi (list) semua himpunan bagian dari himpunan dengan n objek.
b. Hitung total keuntungan dari setiap himpunan bagian dari langkah a.
c. Pilih himpunan bagian yang memberikan total keuntungan terbesar.
Contoh kasus:
n=4
W1 = 2; P1 = 20
W2 = 5; P2 = 30
W3 = 10; P3 = 50
W4 = 5; P4 = 10
Kapasitas knapsack K = 16
Cari kombinasi untuk mencari keuntungan maksimum menggunakan 1/0 knapsack!
Himpunan bagian objek yang memberikan keuntungan maksimum adalah {2,3}
dengan total keuntungan adalah 80.
Solusi:
X = {0,1,1,0}
2. Penjadwalan
a. Algortima Greedy
Algoritma penjadwalan disk yang lain adalah SSTF (shortest-seek-time-first).
Algoritma SSTF memilih permintaan yang memiliki selisih seek time paling sedikit dari
posisi head. Penjadwalan SSTF menerapkan algoritma greedy. Persoalan penjadwalan SSTF
dapat dibentuk sebagai persoalan mencari jarak terpendek dari yang melalui setiap node
hanya sekali. Strategi greedy yang digunakan untuk memilih node yang akan dikunjungi:
Pada setiap langkah, pilih node yang belum pernah dikunjungi yang mempunyai jarak
terdekat.
Misalkan terdapat sejumlah n node yang merepresentasikan antrian permintaan I/O.
Lalu dihitung cost yang diperlukan untuk berpindah antar node.
Sebagai contoh, antrian permintaan akses I/O blok silinder adalah sebagai berikut:
98,183,37,122,14,124,65,67
Misalkan disk head terletak pada silinder 53, cost antar node dalam antrian akan
terlihat seperti ini:
Dengan menggunakan strategi greedy, maka langkahlangkahnya:
Langkah Node Cost
1 53 → 65 12
2 65 → 67 12 + 2 = 14
3 67 → 98 12 + 2 + 31 = 45
4 98 → 122 12 + 2 + 31 + 24 = 69
5 122 → 124 12 + 2 + 31 + 24 + 108 = 177
6 124 → 183 12 + 2 + 31 + 24 + 108 + 59 = 236
Jadi permintaan I/O akan dijalankan dengan urutan:
53 → 65 → 67 → 98 → 122 → 124 → 183 dengan cost 236 silinder.
Terlihat adanya improvisasi performa menjadi sepertiga bagian apabila dibandingkan
dengan algoritma brute force yang diterapkan pada penjadwalan FCFS.
b. Brute force
Salah satu algoritma penjadwalan yang paling sederhana adalah FCFS (First Come
First Serve). Algoritma ini dapat dikatakan algoritma yang ‘adil’. Proses yang memberikan
permintaan akses I/O akan didahulukan yang memberikan permintaan pertama. Tetapi
algoritma ini bukanlah algoritma yang paling efisien.
Algoritma FCFS pada penjadwalan disk merupakan penerapan dari algoritma brute
force. Algoritma FCFS bisa direpresentasikan sebagai persoalan antrian. Setiap permintaan
I/O akan dimasukkan ke dalam antrian. Setiap elemen yang ditemukan akan langsung
diproses dengan menggerakkan disk arm ke elemen tersebut.
Pseudo-code algoritma:
procedure FCFS (input a : queue)
Deklarasi
i : integer
Algoritma
while (a tidak kosong) do
pindahkan disk head ke posisi HEAD(a)
hapus HEAD(a) dari antrian a
end while
{antrian sudah kosong, semua permintaan telah dipenuhi}
Sebagai contoh, antrian permintaan akses I/O blok silinder adalah sebagai berikut:
98,183,37,122,14,124,65,67
Misalkan disk head terletak pada silinder 53, maka disk head akan bergerak dengan
urutan silinder seperti ini: 53 → 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67
Langkah Node Cost
1 53 → 98 45
2 98 → 183 85
3 183 → 37 146
4 37 → 122 85
5 122 → 14 108
6 14 → 124 110
7 124 → 65 59
8 65 → 67 2
Total 640
3. Egyptian Fractions
Egyptian Fraction adalah representasi dari pecahan sebagai penjumlahandari unit-unit
pecahan. Representasi ini digunakan pada peradaban mesir kuno dan masihberdiri.
Permasalahan yang ada adalah cara efisien menuemukan unit-unit pecahanpembentuk pecahan
tersebut. Dimana, pemecahan permasalahan ini telah dicoba olehmatematikawan dari seluruh
dunia. Walaupun, metode untuk menemukan unit-unit pecahantersebut telah banyak ditemukan,
namun belum ada di antaranya yang paling efisien untukmemecahkan permasalahan ini.
Sedangkan, sebelum metode- metode tersebut bermunculan, metode sitametik permasalahan ini
dipublikasikan pertama kali oleh Fibonacci pada tahun1202. Metode tersebut disebut Algoritma
Greedy karena setiap langkah dari algotima tersebut secara greed (rakus) memilih unit pecahan
terbesar yang dapat digunakan sebagairepresentasi dari pecahan tersebut dan secara rekursif
melakukan hal yang sama dengan pecahan yang tersisa.
Untuk penggunaan Egyptian Fraction salah satunya adalah dengan menyelesaikan
permasalahan pembagian beras. Pertama, kita lihat bahwa masing-masing timbunan paling
tidak mendapat setengah karung sehingga tiap timbunan dapat dituang dengan
setengahkarung, dantinggal 1 karung yang belum dibagi. Sekarang, menjadi lebih mudah untuk
membagi satukarung menjadi 8 timbunan. Maka dari satu karung tersebut, dapat dibagi
menjadi 8 timbunan, dan masing-masing karung terbagi secara merata ke menjadi 8 timbunan.
Penggunaan lain Egyptian Fraction adalah untuk membandingkan pecahan. Contohnya
3 4
adalah, manakah yang lebih besar antara 4 dengan 5 ? Kita dapat menggunakan desimal
3 4 4 3
sehingga 4 = 0.75 dan 5 = 0.8 dimana 0.8 lebih besar dari 0.75 yang berarti 5 lebih besar dari 4.
Bagaimana caranya, menentukan pecahan yang lebih besar denganEgyptian Fraction? Dengan
Egyptian Fraction, kita dapat menulis masing-masing pecahan sebagai penjumlahan dari unit
pecahan.
3 1 1
=2+2
4
4 1 3
= + 10
5 2
3 1 1
Dimana, 10 = 4 + 20
4 1 1 1
Sehingga didapat, 5 = 2 + 4 + 20
4 1
Sekarang kita dapat menentukan bahwa 5 lebih besar dengan perbedaan 20
Dari pecahan ke Egyptian Fraction
𝑇
Egyptian Fraction untuk pecahan merupakan penjumlahan dari unit-unit pecahan,
𝐵
𝑇
dengan masing-masing unit berbeda sehingga jika dijumlahkan menjadi sebesar .
𝐵
𝑇
Matematikawan telah membuktikan bahwa setiap pecahan dapat dituliskan sebagai
𝐵
penjumlahan dari unit-unit pecahan dan masing-masing unit pecahan dapat dituliskan dengan
3
berbagai unit pecahan yang tak terbatas. Contohnya adalah pecahan 4 dimana dapatdituliskan
sebagai,
3 1 1
=2+4
4
3 1 1 1 1
= 2 + 8 + 12 + 24 atau
4
3 1 1 1 1 1 1
= 2 + 8 + 12 + 48 + 72 + 144
4
𝑇
Hal ini menunjukkan bahwa bila kita menuliskan dalam suatu cara, maka kita dapat
𝐵
memperoleh hasil yang lain sebanyak mungkin.
4. Shortest Path
Lintasan terperndek adalah lintasan minimum yang diperlukan untuk mencapai suatu
tempat dari tempat tertentu Lintasan minimum yang dimaksud dapat dicari dengan
menggunakan graf. Graf yang digunakan adalah graf yang berbobot, yaitu graf yang setiap
sisinya diberikan suatu nilai atau bobot. Dalam kasus ini, bobot yang dimaksud berupa jarak
dan waktu kemacetan terjadi. Ada beberapa macam persoalan lintasan terpendek, antara lain:
• Lintasan terpendek antara dua buah simpul tertentu (a pair shortets path).
• Lintasan terpendek antara semua pasangan simpul (all pairs shortest path).
• Lintasan terpendek dari simpul tertentu ke semua simpul yang lain (single-
sourceshoertest path).
• Lintasan terpendek antara dua buah simpul yang melalui beberapa simpul tertentu
(intermediate shortest path).
Dalam makalah ini, persoalan yang digunakan adalah single-source shortest path.
Diberikan sebuah persoalan:
“Diberikan sebuah graf berbobot G (V, E). Tentukan lintasan terpendek dari simpul awal
a, ke setiap simpul lainnya di G. Asumsi bahwa bobot semua sisi bernilai positif.” Algoritma
greedy untuk mencari lintasan terpendek dapat dirumuskan sebagai berikut:
1. Perikasa semua sisi yang langsung bersisian dengan simpul a. Pilih sisi yang bobotnya
terkecil. Sisi ini menjadi lintasan terpendek pertama, sebut saja L(1).
2. Tentukan lintasan terpendek kedua dengan cara berikut:
a. hitung: d(i) = panjang L(1) + bobot sisi dari simpul akhir L(1) ke simpul i yang
lain.
b. pilih d(i) yang terkecil Bandingkan d(i) dengan bobot sisi (a, i).
c. Jika bobot sisi (a, i) lebih kecil dari pada d(i), maka L(2) = L(1) U (sisi dari
simpul akhir L(i) ke simpul (i).
3. Dengan cara yang sama, ulangi langkah 2 untuk menentukan lintasan terpendek
berikutnya.