bab ii landasan teorithesis.binus.ac.id/doc/bab2/2008-1-00269-mtif bab 2.pdf · 2009-01-06 ·...
TRANSCRIPT
BAB II
LANDASAN TEORI
Perancangan program aplikasi yang akan dibuat menggabungkan algoritma Brute
Force dan algoritma Greedy yang digunakan secara bergantian pada tahap-tahap
tertentu. Karena itu, pada bagian ini akan dibahas juga algoritma Brute Force dan
Greedy terlebih dahulu sebelum masuk ke dalam pembahasan algoritma kombinasi
keduanya yaitu algoritma Brudy.
2.1. Algoritma Brute Force
Brute Force (Rinaldi Munir, 2004, p. 2) adalah sebuah pendekatan langsung
(straight forward) untuk memecahkan suatu masalah, yang biasanya didasarkan pada
pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan. Pada
dasarnya algoritma Brute Force adalah alur penyelesaian suatu permasalahan dengan
cara berpikir yang sederhana dan tidak membutuhkan suatu permikiran yang lama.
Sebenarnya, algoritma Brute Force merupakan algoritma yang muncul karena pada
dasarnya alur pikir manusia adalah Brute Force (langsung/to the point).
Beberapa karakteristik dari algoritma Brute Force dapat dijelaskan sebagai berikut.
a. Membutuhkan jumlah langkah yang banyak dalam menyelesaikan suatu
permasalahan sehingga jika diterapkan menjadi suatu algoritma program
aplikasi akan membutuhkan banyak memori.
b. Digunakan sebagai dasar dalam menemukan suatu solusi yang lebih efektif.
c. Banyak dipilih dalam penyelesaian sebuah permasalahan yang sederhana
karena kemudahan cara berpikirnya.
8
d. Pada banyak kasus, algoritma ini banyak dipilih karena hampir dapat
dipastikan dapat menyelesaikan banyak persoalan yang ada.
e. Digunakan sebagai dasar bagi perbandingan keefektifan sebuah algoritma.
Dalam beberapa kasus tertentu algoritma Brute Force hampir sama dengan
Exhaustive Search. Exhausitve Search yang merupakan teknik pencarian solusi secara
Brute Force pada masalah yang melibatkan pencarian elemen dengan sifat khusus.
Biasanya elemen tersebut berada di antara objek-objek kombinatorik seperti permutasi,
kombinasi, atau himpunan bagian dari sebuah himpunan. Berdasarkan definisi ini, maka
dapat ditarik kesimpulan bahwa Exhaustive Search adalah Brute Force juga. Oleh
karena itu Exhaustive Search adalah salah satu implementasi dari Brute Force dalam
kasus pencarian. Masalah–masalah dalam Exhaustive Search dengan penerapan
algoritma Brute Force dapat dijelaskan sebagai berikut.
a. Enumerasi setiap solusi yang mungkin dengan cara yang sistematis.
b. Evaluasi setiap kemungkinan solusi yang ditemukan satu per satu, meskipun
terdapat beberapa kemungkinan ditemukannya solusi yang tidak layak atau
bahkan terdapat kemungkinan–kemungkinan solusi terbaik yang telah
ditemukan dan dievaluasi.
c. Bila pencarian sudah sampai pada tujuan, maka pilih solusi yang terbaik.
Berikut ini adalah contoh-contoh penerapan algoritma Brute Force pada
perhitungan matematika biasa.
1. Menghitung an (a > 0, n adalah bilangan bulat tak-negatif)
an = a x a x … x a (n kali) , jika n > 0
= 1 , jika n = 0
Algoritma: kalikan 1 dengan a sebanyak n kali.
9
2. Menghitung n! (n bilangan bulat tak-negatif)
n! = 1 × 2 × 3 × … × n , jika n > 0
= 1 , jika n = 0
Algoritma: kalikan n buah bilangan, yaitu 1, 2, 3, …, n, sekaligus.
3. Mengalikan dua buah matrik yang berukuran n × n.
Misalkan C = A × B dan elemen-elemen matrik dinyatakan sebagai cij, aij,
dan bij.
Algoritma: hitung setiap elemen hasil perkalian satu per satu, dengan cara
mengalikan dua vektor baris dan kolom yang panjangnya n.
4. Menemukan semua faktor dari bilangan bulat n selain dari 1 dan n
itu sendiri.
Definisi: Bilangan bulat a adalah faktor dari bilangan bulat b jika a habis
membagi b.
5. Mencari elemen terbesar (atau terkecil)
Diberikan sebuah himpunan yang beranggotakan n buah bilangan bulat.
Bilangan-bilangan bulat tersebut dinyatakan sebagai a1, a2, …, an. Carilah
elemen terbesar di dalam himpunan tersebut.
6. Sequential Search
Diberikan n buah bilangan bulat yang dinyatakan sebagai a1, a2, …, an.
Carilah apakah x terdapat di dalam himpunan bilangan bulat tersebut.
Jika x ditemukan, maka lokasi (indeks) elemen yang bernilai x disimpan
di dalam peubah idx. Jika x tidak terdapat di dalam himpunan tersebut,
maka idx diisi dengan nilai 0.
10
7. Bubble Sort
Algoritma Bubble Sort mengimplementasikan teknik Brute Force dengan
jelas sekali.
8. Menghitung nilai polinom secara Brute Force
Kelebihan dari algoritma Brute Force adalah sebagai berikut.
1. Metode Brute Force dapat digunakan untuk memecahkan hampir
sebagian besar masalah (wide applicability).
2. Metode Brute Force sederhana dan mudah dimengerti.
3. Metode Brute Force menghasilkan algoritma yang layak untuk
beberapa masalah penting, seperti pencarian, pengurutan,
pencocokan string, perkalian matriks.
4. Metode Brute Force menghasilkan algoritma baku (standard)
untuk tugas-tugas komputasi seperti penjumlahan/perkalian n
buah bilangan, menentukan elemen minimum atau maksimum di
dalam tabel (list).
Selain itu, terdapat beberapa kelemahan dari algoritma Brute Force:
1. Metode Brute Force jarang menghasilkan algoritma yang efektif.
2. Beberapa algoritma Brute Force lambat sehingga tidak dapat
diterima.
3. Tidak sekontruktif/sekreatif teknik pemecahan masalah lainnya.
Algoritma Brute Force pada penyelesaian masalah Knapsack dilakukan dengan
menghitung satu per satu keuntungan yang diperoleh dari semua kemungkinan
pemilihan barang yang ada. Banyaknya kemungkinan pemilihan barang tersebut dapat
dirumuskan sebagai: 2n.
11
Adapun n adalah jumlah dari barang yang akan dikirim. Jadi, seandainya banyak barang
yang akan dikirm 5 buah, maka untuk mencari solusi optimal diperlukan 25 = 32
kemungkinan. Memang, akan didapatkan hasil yang sangat optimal mengingat akan
ditelusuri satu per satu kemungkinan yang ada, tetapi akan sangat membutuhkan waktu
yang sangat lama (perhitungan manual) dan memori yang besar (jika menggunakan
program komputer) untuk jumlah barang yang ada sangat banyak.
2.2 Algoritma Greedy
Algoritma Greedy merupakan algoritma yang lazim untuk memecahkan persoalan
optimasi meskipun hasilnya tidak selalu merupakan solusi yang optimum. Sesuai arti
harafiah, Greedy berarti tamak. Prinsip utama dari algoritma ini adalah mengambil
sebanyak mungkin apa yang dapat diperoleh sekarang. Untuk memecahkan persoalan
dengan algoritma Greedy, kita memerlukan elemen-elemen sebagai berikut.
a. Himpunan Kandidat (C)
Himpunan ini berisi elemen-elemen pembentuk solusi.
b. Himpunan Solusi, (S)
Himpunan ini berisi kandidat yang terpilih sebagai solusi persoalan.
Dengan kata lain, himpunan solusi adalah himpunan bagian dari
himpunan kandidat.
c. Fungsi Seleksi
Fungsi seleksi merupakan fungsi yang ada pada setiap langkah
memilih kandidat yang paling memungkinkan guna mencapai solusi
optimal.
12
d. Fungsi Kelayakan (Feasible)
Fungsi kelayakan adalah fungsi yang memeriksa apakah suatu
kandidat yang telah dipilih dapat memberikan solusi yang layak dan
tidak melanggar batasan atau constraints yang ada.
e. Fungsi Objektif
Fungsi objektif adalah fungsi yang memaksimumkan atau
meminimumkan nilai solusi.
Skema umum algoritma Greedy adalah sebagai berikut.
a. Inisialisasi S dengan kosong.
b. Pilih sebuah kandidat C dengan fungsi seleksi.
c. Kurangi C dengan kandidat yang sudah dipilih dari langkah (b) di
atas.
d. Periksa apakah kandidat yang dipilih tersebut bersama-sama dengan
himpunan solusi membentuk solusi yang layak atau feasible (dengan
fungsi kelayakan).
e. Periksa apakah himpunan solusi sudah memberikan solusi yang
lengkap serta optimal (dengan fungsi objektif).
Contoh permasalahan yang dapat diselesaikan dengan algoritma Greedy adalah
masalah penukaran uang koin. Strategi Greedy adalah pada setiap langkah, pilihlah koin
dengan nilai terbesar dari himpunan koin yang tersisa.
• Misal: A = 32, koin yang tersedia: 1, 5, 10, dan 25.
• Himpunan Kandidat: himpunan koin yang merepresentasikan nilai 1,
5, 10, 25, paling sedikit mengandung satu koin untuk setiap nilai.
13
• Himpunan Solusi: total nilai koin yang dipilih tepat sama jumlahnya
dengan nilai uang yang ditukarkan.
• Fungsi Seleksi: pilihlah koin yang bernilai tertinggi dari himpunan
kandidat yang tersisa.
• Fungsi Layak: memeriksa apakah nilai total dari himpunan koin yang
dipilih tidak melebihi jumlah uang yang harus dibayar.
• Fungsi Objektif: jumlah koin yang digunakan minimum.
• Langkah 1: pilih 1 buah koin 25 (Total = 25)
Langkah 2: pilih 1 buah koin 5 (Total = 25 + 5 = 30)
Langkah 3: pilih 2 buah koin 1 (Total = 25+5+1+1= 32)
Solusi: Jumlah koin minimum = 4 (solusi optimal!)
Optimum global dengan menggunakan algoritma Greedy belum tentu merupakan
solusi optimum (terbaik), tetapi sub-optimum atau pseudo-optimum. Alasannya adalah
sebagai berikut.
1. Algoritma Greedy tidak beroperasi secara menyeluruh terhadap
semua alternatif solusi yang ada (sebagaimana pada metode
Exhaustive Search).
2. Terdapat beberapa fungsi seleksi yang berbeda, sehingga harus dipilih
fungsi yang tepat agar algoritma yang digunakan menghasilkan solusi
optimal.
Secara umum rumus dari algoritma Greedy adalah:
Berat barang total = KXWNj
jj ≤∑∈
di mana Xj € {0,1}
Volume barang total = KXVNj
jj ≤∑∈
di mana Xj € {0,1}
14
Keuntungan total = ∑∈Nj
jjXP di mana Xj € {0,1}
Wj adalah berat barang, Vj adalah volume barang, Pj adalah keuntungan barang, Xj adalah
bernilai 0 jika barang tersebut tidak dipilih untuk dimasukkan ke dalam kapasitas
Knapsack dan 1 jika barang tersebut terpilih untuk dimasukkan ke dalam kapasitas
Knapsack, dan K adalah kapasitas media pengiriman.
Pada penyelesaian masalah Knapsack dengan menggunakan algoritma Greedy
dapat dipilih 3 cara sebagai berikut.
1. Greedy by Profit, pilih benda-benda dengan keuntungan maksimum dan benda-
benda tersebut memiliki berat yang masih dapat ditampung oleh sisa kapasitas
Knapsack.
2. Greedy by Weight, pilih benda-benda dengan berat minimum dan benda-benda
tersebut memiliki volume yang masih dapat ditampung oleh sisa kapasitas Knapsack.
3. Greedy by Volume, pilih benda-benda dengan volume minimum dan benda-benda
tersebut memiliki berat yang masih dapat ditampung oleh sisa kapasitas Knapsack.
4. Greedy by Weight Density, pilih benda-benda dengan keuntungan per berat yang
nilainya maksimum dan benda-benda tersebut memiliki berat dan volume yang
masih dapat ditampung oleh sisa kapasitas Knapsack. Rumus untuk mendapatkan
density adalah:
Dj = j
j
WP
5. Greedy by Volume Density, pilih benda-benda dengan keuntungan per volume yang
nilainya maksimum dan benda-benda tersebut memiliki berat dan volume yang
15
masih dapat ditampung oleh sisa kapasitas Knapsack. Rumus untuk mendapatkan
density adalah:
Dj = j
j
VP
Pada sebagian masalah, algoritma Greedy tidak selalu berhasil memberikan solusi
yang optimal. Jika jawaban terbaik mutlak tidak diperlukan, maka algoritma Greedy
sering berguna untuk menghasilkan solusi hampiran (approximation), dibandingkan
dengan menggunakan algoritma yang lebih rumit untuk menghasilkan solusi yang eksak.
Bila algoritma Greedy optimum, maka keoptimalannya itu dapat dibuktikan secara
matematis.
2.3 Algoritma Brudy (Brute Force-Greedy)
Ide awal dari penggabungan kedua algoritma tersebut adalah membentuk sebuah
algoritma baru yang di tengah-tengah. Misalkan diperlukan algoritma dengan kecepatan
yang cukup tinggi (lebih tinggi dari kecepatan Brute Force), algoritma yang cukup
sederhana, serta ketepatan penemuan solusi yang cukup baik (lebih baik dari Greedy).
Algoritma ini (untuk selanjutnya, dinamakan sebagai algoritma Brudy (Brute Force-
Greedy)) lebih mengacu pada algoritma Greedy. Bedanya, algoritma Greedy mencari
optimum lokal pada tiap langkahnya, sedangkan algoritma Brudy mencari optimum
lokal pada tiap b-langkah (untuk selanjutnya b dinamakan sebagai nilai batas, dengan
catatan b > 1 dan b < jumlah_tahap), sehingga dapat dikatakan algoritma Brudy ini sama
dengan algoritma B-Greedy. Jadi, pada suatu keadaan, misalkan pada suatu
permasalahan yang pengerjaannya bertahap (anggap saja 14 tahap dengan tahap ke-0
adalah kondisi awal), algoritma Brute Force akan mencari semua cara mencapai tahap
16
ke-13 tersebut. Algoritma Greedy akan mencari optimum dari tahap ke-i menuju tahap
ke-(i+1), sedangkan algoritma Brudy akan mencari optimum dari tahap ke-i menuju
tahap ke-(i+b) dan b bebas ditentukan oleh pengguna. Misalkan dipilih b adalah 3,
berarti akan dicari optimum tahap ke-1 menuju tahap ke-4, setelah itu dicari optimum
tahap ke-4 menuju tahap ke-7, dan seterusnya. Begitu diperoleh optimum dari tahap ke-1
menuju ke tahap ke-4, status di tahap ke-4 tersebut itulah yang akan diperluas untuk
dicari optimumnya menuju tahap ke-7 dan seterusnya. Hal inilah yang merupakan letak
kemiripan algoritma Brudy dengan algoritma Greedy. Sedangkan untuk mencari
optimum dari tahap ke-1 sampai tahap ke-4, akan dicoba semua cara yang mungkin dari
tahap ke-1 sampai tahap ke-4, begitu seterusnya. Inilah kemiripan algoritma Brudy
dengan algoritma Brute Force. Sedikit perbedaan dengan algoritma Greedy, yang
sekaligus berguna menutupi kelemahan algoritma ini, adalah apabila tahap ke-(i+b)
melebihi solusi akhir, kurangilah b dengan 1 dan lakukan lagi untuk langkah
selanjutnya.
Berikut ini contoh perbandingan hasil penyelesaian permasalahan Knapsack
menggunakan metode Brute Force, Greedy, dan Brudy.
Persoalan: Misalkan diberikan beberapa buah barang dengan keuntungan serta beratnya
masing-masing, akan tetapi container yang dimiliki hanya dapat memuat sejumlah berat
tertentu. Pilih barang-barang yang akan dibawa agar keuntungan yang diperoleh
maksimum.
Contoh: Terdapat 6 benda (label 1 sampai 6), dengan wi adalah berat benda ke-i dan pi
adalah keuntungan benda ke-i.
w1 = 100 p1 = 40 v1= 50
w2 = 50 p2 = 35 v2 = 70
17
w3 = 45 p3 = 18 v3 = 30
w4 = 20 p4 = 4 v4 = 25
w5 = 10 p5 = 10 v5 = 10
w6 = 5 p6 = 2 v6 = 18
Kapasitas Knapsack K = 100, volume = 200
Tuliskan solusi sebagai X = (x1, x2, …, x6) dengan xi = 0 jika benda ke-i dibawa atau xi =
1 jika benda ke-i tidak dibawa.
Penyelesaian dengan Brute Force.
Dicoba semua kemungkinan X, mulai X = (0, 0, 0, 0, 0,0), sampai dengan X = (1,
1, 1, 1, 1, 1). Jumlah kemungkinan yang harus dicoba ada 26 = 64 kemungkinan. Tiap
kemungkinan harus dihitung berat totalnya, dan dari semua kemungkinan yang berat
totalnya tidak melebihi kapasitas Knapsack, pilih satu yang keuntungannya paling besar.
Pada akhirnya akan diperoleh solusi optimum X = (0, 1, 1, 0, 0, 1), dengan berat total
100, volume total 118, dan keuntungan total 55. Hal ini memang sangat optimal tetapi
untuk memperoleh hasil tersebut membutuhkan proses yang sangat panjang dan lama
(perhitungan manual). Apabila metode ini diterapkan menjadi algoritma pembuatan
program aplikasi akan menggunakan memori yang sangat besar.
Penyelesaian dengan Greedy.
Dengan Greedy, bisa dipilih 3 cara sebagai berikut.
1. Greedy by Profit, pilih benda-benda dengan keuntungan maksimum dan benda-
benda tersebut memiliki berat yang masih dapat ditampung oleh sisa kapasitas
Knapsack.
18
2. Greedy by Weight, pilih benda-benda dengan berat minimum dan benda-benda
tersebut memiliki volume yang masih dapat ditampung oleh sisa kapasitas Knapsack.
3. Greedy by Volume, pilih benda-benda dengan volume minimum dan benda-benda
tersebut memiliki berat yang masih dapat ditampung oleh sisa kapasitas Knapsack.
4. Greedy by Weight Density, pilih benda-benda dengan keuntungan per berat yang
nilainya maksimum dan benda-benda tersebut memiliki berat dan volume yang
masih dapat ditampung oleh sisa kapasitas Knapsack. Rumus untuk mendapatkan
density adalah:
Dj = j
j
WP
4. Greedy by Volume Density, pilih benda-benda dengan keuntungan per volume yang
nilainya maksimum dan benda-benda tersebut memiliki berat dan volume yang
masih dapat ditampung oleh sisa kapasitas Knapsack. Rumus untuk mendapatkan
density adalah:
Dj = j
j
VP
19
Sehingga bisa dibuat tabelnya sebagai berikut.
Tabel 2.1 Data Permasalahan Knapsack dengan solusi Greedy Sumber : (Rinaldi Munir, 2004, p31)
Sifat objek Greedy by
i Wi Vi Pi Di volume
Di weight
profit weight volume weight density
volumedensity
1 100 50 40 0,8 0,4 1 0 0 0 0
2 50 70 35 0,5 0,7 0 0 0 1 0
3 45 30 18 0,6 0,4 0 1 1 0 1
4 20 25 4 0,16 0.2 0 1 1 1 1
5 10 10 10 1,0 1,0 0 1 1 1 1
6 5 18 2 0,11 0,4 0 1 1 1 1
Total bobot Total volume
100 50
80 83
80 83
85 123
80 83
Total keuntungan 40 34 34 51 34
Sehingga diperolehlah solusi sebagai berikut.
• Greedy by Profit: X = (1, 0, 0, 0, 0, 0), dengan keuntungan total = 40.
• Greedy by Weight: X = (0, 0, 1, 1, 1, 1), dengan keuntungan total = 34.
• Greedy by Volume: X = (0, 0, 1, 1, 1, 1), dengan keuntungan total = 34.
• Greedy by Weight Density: X = (0, 1, 0, 1, 1, 1), dengan keuntungan total = 51.
• Greedy by Weight Density: X = (0, 0, 1, 1, 1, 1), dengan keuntungan total = 34.
Dari hal-hal di atas diperoleh kenyataan, bahwa langkah Greedy mengutamakan
kecepatan dan hanya optimum pada setiap langkah, dan tidak ada yang menghasilkan
keuntungan optimum pada langkah akhir. Secara umum, jika banyak barang adalah n,
kompleksitas algoritma untuk Brute Force adalah: O(2n).
20
Sedangkan untuk algoritma greedy, kompleksitas pada greedy by profit dan greedy
by weight adalah sama, yaitu: O(n2),
yang artinya pemilihan k barang yang diambil, dengan maksimal n buah iterasi, karena
jumlah barang yang diambil tidak mungkin lebih dari n. Pada greedy by density,
kompleksitasnya berbeda sedikit karena harus ada perhitungan pi/wi untuk setiap i
barang-barang yang ada, yaitu: T(n) = n2 + n, sehingga kompleksitasnya adalah: O(n2).
Dengan menggunakan algoritma Brudy maka akan memperoleh hasil sebagai
berikut.
Pertama, pilih nilai batas secara bebas (penjelasan mengenai nilai batas). Misalkan saja
nilai batasnya dipilih yaitu b = 2.
Langkah-langkah penyelesaian algoritma adalah sebagai berikut.
1. Karena dipilih b = 2, berikutnya tentukan semua himpunan bagian dari 6 benda
tersebut ({1, 2, 3, 4, 5, 6}) yang banyak anggotanya adalah 2. Banyaknya
himpunan bagian tersebut didapat dengan menggunakan rumus kombinasi
yaitu:
C(n,r) = !)!(
!rrn
n−
2. Cari profit, berat, dan profit/berat untuk tiap 2 benda tersebut. Untuk
memudahkan, dapat dibuat tabel.
21
Tabel 2.2 Data Permasalahan Knapsack dengan solusi Brudy Sumber : (Anggriawan Sugianto, 2005, p4)
Properti objek
i wi vi pi pi/wi pi/vi
{1,2} 150 120 75 0,5 0,63
{1,3} 145 80 58 0,4 0,73
{1,4} 140 75 44 0,37 0,59
{1,5} 110 60 50 0,45 0,83
{1,6} 105 68 42 0,4 0,62
{2,3} 95 100 53 0,56 0,53
{2,4} 70 95 39 0,56 0,41
{2,5} 60 80 45 0,75 0,56
{2,6} 55 88 37 0,67 0,42
{3,4} 65 55 22 0,34 0,4
{3,5} 55 40 28 0,51 0,7
{3,6} 50 48 20 0,4 0,42
{4,5} 30 35 14 0,47 0,4
{4,6} 25 43 6 0,24 0,14
{5,6} 15 28 12 0,8 0,43
Untuk memperoleh solusi optimal masalah Knapsack di atas dengan menggunakan
algoritma Brudy adalah dengan cara menganalisis data-data di atas ke dalam 5 cara yang
berbeda, yaitu Brudy by Weight (dengan memprioritaskan berat yang paling kecil),
22
Brudy by Weight (dengan memprioritaskan volume yang paling kecil), Brudy by Profit
(dengan memprioritaskan keuntungan yang paling besar terlebih dahulu), Brudy by
Weight Density (dengan memprioritaskan keuntungan per berat yang paling besar
terlebih dahulu), dan Brudy by Volume Density (dengan memprioritaskan keuntungan
per volume yang paling besar terlebih dahulu). Kemudian setelah mendapatkan solusi-
solusi dari ketiga cara tersebut digunakan suatu rumusan untuk memperoleh solusi
optimal yaitu:
Popt = maks (Pp, Pw, Pv, Pdw,Pdv ), Wopt = W( Popt), dan Vopt = V(Popt)
Popt adalah keuntungan optimal yang dicari, Wopt adalah berat total dari barang-barang
yang diprioritaskan sehingga memperoleh keuntungan yang maksimal, Vopt adalah
volume total dari barang-barang yang diprioritaskan sehingga memperoleh keuntungan
yang maksimal, Pp adalah keuntungan yang diperoleh dalam perhitungan dengan
menggunakan cara Brudy by Profit, Pw adalah keuntungan yang diperoleh dalam
perhitungan dengan menggunakan cara Brudy by Weight, Pv adalah keuntungan yang
diperoleh dalam perhitungan dengan menggunakan cara Brudy by Volume, Pdw adalah
keuntungan yang diperoleh dalam perhitungan dengan menggunakan cara Brudy by
Weight Density, sedangkan Pdv adalah keuntungan yang diperoleh dalam perhitungan
dengan menggunakan cara Brudy by Volume Density.
Brudy by Weight:
1. Pilih i dengan berat terkecil dan tidak lebih dari 100, volume tidak lebih dari
200, dipilih {5,6}, berat sisa = 85, volume sisa = 172.
2. Pilih i berikutnya dengan berat terkecil, tidak lebih dari 85, volume tidak lebih
dari 172, dan i ∩ {5,6} = {}, dipilih {3,4}, berat sisa = 20, volume sisa = 117.
23
3. Pilih i berikutnya dengan berat terkecil, tidak lebih dari 20, volume tidak lebih
dari 117 dan i ∩ {3,4,5,6} = {}. Tidak ada yang dipilih.
4. Decrement b, b = 1, gunakan tabel 2.1 pada pembahasan dengan metode
Greedy, pilih i berikutnya dengan berat terkecil, tidak lebih dari 20, volume
tidak lebih dari 117, dan i ∩ {3,4,5,6} = {}. Tidak ada yang dipilih.
5. Decrement b, b = 0. Ketika b = 0 proses berhenti.
Solusi = (0, 0, 1, 1, 1, 1). Berat = 80, volume = 83, keuntungan = 34.
Brudy by Volume:
1. Pilih i dengan volume terkecil dan tidak lebih dari 200, berat tidak lebih dari
100, dipilih {5, 6), berat sisa = 85, volume sisa = 172.
2. Pilih i berikutnya dengan volume terkecil, tidak lebih dari 172, berat tidak lebih
dari 85, dan i ∩ {5, 6} = {}, dipilih {3,4}, berat sisa = 20, volume sisa = 117.
3. Pilih i berikutnya dengan volume terkecil, tidak lebih dari 117, berat tidak lebih
dari 20 dan i ∩ {3, 4, 5, 6} = {}. Tidak ada yang dipilih.
4. Decrement b, b = 1, gunakan tabel 2.1 pada pembahasan dengan metode
Greedy, pilih i berikutnya dengan volume terkecil, tidak lebih dari 117, berat
tidak lebih dari 20, dan i ∩ {3, 4, 5, 6} = {}. Tidak ada yang dipilih.
5. Decrement b, b = 0. Ketika b = 0 proses berhenti.
Solusi = (0, 0, 1, 1, 1, 1). Berat = 80, volume = 83, keuntungan = 34.
24
Brudy by Profit:
1. Pilih i dengan keuntungan terbesar dengan berat tidak lebih dari 100 dan
volume tidak lebih dari 200, dipilih {2, 3), berat sisa = 5 dan volume sisa =
100.
2. Pilih i berikutnya dengan keuntungan terbesar, berat tidak lebih dari 5, volume
tidak lebih dari 100, dan i ∩ {2, 3} = {}.
3.. Decrement b, b = 1, gunakan tabel 2.1 pada pembahasan dengan metode
Greedy, pilih i berikutnya dengan keuntungan terbesar, berat tidak lebih dari 5,
volume tidak lebih dari 100, dan i ∩ {2,3} = {6}, berat sisa = 0, sisa volume =
95.
4. Pilih i berikutnya dengan keuntungan terbesar, berat tidak lebih dari 0, volume
tidak lebih dari 82 dan i ∩ {2, 3, 6} = {}. Tidak ada yang dipilih.
5. Decrement b, b = 0. Ketika b = 0 proses berhenti.
Solusi = (0, 1, 1, 0, 0, 1). Berat = 100, volume = 118, keuntungan = 55.
Brudy by Weight Density:
1. Pilih i dengan keuntungan per berat terbesar dengan berat tidak lebih dari 100
dan volume tidak lebih dari 200, dipilih {5, 6}, berat sisa = 85, volume sisa =
172.
2. Pilih i berikutnya dengan keuntungan per berat terbesar, berat tidak lebih dari
85, volume tidak lebih dari 172, dan i ∩ {5, 6} = {2, 4}, berat sisa = 15, volume
sisa = 77.
25
3. Pilih i berikutnya dengan keuntungan per berat terbesar dan berat tidak lebih
dari 15, volume tidak lebih dari 77 dan i ∩ {2, 4, 5, 6} = {}. Tidak ada yang
dipilih.
4. Decrement b, b = 1, gunakan tabel 2.1 pada pembahasan dengan metode
Greedy, pilih i berikutnya dengan keuntungan per berat terbesar dan berat tidak
lebih dari 15, volume tidak lebih dari 77 dan i ∩ {2, 4, 5, 6} = {}. Tidak ada
yang dipilih.
5. Decrement b, b = 0. Ketika b = 0 proses berhenti.
Solusi = (0, 1, 0, 1, 1, 1). Berat = 85, volume = 123, keuntungan = 51.
Brudy by Volume Density:
1. Pilih i dengan keuntungan per volume terbesar dengan berat tidak lebih dari
100 dan volume tidak lebih dari 200, dipilih {3, 5}, berat sisa = 45, volume sisa
= 160.
2. Pilih i berikutnya dengan keuntungan per volume terbesar, berat tidak lebih
dari 45, volume tidak lebih dari 160, dan i ∩ {3, 5} = {4, 6}, berat sisa = 20,
volume sisa = 117.
3. Pilih i berikutnya dengan keuntungan per volume terbesar dan berat tidak lebih
dari 20, volume tidak lebih dari 117,dan i ∩ {3, 4, 5, 6} = {}. Tidak ada yang
dipilih.
4. Decrement b, b = 1, gunakan tabel 2.1 pada pembahasan dengan metode
Greedy, pilih i berikutnya dengan keuntungan per berat terbesar dan berat tidak
lebih dari 20, volume tidak lebih dari 117 dan i ∩ {3, 4, 5, 6} = {}. Tidak ada
yang dipilih.
26
5. Decrement b, b = 0. Ketika b = 0 proses berhenti.
Solusi = (0, 0, 1, 1, 1, 1). Berat = 80, volume = 83, keuntungan = 34.
Dari kelima solusi di atas selanjutnya dicari solusi yang memberi keuntungan
paling besar yaitu solusi yang diperoleh dengan menggunakan cara Brudy by Profit yaitu
keuntungan sebesar 55, volume sebesar 118, dan berat sebesar 100. Sedangkan solusi =
(0, 1, 1, 0, 0, 1) artinya barang yang akan dipriopritaskan untuk dikirim adalah:
• barang dengan i = 2, yaitu berat = 50, volume = 70, dan keuntungan = 35.
• barang dengan i = 3, yaitu berat = 45, volume = 30, dan keuntungan = 18.
• barang dengan i = 6, yaitu berat = 5, volume = 18 dan keuntungan = 2.
Jika hasil yang diperoleh dengan menggunakan algoritma Brudy dibandingkan
dengan hasil yang diperoleh dengan 2 algoritma lain, yaitu Brute Force dan Greedy,
maka hasil yang diperoleh sama dengan yang diperoleh dengan menggunakan algoritma
Brute Force namun dengan proses yang jauh lebih cepat. Pada hasil yang diperoleh
dengan menggunakan algoritma Greedy hasil yang diperoleh tidak optimal yaitu
keuntungan = 51 dan berat = 85 walaupun untuk memperoleh hasilnya jauh lebih cepat
dibanding dengan menggunakan algoritma Brute Force.
Dari contoh penyelesaian masalah Knapsack di atas dapat dilihat dengan jelas
penggabungan dua buah algoritma yang sangat sederhana (Brute Force dan Greedy)
yang saling memiliki kekurangan masing-masing ternyata menghasilkan suatu algoritma
baru (Brudy) yang bukan hanya memberikan solusi yang optimal tetapi juga dengan
proses yang cukup cepat. Untuk pencarian solusi dengan perhitungan manual saja lebih
mudah dan singkat apalagi jika algoritma Brudy ini diterapkan dalam pembuatan
27
program aplikasi. Memori yang digunakan untuk menjalankan program aplikasi lebih
hemat (walaupun tidak sehemat menggunakan algoritma Greedy) tapi tetap memberikan
solusi yang optimal.
Secara kasarnya, kompleksitas untuk algoritma ini adalah: O(2bn2/b2). Jadi, jika b
= n, maka kompleksitasnya menjadi O(2n), yang sama dengan algoritma Brute Force.
Sebaliknya, jika b = 1, maka kompleksitasnya pun akan sama pula dengan algoritma
Greedy, yaitu: O(2n2) = O(n2).
2.4 Dasar Perancangan Piranti Lunak
Menurut IEEE (Institute of Electrical and Electonics Engineers), perancangan
piranti lunak didefinisikan sebagai penggunaan pendekatan yang sistematik, disiplin, dan
dapat dikualifikasi dalam pengembangan, pengoperasian, dan pemeliharaan piranti
lunak; atau juga berarti studi mengenai hal-hal tersebut (Pressman, 2001, p20).
2.5 Daur Hidup Perangkat Lunak
Salah satu model perancangan piranti lunak adalah dengan menggunakan model air
terjun (Waterfall model). Perancangan program aplikasi dengan model Waterfall
dilakukan dalam 5 tahap. Tahap-tahap tersebut adalah sebagai berikut.
a. Analisis
Analisis adalah suatu kegiatan untuk memnentukan topik dari masalah yang
sedang duhadapi dan bagaimana cara pemecahan masalah tersebut.
28
b. Desain
Dalam tahap ini ditentukan konsep dasara rancangan dari program aplikasi
yang akan dibuat sehingga diharapakan dengan desain yang baik, maka para
pengguna (user) akan merasa nyaman dalam menggunakan program aplikasi
yang dirancang tersebut.
c. Pengkodean (coding)
Pada tahap ini dilakukan penulisan kode program sebagai penterjemahan hasil
perancangan menjadi suatu bentuk yang dapat dimengert oleh mesin.
d. Pengujian (testing)
Pengujian dilakukan untuk mencari kelemahan dan kesalahan (error) yang
terjadi pada program aplikasi. Kelemahan dan kesalahan tersebut diperbaiki
sehingga dihasilkan suatu program aplikasi sesuai dengan yang diharapkan.
e. Pemeliharaan (maintenance)
Perangkat lunak akan mengalamai perubahan setelah disampaikan kepada
pelanggan. Pemeliharaan perangkat lunak mengaplikasikan lagi setiap fase
program sebelumnya dan tidak membuat yang baru lagi.
2.6 Teori Interaksi Manusia dan Komputer
Selain memiliki tampilan yang menarik, suatu program aplikasi yang baik tenetu
harus user friendly. Yang dimaksud dengan user friendly (Shneiderman, 1998, p15)
adalah sebagai berikut.
1) Waktu untuk balajar tidak lama.
2) Kecepatan dan ketepatan dalam penyajian informasi.
3) Tingkat kesalahan user rendah.
29
4) Cara penggunaan oleh user tidak gampang dilupakan.
5) Kepuasan pribadi.
Selain itu, terdapat 8 hal penting yang harus diperhatikan dalam merancang
program aplikasi (Shneiderman, 1998, p74-75), yaitu:
1) Konsistensi.
2) User dapat menggunakan fasilitas shortcut.
3) Memberi umpan balik yang informatif.
4) Merancang dialog yang memberikan penutup.
5) Mempunyai pencegahan kesalahan.
6) Adanya pilihan redo dan undo.
7) User sebagai pemegang kendali.
8) Mengurangi beban ingatan jangka pendek.
2.7 Pseudocode
Pseudocode (Pressman, 1999, p411) adalah suatu bahasa umum yang
menggunakan kosa kata dari suatu bahasa (seperti bahasa Inggris) dan perintah (syntax)
dari bahahas lain (seperti bahasa pemrograman terstruktur). Pseudocode biasanya
dijadikan alternatif pilihan dalam perancangan piranti lunak selain alat bantu berupa
diagram. Tidak ada standarisasi dalam hal penulisan pseudocode.
2.8 State Transititon Diagram
State Transititon Diagram (STD) adalah suatu alat bantu yang digunakan untuk
memodelkan suatu sistem yang memiliki ketergantungan terhadap waktu. STD memiliki
suatu tingkah laku suatu sistem dengan menggambarkan state dan kejadian yang
30
menyebabkan suatu state berubah ke state lain. Komponen-komponen pada STD adalah
sebagai berikut.
1) State,disimbolkan dengan
State mempresentasikan reaksi yang muncul setelah suatu kejadian dilakukan.
Ada 2 jenis state yaitu state awal dan state akhir. State akhir dapat terdiri dari
beberapa state tapi state awal hanya boleh berupa satu state.
2) State Transititon, disimbolkan dengan
Label tersebut menunjukan kejadian yang menyebabkan transisi tersebut terjadi.
3) Kondisi dan aksi, disimbolkan dengan
Kondisi berfungsi mengubah state dan aksi adalah tindakan yang dilakukan
sistem ketika state berubah. Kondisi dan aksi digambarkan dengan anak panah
yang menghubungkan 2 state yang berkaitan.