Anda di halaman 1dari 4

CII2K3-STRATEGI ALGORITMA

Tugas Minggu ke-8


Taufik Azmi Wicahyono-1304212156-
CPI2K3-IF-45-01.2PJJ

PETUNJUK
Unggah jawaban dari tugas ini di LMS pada assignment “Tugas minggu ke-8" dengan ketentuan:
• Cantumkan nama, NIM, dan kelas Strategi Algoritma Anda di dalam dokumen yang
diunggah
• Dokumen diunggah dalam format .pdf (max. 5MB)
• Dokumen yang diunggah diberi nama (file’s name) dengan format ‘[SA] Week08 - <NIM>’,
dimana bagian <NIM> diisi dengan NIM-mu
• Lihat LMS untuk melihat tenggat waktu pengumpulan tugas.

Soal 1
Buatlah pseudo-code algoritma bottom-up dynamic programming untuk permasalahan 0/1
knapsack!

Jawaban :
function knapsack(weights[], values[], capacity):
n = length(weights)
create a 2D array, dp[n+1][capacity+1]

for i from 0 to n:
for w from 0 to capacity:
if i = 0 or w = 0:
dp[i][w] = 0
else if weights[i-1] <= w:
dp[i][w] = max(values[i-1] + dp[i-1][w-weights[i-1]], dp[i-1][w])
else:
dp[i][w] = dp[i-1][w]

return dp[n][capacity]

halaman 1 dari 2
- weights[] adalah array berisi bobot dari setiap item.
- values[] adalah array berisi nilai dari setiap item yang sesuai dengan bobot.
- capacity adalah kapasitas maksimum knapsack.
- dp adalah tabel dinamis yang menyimpan hasil subproblem.

Soal 2
Selesaikan permasalahan 0/1 knapsack dengan maksimum kapasitas K = 40 dan tiga objek
dengan properti sbb:
w1 = 5, p1 = 50
w2 = 15, p2 = 60
w3 = 20, p3 = 120
w3 = 10, p3 = 40
dengan menggunakan top-down dynamic programming! Buatlah tabelnya dan tarik kesimpu-
lannya!

Jawaban :
source code
def knapsack_top_down(weights, values, capacity):
n = len(weights)
memo = [[-1 for _ in range(capacity + 1)] for _ in range(n + 1)]

def knapsack_recursive(cap, idx):


if idx == 0 or cap == 0:
return 0

if memo[idx][cap] != -1:
return memo[idx][cap]

if weights[idx - 1] > cap:


memo[idx][cap] = knapsack_recursive(cap, idx - 1)
return memo[idx][cap]
else:
memo[idx][cap] = max(values[idx - 1] + knapsack_recursive(cap - weights[idx - 1],
idx - 1),
knapsack_recursive(cap, idx - 1))
return memo[idx][cap]

max_value = knapsack_recursive(capacity, n)

# Printing the memo table


print("Tabel Memo:")
for row in memo:
print(row)
halaman 2 dari 2
return max_value

# Objek-objek dengan properti yang diberikan


weights = [5, 15, 20]
values = [50, 60, 120]
capacity = 40

result = knapsack_top_down(weights, values, capacity)


print("\nNilai maksimum yang dapat diperoleh dari knapsack adalah:", result)

Maka hasil nilai maksimum yang diperoleh adalah : 230

Kesimpulan :
Dengan menggunakan pendekatan top-down dynamic programming, nilai maksimum
yang dapat diperoleh dari knapsack dengan objek-objek dan kapasitas yang diberikan
adalah 230.

Soal 3
Salah satu bisnis yang cukup berat mendapat hantaman akibat pandemi setahun ini adalah
bisnis restoran. Restoran Maju Terus Pantang Mundur adalah satu dari sekian sedikit restoran
yang masih tetap bertahan. Untuk dapat tetap buka, restoran ini harus melakukan sejumlah
perubahan salah satunya adalah layout tempat makan. Berikut adalah layout tempat makan
restoran sebelum pandemi datang.

halaman 3 dari 2
CII2K3 – STRATEGI ALGORITMA

Jarak antarmeja yang terlalu dekat sehingga dinilai tidak memenuhi prokes membuat restoran
terpaksa harus meniadakan minimal satu meja yang bersisian dengan meja lain. Misal, apabila
restoran akan mempertahankan meja 2, maka meja 1 dan 3 harus ditiadakan atau apabila
meja 10 ingin dipertahankan, maka meja 9 harus ditiadakan. Salah satu contoh layout yang
dibolehkan adalah misalnya mempertahankan meja 1, 3, 5, 7, dan 10.
Asumsi:
• Jumlah kursi yang mengelilingi meja tidak dapat diubah jumlahnya, dan
• Keuntungan yang diperoleh sebanding dengan jumlah kursi yang dipertahankan. Jadi, se-
makin banyak kursi yang dipertahankan, semakin besar pula keuntungan yang diperoleh
restoran tersebut (meja 4, 8, dan 10 memberikan keuntungan paling banyak, sementara
meja 7 memberikan keuntungan paling sedikit).
Berdasarkan asumsi di atas, bantulah pemilik restoran untuk memilih meja mana yang se-
baiknya dipertahankan supaya restoran memperoleh keuntungan yang optimum. Gunakan
strategi Dynamic Programming untuk menyelesaikan masalah di atas, buat tabelnya, dan
rekonstruksi solusi yang didapatkan.

Jawaban :

dari perhitungan stategi dynamic programming ,maka layout kursi yang memiliki adalah
1 ,4 ,6, 8 ,10 dengan keuntungan 48 kursi / 5 meja = 9,6

halaman 4 dari 2

Anda mungkin juga menyukai