Algoritma Brute Force
1/0 knapsack problem
Knapsack problem didefinisikan sebagai berikut. Diberikan n objek dan ransel berkapasitas
K. Setiap objek i memiliki bobot wi dan untung pi . Tujuannya adalah menyeleksi objek
sehingga total keuntungan dari objek terpilih maksimal, dan berat total benda tidak melebihi
kapasitas ransel.
a. Apa makna “1/0” pada 1/0 Knapsack Problem?
Dalam masalah Knapsack 1/0, setiap objek dapat diberi tanda "1" untuk dipilih atau
"0" untuk tidak dipilih. Solusi untuk masalah ini adalah kumpulan nilai biner yang
menunjukkan pilihan untuk setiap objek. Misalnya, solusi [1, 0, 1, 0] menandakan
bahwa objek pertama dan ketiga dipilih, sementara objek kedua dan keempat tidak
dipilih. Tujuan utamanya adalah memilih objek sedemikian rupa sehingga total
keuntungan dari objek yang dipilih adalah maksimum, tanpa melebihi kapasitas
ransel.
b. Buatlah sebuah algoritma brute-force untuk menyeleksi objek agar keuntungan
maksimal.
Procedure Knapsack(nilai, berat, kapasitas)
n = banyak nilai
max_profit = 0
best_subset = []
for i from 0 to 2n - 1 do
subset_values = []
subset_weights = []
total_weight = 0
total_value = 0
for j from 0 to n - 1 do
if (i >> j) & 1 == 1 then
tambahkan nilai[j] ke subset_values
tambahkan berat[j] ke subset_weights
total_weight += berat[j]
total_value += nilai[j]
end if
end for
if total_weight <= kapasitas and total_value > max_profit
then
max_profit = total_value
best_subset = subset_values
end if
end for
return max_profit, best_subset
End Procedure
c. Periksalah kebenaran dari algoritma yang Anda rancang.
Untuk memeriksa kebenaran dari rancangan algoritma yang saya buat, saya akan
menjalankannya dengan python untuk mengetahui apakah algoritma yang dibuat
sudah sesuai.
d. Diberikan lima objek dan sebuah ransel berkapasitas K = 20. Lengkapi tabel berikut
untuk menjelaskan karakteristik dari setiap objek.
no object weight profit
1 A 4 7
2 B 5 6
3 C 7 9
4 D 9 8
5 E 3 5
Berikut adalah tabel yang menunjukkan semua 32 kombinasi 5
objek dengan ransel berkapasitas 20, beserta karakteristiknya dan
validasi berat:
No. Object Weig Profit Valid
ht
1 A 4 7 Valid
2 B 5 6 Valid
3 C 7 9 Valid
4 D 9 8 Valid
5 E 3 5 Valid
6 A dan B 9 13 Valid
7 A dan C 11 16 Valid
8 A dan D 13 15 Valid
9 A dan E 7 12 Valid
10 B dan C 12 15 Valid
11 B dan D 14 14 Valid
12 B dan E 8 11 Valid
13 C dan D 16 17 Valid
14 C dan E 10 14 Valid
15 D dan E 12 13 Valid
16 A,B, dan C 16 22 Valid
17 A,B, dan D 18 21 Valid
18 A,B, dan E 12 18 Valid
19 A,C, dan D 20 24 Valid
20 A,C, dan E 14 21 Valid
21 B,C, dan D 21 23 Invalid
22 B,C, dan E 15 20 Valid
23 B,D, dan E 17 19 Valid
24 A,D, dan E 16 20 Valid
25 C,D, dan E 19 22 Valid
26 A,B,C, dan D 25 30 Invalid
27 A,B,C, dan E 19 27 Valid
28 A,B,D, dan E 21 26 Invalid
29 A,C,D, dan E 23 29 Invalid
30 B,C,D, dan E 24 28 Invalid
31 A,B,C,D, dan E 28 35 Invalid
32 (Kosong) 0 0 Valid
e. Hitunglah kompleksitas waktu algoritma rancangan Anda.
Algoritma brute-force ini memiliki kompleksitas waktu O(n ⋅2n ), di mana n mewakili
jumlah objek. Kompleksitas ini muncul dari penggunaan loop bersarang untuk
menghasilkan semua subset objek yang mungkin dan kemudian memeriksa total berat
dan nilai setiap subset. Loop luar menghasilkan 2n subset, sesuai dengan 2n
kombinasi mungkin dari memasukkan atau mengabaikan setiap objek. Dalam setiap
iterasi dari loop luar, loop dalam memindai setiap objek, menghasilkan kompleksitas
O ( n ) per iterasi. Akibatnya, kompleksitas waktu keseluruhan menjadi eksponensial,
membuat algoritma ini tidak efisien untuk nilai n yang besar karena biaya
komputasinya tumbuh dengan cepat seiring dengan jumlah objek.