Makalah Analisis Algoritma Knapsack Indonesia
BAB I
PENDAHULUAN
1.1
LATAR BELAKANG
Dari berbagai masalah yang sering muncul dalam kehidupan kita,
optimasi selalu menarik untuk diperbincangkan. Dalam pemrograman,
optimasi pun memiliki tempatnya tersendiri. Baik itu menjadi masalah yang
harus dipecahkan, maupun keharusan dalam membuat program yang
optimal. Permasalahan Knapsack adalah suatu permasalahan dalam
menentukan pemilihan objek yang masing-masing mempunyai bobot atau
berat (weight) untuk dimuat dalam sebuah media penyimpanan tanpa
memenuhi kapasitas media penyimpanan tersebut sehingga di peroleh hasil
yang optimal dan keuntungan maksimum (profit).
Dalam makalah ini akan dibahas persoalan 0-1 Knapsack yang
mempunyai ciri setiap barang tersedia satu unit, akibatnya barang harus
diambil atau tidak sama sekali. Persoalan 0-1 Knapsack dapat diselesaikan
menggunakan beberapa Algoritma, dalam makalah ini akan digunakan
Algoritma Brute Force dengan menggunakan Bahasa Pemrograman C#.
1.2
PERUMUSAN MASALAH
Berdasarkan
latar
belakang
masalah,
maka
yang
menjadi
permasalahan adalah bagaimana mengaplikasikan Algoritma Brute Force
untuk mengatasi masalah 0-1 Knapsack. Permasalahan 0-1 Knapsack adalah
permasalahan optimasi kombinatorial, ilustrasinya adalah : “diberikan
sekumpulan barang untuk dimasukkan dalam sebuah wadah sehingga total
beratnya kurang dari atau sama dengan berat yang telah ditentukan, dan total
nilainya harus sebesar mungkin.”
1.3
BATASAN MASALAH
Adapun batasan masalah dalam penulisan makalah ini adalah sebagai
berikut:
1 | Knapsack 0-1 dengan Algoritma Brute Force
1.
Hanya membahas Knapsack 0-1 atau Integer Knapsack
2.
Membahas masalah 0-1 Knapsack dengan Algoritma Brute Force.
3.
1.4
TUJUAN
Adapun tujuan dari makalah 0-1 Knapsack ini adalah:
1.
Menyelesaikan tugas akhir mata kuliah Analisis Algoritma
2.
Mempelajari Knapsack Algoritma
3.
Bagaimana menyelesaikan atau memecahkan Knapsack Problem
dengan menggunakan Algoritma Brute Force agar memperoleh solusi
yang optimal dengan menggunakan Bahasa Pemrograman C#.
1.5
MANFAAT
2 | Knapsack 0-1 dengan Algoritma Brute Force
BAB II
LANDASAN TEORI
2.1
BAHASA PEMROGRAMAN C#
C# (See-Sharp) adalah bahasa pemrograman baru yang diciptakan
Microsoft
yang
digunakan
oleh
banyak
developer
.NET
untuk
mengembangkan applikas dengan platform .NET
Berikut beberapa kelebihan C#
a.
Sederhana (Simple)
C# bersifat sederhana, karena bahasa ini didasarkan kepada
bahasa C dan C++. Dalam C#, beberapa aspek seperti statements,
expression, operators, dan beberapa fungsi diadopsi langsung dari C
dan C++ namun dengan berbagai perbaikan yang membuat bahasanya
menjadi lebih sederhana.
b.
Object Oriented Language
C# memenuhi syarat-syarat sebagai sebuah bahasa pemrograman
yang bersifat Object Oriented, yaitu encapsulation, inheritance dan
polymorphism.
c.
Powerfull dan Fleksibel
C# bisa digunakan untuk membuat berbagai macam aplikasi,
seperti aplikasi pengolah kata, grafik, spreadsheets, atau bahkan
membuat kompiler untuk sebuah bahasa permrograman.
3 | Knapsack 0-1 dengan Algoritma Brute Force
d.
Efisien
C# tidak memiliki terlalu banyak keyword, sehingga dapat
mengurangi kerumitan.
e.
Modular
Kode C# ditulis dengan pembagian masing Class-Class (classes)
yang terdiri dari beberapa routines yang disebut sebagai member
methods. Class-Class dan metode-metode ini dapat digunakan
kembali oleh program atau aplikasi lain. Hanya dengan memberikan
informasi yang dibutuhkan oleh Class dan metode yang dimaksud,
maka kita akan dapat membuat suata kode yang dapat digunakan oleh
satu atau beberapa aplikasi dan program (reusable code).
2.2. PENGERTIAN KNAPSACK
Knapsack merupakan salah satu masalah yang sering muncul dalam
kasus optimasi dan kombinatorial yang banyak ditemukan pada literaturliteratur lama dan hingga kini permasalahan ini masih banyak ditemukan
dalam kehidupan sehari-hari. Dalam dunia nyata permasalahan Knapsack ini
sering sekali digunakan terutama pada bidang (jasa) pengangkutan barang
(seperti pengangkutan peti kemas dalam sebuah kapal). Dalam usaha
tersebut,
diinginkan
suatu
keuntungan
yang
maksimal
untuk
mengangkut barang yang ada dengan tidak melebihi batas kapasitas
yang ada. Berdasarkan persoalan tersebut, diharapkan ada suatu solusi
yang secara otomatis dalam mengatasi persoalan itu. Problem Knapsack
adalah permasalahan optimasi kombinatorial, dimana kita harus mencari
solusi terbaik dari banyak kemungkinan yang dihasilkan.
Macam-macam knapsack
Integer Knapsack
Integer Knapsack. Dalam persoalan ini, kita diberikan n
buah objek yang masing-masing memiliki nilai bobot dan keuntungan.
4 | Knapsack 0-1 dengan Algoritma Brute Force
Kita diminta untuk memilih objek-objek yang akan dimasukkan ke
dalam Knapsack (karung) yang memiliki bobot maksimum W
sehingga didapat keuntungan yang maksimum. Persoalan ini disebut
Integer Knapsack karena tiap objek hanya memiliki dua status yaitu
terpilih atau tidak.
Permasalahan tersebut dapat dinyatakan dalam bentuk formal sebagai
berikut :
Diberikan n buah objek dengan bobot masing-masing w1, w2, ..., wn
dan keuntungan p1, p2, ..., pn. Lalu terdapat sebuah knapsack dengan
bobot maksimum K. Solusi dari persoalan diatas dinyatakan dalam
vektor n-tupel:
X = {x1, x2, ..., xn} dimana xi bernilai 1 jika objek ke-i dipilh dan
bernilai 0 jika objek ke-i tidak dipilih. Misalnya X = {1, 0, 0}
merupakan solusi dimana objek yang dipilih ialah objek ke-1,
sedangkan objek ke-2 dan ke-3 tidak dipilih.
Solusi dihasilkan dengan batasan
Fractional Knapsack
Barang boleh dibawa sebagian saja (unit dalam pecahan). Versi
problem ini menjadi masuk akal apabila barang yang tersedia
dapat dibagi-bagi misalnya gula, tepung, dan sebagainya.
Bounded Knapsack problem
Setiap barang tersedia sebanyak N unit (jumlahnya terbatas).
Unbounded Knapsack problem
Setiap barang tersedia lebih dari 1 unit, jumlahnyatidak terbatas.
5 | Knapsack 0-1 dengan Algoritma Brute Force
2.3. ALGORITMA BRUTE FORCE
Brute
Force
adalah
sebuah
pendekatan
yang
lempang
(straightforward) untuk memecahkan suatu masalah, biasanya didasarkan
pada pernyataan masalah (problem statement) dan definisi konsep yang
dilibatkan. Algoritma brute force memecahkan masalah dengan sangat
sederhana, langsung dan dengan cara yang jelas (obvious way).
Karakteristik Algoritma Brute Force
1. Algoritma brute force umumnya tidak "cerdas" dan tidak mangkus,
karena
ia
membutuhkan
jumlah
langkah
yang
besar
dalam
penyelesaiannya. Kadang-kadang algoritma brute force disebut juga
algoritma naif (naïve algorithm).
2. Algoritma brute force seringkali merupakan pilihan yang kurang
disukai karena ketidakmangkusannya itu, tetapi dengan mencari polapola yang mendasar, keteraturan, atau trik-trik khusus, biasanya akan
membantu kita menemukan algoritma yang lebih cerdas dan lebih
mangkus.
3. Untuk masalah yang ukurannya kecil, kesederhanaan brute force
biasanya
Algoritma
lebih
brute
diperhitungkan
force
sering
daripada
digunakan
ketidakmangkusannya.
sebagai
basis
bila
membandingkan beberapa alternatif algoritma yang mangkus.
4. Algoritma brute force seringkali lebih mudah diimplementasikan
daripada algoritma yang lebih canggih, dan karena kesederhanaannya,
kadang-kadang algoritma brute force dapat lebih mangkus (ditinjau dari
segi implementasi).
6 | Knapsack 0-1 dengan Algoritma Brute Force
Prinsip pencarian solusi permasalahan 0-1 Knapsack menggunakan
algoritma brute force adalah:
1. Menumerasikan list semua himpunan bagian dari himpunan dengan n
objek.
2. Menghitung total keuntungan dari setiap himpunan bagian dari langkah
1.
3. Memilih himpunan bagian yang memberikan total keuntungan terbesar.
7 | Knapsack 0-1 dengan Algoritma Brute Force
BAB III
PEMBAHASAN
3.1. PERANCANGAN SISTEM
Cara kerja program secara garis besar adalah mencari nilai barang
yang paling maksimum dengan berat barang tidak melebihi kapasitas yang
tersedia. Pencariannya menggunakan Algoritma Brute Force.
Berikut adalah gambar blok diagram sistem:
Input
Proses
penyelesaiian
Knapsack
problem
dengan Algoritma Brute
Force
Output
3.2. PERMASALAHAN DAN PENYELESAIAN 0-1 KNAPSACK
Berikut adalah permasalah 0-1 Knapsack yang akan dibahas.
Diketahui:
n=4
w1 = 2; p1 = 20
w2 = 5; p2 = 30
w3 = 10; p3 = 50
w4 = 5; p4 = 10
Kapasitas knapsack K = 16
Langkah-langkah penyelesaian permasalahan diatas adalah sebagai berikut.
a. Membuat himpunan bagian dengan rumus 2n
Jika jumlah n pada persoalan diatas adalah 4, maka jumlah himpunan
bagian adalah 24 = 16
8 | Knapsack 0-1 dengan Algoritma Brute Force
Berikut Tabel Himpunan Bagian.
Himpunan Bagian
{}
{1}
{2}
{3}
{4}
{1,2}
{1,3}
{1,4}
{2,3}
{2,4}
{3,4}
{1,2,3}
{1,2,4}
{1,3,4}
{2,3,4}
{1,2,3,4}
Total Bobot
0
2
5
10
5
7
12
7
15
10
15
17
12
17
20
22
Total Keuntungan
0
20
30
50
10
50
70
30
80
40
60
Tidak Layak
60
Tidak Layak
Tidak Layak
Tidak Layak
Dari tabel diatas diperoleh kesimpulan sebagai berikut:
a. Barang yang memberikan keuntungan maksimum adalah {2, 3}
dengan nilai 80.
9 | Knapsack 0-1 dengan Algoritma Brute Force
b. Dengan demikian, maka penyelesaiannya adalah X= {0, 1, 1, 0}
3.3. CODING dan OUTPUT
10 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
class KnapsackBruteForce
{
public double Capacity { get; set; }
public Item[] Items { get; set; }
public Data Run()
{
var bestValue = 0d;
var bestPosition = 0;
var size = Items.Length;
var permutations = (long)Math.Pow(2, size);
for (var i = 0; i < permutations; i++)
{
var total = 0d;
var weight = 0d;
for (var j = 0; j < size; j++)
{
// if bit not included then skip
if (((i >> j) & 1) != 1) continue;
total += Items[j].v;
weight += Items[j].w;
}
if (weight bestValue)
{
bestPosition = i;
bestValue = total;
}
}
var include = new List();
for (var j = 0; j < size; j++)
{
// if bit match then add
if (((bestPosition >> j) & 1) == 1)
{
include.Add(Items[j]);
}
}
return new Data { BestValue = bestValue, Include = include };
}
}
11 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
3.4.
DAFTAR PUSTAKA
http://blog.ub.ac.id/ucupucup/2013/06/01/makalah-knapsack-problem-dan-huffman-code/
http://www.ittelkom.ac.id/staf/zka/Materi%20Desain%20Analisis%20Algoritma/
M09Algoritma%20Greedy.pdf
12 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
13 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
PENDAHULUAN
1.1
LATAR BELAKANG
Dari berbagai masalah yang sering muncul dalam kehidupan kita,
optimasi selalu menarik untuk diperbincangkan. Dalam pemrograman,
optimasi pun memiliki tempatnya tersendiri. Baik itu menjadi masalah yang
harus dipecahkan, maupun keharusan dalam membuat program yang
optimal. Permasalahan Knapsack adalah suatu permasalahan dalam
menentukan pemilihan objek yang masing-masing mempunyai bobot atau
berat (weight) untuk dimuat dalam sebuah media penyimpanan tanpa
memenuhi kapasitas media penyimpanan tersebut sehingga di peroleh hasil
yang optimal dan keuntungan maksimum (profit).
Dalam makalah ini akan dibahas persoalan 0-1 Knapsack yang
mempunyai ciri setiap barang tersedia satu unit, akibatnya barang harus
diambil atau tidak sama sekali. Persoalan 0-1 Knapsack dapat diselesaikan
menggunakan beberapa Algoritma, dalam makalah ini akan digunakan
Algoritma Brute Force dengan menggunakan Bahasa Pemrograman C#.
1.2
PERUMUSAN MASALAH
Berdasarkan
latar
belakang
masalah,
maka
yang
menjadi
permasalahan adalah bagaimana mengaplikasikan Algoritma Brute Force
untuk mengatasi masalah 0-1 Knapsack. Permasalahan 0-1 Knapsack adalah
permasalahan optimasi kombinatorial, ilustrasinya adalah : “diberikan
sekumpulan barang untuk dimasukkan dalam sebuah wadah sehingga total
beratnya kurang dari atau sama dengan berat yang telah ditentukan, dan total
nilainya harus sebesar mungkin.”
1.3
BATASAN MASALAH
Adapun batasan masalah dalam penulisan makalah ini adalah sebagai
berikut:
1 | Knapsack 0-1 dengan Algoritma Brute Force
1.
Hanya membahas Knapsack 0-1 atau Integer Knapsack
2.
Membahas masalah 0-1 Knapsack dengan Algoritma Brute Force.
3.
1.4
TUJUAN
Adapun tujuan dari makalah 0-1 Knapsack ini adalah:
1.
Menyelesaikan tugas akhir mata kuliah Analisis Algoritma
2.
Mempelajari Knapsack Algoritma
3.
Bagaimana menyelesaikan atau memecahkan Knapsack Problem
dengan menggunakan Algoritma Brute Force agar memperoleh solusi
yang optimal dengan menggunakan Bahasa Pemrograman C#.
1.5
MANFAAT
2 | Knapsack 0-1 dengan Algoritma Brute Force
BAB II
LANDASAN TEORI
2.1
BAHASA PEMROGRAMAN C#
C# (See-Sharp) adalah bahasa pemrograman baru yang diciptakan
Microsoft
yang
digunakan
oleh
banyak
developer
.NET
untuk
mengembangkan applikas dengan platform .NET
Berikut beberapa kelebihan C#
a.
Sederhana (Simple)
C# bersifat sederhana, karena bahasa ini didasarkan kepada
bahasa C dan C++. Dalam C#, beberapa aspek seperti statements,
expression, operators, dan beberapa fungsi diadopsi langsung dari C
dan C++ namun dengan berbagai perbaikan yang membuat bahasanya
menjadi lebih sederhana.
b.
Object Oriented Language
C# memenuhi syarat-syarat sebagai sebuah bahasa pemrograman
yang bersifat Object Oriented, yaitu encapsulation, inheritance dan
polymorphism.
c.
Powerfull dan Fleksibel
C# bisa digunakan untuk membuat berbagai macam aplikasi,
seperti aplikasi pengolah kata, grafik, spreadsheets, atau bahkan
membuat kompiler untuk sebuah bahasa permrograman.
3 | Knapsack 0-1 dengan Algoritma Brute Force
d.
Efisien
C# tidak memiliki terlalu banyak keyword, sehingga dapat
mengurangi kerumitan.
e.
Modular
Kode C# ditulis dengan pembagian masing Class-Class (classes)
yang terdiri dari beberapa routines yang disebut sebagai member
methods. Class-Class dan metode-metode ini dapat digunakan
kembali oleh program atau aplikasi lain. Hanya dengan memberikan
informasi yang dibutuhkan oleh Class dan metode yang dimaksud,
maka kita akan dapat membuat suata kode yang dapat digunakan oleh
satu atau beberapa aplikasi dan program (reusable code).
2.2. PENGERTIAN KNAPSACK
Knapsack merupakan salah satu masalah yang sering muncul dalam
kasus optimasi dan kombinatorial yang banyak ditemukan pada literaturliteratur lama dan hingga kini permasalahan ini masih banyak ditemukan
dalam kehidupan sehari-hari. Dalam dunia nyata permasalahan Knapsack ini
sering sekali digunakan terutama pada bidang (jasa) pengangkutan barang
(seperti pengangkutan peti kemas dalam sebuah kapal). Dalam usaha
tersebut,
diinginkan
suatu
keuntungan
yang
maksimal
untuk
mengangkut barang yang ada dengan tidak melebihi batas kapasitas
yang ada. Berdasarkan persoalan tersebut, diharapkan ada suatu solusi
yang secara otomatis dalam mengatasi persoalan itu. Problem Knapsack
adalah permasalahan optimasi kombinatorial, dimana kita harus mencari
solusi terbaik dari banyak kemungkinan yang dihasilkan.
Macam-macam knapsack
Integer Knapsack
Integer Knapsack. Dalam persoalan ini, kita diberikan n
buah objek yang masing-masing memiliki nilai bobot dan keuntungan.
4 | Knapsack 0-1 dengan Algoritma Brute Force
Kita diminta untuk memilih objek-objek yang akan dimasukkan ke
dalam Knapsack (karung) yang memiliki bobot maksimum W
sehingga didapat keuntungan yang maksimum. Persoalan ini disebut
Integer Knapsack karena tiap objek hanya memiliki dua status yaitu
terpilih atau tidak.
Permasalahan tersebut dapat dinyatakan dalam bentuk formal sebagai
berikut :
Diberikan n buah objek dengan bobot masing-masing w1, w2, ..., wn
dan keuntungan p1, p2, ..., pn. Lalu terdapat sebuah knapsack dengan
bobot maksimum K. Solusi dari persoalan diatas dinyatakan dalam
vektor n-tupel:
X = {x1, x2, ..., xn} dimana xi bernilai 1 jika objek ke-i dipilh dan
bernilai 0 jika objek ke-i tidak dipilih. Misalnya X = {1, 0, 0}
merupakan solusi dimana objek yang dipilih ialah objek ke-1,
sedangkan objek ke-2 dan ke-3 tidak dipilih.
Solusi dihasilkan dengan batasan
Fractional Knapsack
Barang boleh dibawa sebagian saja (unit dalam pecahan). Versi
problem ini menjadi masuk akal apabila barang yang tersedia
dapat dibagi-bagi misalnya gula, tepung, dan sebagainya.
Bounded Knapsack problem
Setiap barang tersedia sebanyak N unit (jumlahnya terbatas).
Unbounded Knapsack problem
Setiap barang tersedia lebih dari 1 unit, jumlahnyatidak terbatas.
5 | Knapsack 0-1 dengan Algoritma Brute Force
2.3. ALGORITMA BRUTE FORCE
Brute
Force
adalah
sebuah
pendekatan
yang
lempang
(straightforward) untuk memecahkan suatu masalah, biasanya didasarkan
pada pernyataan masalah (problem statement) dan definisi konsep yang
dilibatkan. Algoritma brute force memecahkan masalah dengan sangat
sederhana, langsung dan dengan cara yang jelas (obvious way).
Karakteristik Algoritma Brute Force
1. Algoritma brute force umumnya tidak "cerdas" dan tidak mangkus,
karena
ia
membutuhkan
jumlah
langkah
yang
besar
dalam
penyelesaiannya. Kadang-kadang algoritma brute force disebut juga
algoritma naif (naïve algorithm).
2. Algoritma brute force seringkali merupakan pilihan yang kurang
disukai karena ketidakmangkusannya itu, tetapi dengan mencari polapola yang mendasar, keteraturan, atau trik-trik khusus, biasanya akan
membantu kita menemukan algoritma yang lebih cerdas dan lebih
mangkus.
3. Untuk masalah yang ukurannya kecil, kesederhanaan brute force
biasanya
Algoritma
lebih
brute
diperhitungkan
force
sering
daripada
digunakan
ketidakmangkusannya.
sebagai
basis
bila
membandingkan beberapa alternatif algoritma yang mangkus.
4. Algoritma brute force seringkali lebih mudah diimplementasikan
daripada algoritma yang lebih canggih, dan karena kesederhanaannya,
kadang-kadang algoritma brute force dapat lebih mangkus (ditinjau dari
segi implementasi).
6 | Knapsack 0-1 dengan Algoritma Brute Force
Prinsip pencarian solusi permasalahan 0-1 Knapsack menggunakan
algoritma brute force adalah:
1. Menumerasikan list semua himpunan bagian dari himpunan dengan n
objek.
2. Menghitung total keuntungan dari setiap himpunan bagian dari langkah
1.
3. Memilih himpunan bagian yang memberikan total keuntungan terbesar.
7 | Knapsack 0-1 dengan Algoritma Brute Force
BAB III
PEMBAHASAN
3.1. PERANCANGAN SISTEM
Cara kerja program secara garis besar adalah mencari nilai barang
yang paling maksimum dengan berat barang tidak melebihi kapasitas yang
tersedia. Pencariannya menggunakan Algoritma Brute Force.
Berikut adalah gambar blok diagram sistem:
Input
Proses
penyelesaiian
Knapsack
problem
dengan Algoritma Brute
Force
Output
3.2. PERMASALAHAN DAN PENYELESAIAN 0-1 KNAPSACK
Berikut adalah permasalah 0-1 Knapsack yang akan dibahas.
Diketahui:
n=4
w1 = 2; p1 = 20
w2 = 5; p2 = 30
w3 = 10; p3 = 50
w4 = 5; p4 = 10
Kapasitas knapsack K = 16
Langkah-langkah penyelesaian permasalahan diatas adalah sebagai berikut.
a. Membuat himpunan bagian dengan rumus 2n
Jika jumlah n pada persoalan diatas adalah 4, maka jumlah himpunan
bagian adalah 24 = 16
8 | Knapsack 0-1 dengan Algoritma Brute Force
Berikut Tabel Himpunan Bagian.
Himpunan Bagian
{}
{1}
{2}
{3}
{4}
{1,2}
{1,3}
{1,4}
{2,3}
{2,4}
{3,4}
{1,2,3}
{1,2,4}
{1,3,4}
{2,3,4}
{1,2,3,4}
Total Bobot
0
2
5
10
5
7
12
7
15
10
15
17
12
17
20
22
Total Keuntungan
0
20
30
50
10
50
70
30
80
40
60
Tidak Layak
60
Tidak Layak
Tidak Layak
Tidak Layak
Dari tabel diatas diperoleh kesimpulan sebagai berikut:
a. Barang yang memberikan keuntungan maksimum adalah {2, 3}
dengan nilai 80.
9 | Knapsack 0-1 dengan Algoritma Brute Force
b. Dengan demikian, maka penyelesaiannya adalah X= {0, 1, 1, 0}
3.3. CODING dan OUTPUT
10 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
class KnapsackBruteForce
{
public double Capacity { get; set; }
public Item[] Items { get; set; }
public Data Run()
{
var bestValue = 0d;
var bestPosition = 0;
var size = Items.Length;
var permutations = (long)Math.Pow(2, size);
for (var i = 0; i < permutations; i++)
{
var total = 0d;
var weight = 0d;
for (var j = 0; j < size; j++)
{
// if bit not included then skip
if (((i >> j) & 1) != 1) continue;
total += Items[j].v;
weight += Items[j].w;
}
if (weight bestValue)
{
bestPosition = i;
bestValue = total;
}
}
var include = new List();
for (var j = 0; j < size; j++)
{
// if bit match then add
if (((bestPosition >> j) & 1) == 1)
{
include.Add(Items[j]);
}
}
return new Data { BestValue = bestValue, Include = include };
}
}
11 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
3.4.
DAFTAR PUSTAKA
http://blog.ub.ac.id/ucupucup/2013/06/01/makalah-knapsack-problem-dan-huffman-code/
http://www.ittelkom.ac.id/staf/zka/Materi%20Desain%20Analisis%20Algoritma/
M09Algoritma%20Greedy.pdf
12 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e
13 | K n a p s a c k 0 - 1 d e n g a n A l g o r i t m a B r u t e F o r c e