• Tidak ada hasil yang ditemukan

Kisi kisi mata kuliah Strategi Algoritma

N/A
N/A
Florita Kuncoro

Academic year: 2024

Membagikan "Kisi kisi mata kuliah Strategi Algoritma"

Copied!
5
0
0

Teks penuh

(1)
(2)

1.a Tentu, berikut adalah perhitungan manual menggunakan metode Brute Force untuk masalah knapsack yang Anda berikan:

Dengan kapasitas knapsack �=6W=6, dan nilai-nilai bobot (�w) dan keuntungan (�b) sebagai berikut:

�=4�1=3.5,�1=7�2=2.5,�2=5�3=5,�3=10�4=4.5,�4=8nw1w2w3w4=4=3.5,b1=7=2.5,b2=5=5,b3

=10=4.5,b4=8

Kita perlu mencoba semua kombinasi dari 4 barang tersebut, yaitu:

1. Tidak mengambil barang sama sekali (keuntungan = 0) 2. Mengambil barang 1 saja (keuntungan = 7)

3. Mengambil barang 2 saja (keuntungan = 5) 4. Mengambil barang 3 saja (keuntungan = 10) 5. Mengambil barang 4 saja (keuntungan = 8)

6. Mengambil barang 1 dan 2 (keuntungan = 7 + 5 = 12, tetapi bobot = 3.5 + 2.5 = 6, melebihi kapasitas knapsack)

7. Mengambil barang 1 dan 3 (keuntungan = 7 + 10 = 17, tetapi bobot = 3.5 + 5 = 8.5, melebihi kapasitas knapsack)

8. Mengambil barang 1 dan 4 (keuntungan = 7 + 8 = 15, tetapi bobot = 3.5 + 4.5 = 8, melebihi kapasitas knapsack)

9. Mengambil barang 2 dan 3 (keuntungan = 5 + 10 = 15, tetapi bobot = 2.5 + 5 = 7.5, melebihi kapasitas knapsack)

10. Mengambil barang 2 dan 4 (keuntungan = 5 + 8 = 13, bobot = 2.5 + 4.5 = 7, tidak melebihi kapasitas knapsack)

(3)

11. Mengambil barang 3 dan 4 (keuntungan = 10 + 8 = 18, tetapi bobot = 5 + 4.5 = 9.5, melebihi kapasitas knapsack)

Dari semua kombinasi tersebut, kombinasi yang memberikan keuntungan maksimum adalah mengambil barang 2 dan 4, dengan keuntungan total 13 dan bobot total 7 (tidak melebihi kapasitas knapsack).

1.b

def knapSack(W, w, val, n):

if n == 0 or W == 0:

return 0

if w[n-1] > W:

return knapSack(W, w, val, n-1)

else:

return max(val[n-1] + knapSack(W-w[n-1], w, val, n-1), knapSack(W, w, val, n-1))

# Input nilai-nilai W = 6

n = 4 # Jumlah total barang, bukan indeks terakhir w = [3.5, 2.5, 5, 4.5]

val = [7, 5, 10, 8]

# Memanggil fungsi knapSack dan mencetak hasilnya

result = knapSack(W, w, val, n) # Menggunakan jumlah total barang print("Keuntungan maksimum:", result)

(4)

2.a. Mengurutkan elemen-elemen secara manual menggunakan metode Divide and Conquer:

Langkah-langkah pengurutan dengan Divide and Conquer:

1. Membagi tabel menjadi dua bagian yang sama panjang (jika panjang ganjil, salah satu bagian akan memiliki satu elemen lebih banyak): Tabel: [5, 12, 3, 9, 1, 20, 7, 2] Bagian kiri: [5, 12, 3, 9]

Bagian kanan: [1, 20, 7, 2]

2. Mengurutkan masing-masing bagian secara terpisah menggunakan metode Divide and Conquer: Bagian kiri: [5, 12, 3, 9] -> [3, 5, 9, 12] Bagian kanan: [1, 20, 7, 2] -> [1, 2, 7, 20]

3. Menggabungkan kedua bagian yang sudah terurut menjadi satu tabel terurut: [3, 5, 9, 12] dan [1, 2, 7, 20] Tabel terurut: [1, 2, 3, 5, 7, 9, 12, 20]

Jadi, urutan elemen-elemen dalam tabel setelah diurutkan secara ascending (menaik) dengan metode Divide and Conquer adalah: [1, 2, 3, 5, 7, 9, 12, 20].

2.b def merge_sort(arr):

if len(arr) > 1:

mid = len(arr) // 2 left_half = arr[:mid]

right_half = arr[mid:]

merge_sort(left_half) merge_sort(right_half)

i = j = k = 0

while i < len(left_half) and j < len(right_half):

if left_half[i] < right_half[j]:

arr[k] = left_half[i]

i += 1 else:

arr[k] = right_half[j]

j += 1 k += 1

(5)

while i < len(left_half):

arr[k] = left_half[i]

i += 1 k += 1

while j < len(right_half):

arr[k] = right_half[j]

j += 1 k += 1

def print_array(arr):

for i in range(len(arr)):

print(arr[i], end=" ") print()

# Tabel awal

arr = [5, 12, 3, 9, 1, 20, 7, 2]

print("Tabel sebelum diurutkan:") print_array(arr)

# Mengurutkan menggunakan merge sort merge_sort(arr)

print("\nTabel setelah diurutkan secara ascending:") print_array(arr)

Referensi

Dokumen terkait

• Strategi greedy : Pada setiap langkah, pilih koin dengan nilai terbesar dari himpunan koin yang tersisa... • Agar pemilihan koin berikutnya optimal, maka perlu

• Tiap-tiap upa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam

Terdapat dua metode sorting paling umum yang dipakai dalam implementasi algoritma Divide and Conquer, yaitu quick sort dan merge sort (di luar kedua ini masih ada metode

Disajikan langkah-langkah metode ilmiah secara acak, siswa dapat menentukan langkah-langkah dalam metode ilmiah.. X/1 Melakukan pengamatan observasi / Disajikan menginterpretasikan

Divide and Conquer adalah metode pemecahan masalah yang bekerja dengan membagi masalah menjadi beberapa upa-masalah yang lebih kecil, kemudian menyelesaikan masing-masing

• Ternyata, perkalian dengan algoritma Divide and Conquer seperti di atas belum memperbaiki kompleksitas waktu algoritmanya, sama seperti perkalian secara brute force..

Untuk mengurangi pergeseran terlalu jauh maka larik diurutkan setiap k elemen dengan menggunakan metode pengurutan sisip( k dinamakan step atau increment), misal k=5.

Divide and Conquer adalah metode pemecahan masalah yang bekerja dengan membagi masalah menjadi beberapa upa-masalah yang lebih kecil, kemudian menyelesaikan masing-masing