Back to IF2211 Strategi Algoritma
Topic
Questions/Cues
- Persoalan 1: Coin-Row
- Coin-Row: Relasi Rekursif & Algoritma
- Coin-Row: Contoh & Rekonstruksi
- Persoalan 2: Robot Coin-Collection
- Robot: Relasi Rekursif & Algoritma
- Robot: Contoh & Rekonstruksi
- Persoalan 3: String Editing
- String Editing: Relasi Rekursif
- String Editing: Contoh & Rekonstruksi
- Persoalan 4: Reliability Design
- Reliability: Fungsi Multiplikatif & Rekurens
- Reliability: Contoh & Rekonstruksi
Persoalan 1: Coin-Row Problem
- Deskripsi Persoalan:
- Diberikan sebuah baris yang terdiri dari
nkoin dengan nilai .- Tujuannya adalah mengambil sejumlah koin untuk mendapatkan jumlah uang maksimum, dengan syarat tidak boleh mengambil dua koin yang posisinya bersebelahan di barisan awal.
- Penyelesaian dengan Dynamic Programming:
Relasi Rekursif:
- Misalkan adalah jumlah maksimum yang bisa diambil dari
nkoin pertama.- Untuk menentukan , kita mempertimbangkan dua pilihan untuk koin ke-
n:
- Ambil koin ke-
n: Keuntungannya adalah nilai koin tersebut () ditambah keuntungan maksimum darin-2koin pertama (karena koinn-1tidak bisa diambil), yaitu .- Tidak ambil koin ke-
n: Keuntungannya sama dengan keuntungan maksimum darin-1koin pertama, yaitu .- Kita memilih yang terbesar dari kedua pilihan tersebut.
- Formula: untuk . Basis: dan . 6]
Algoritma (Bottom-Up):
ALGORITHM CoinRow(C[1..n]) F[0] <- 0; F[1] <- C[1] for i <- 2 to n do F[i] <- max(C[i] + F[i-2], F[i-1]) return F[n]Contoh Perhitungan:
- Diberikan barisan koin dengan nilai: 5, 1, 2, 10, 6, 2.
- Perhitungan tabel
Fdilakukan langkah demi langkah: 9]
F[0] = 0F[1] = 5F[2] = max(C[2]+F[0], F[1]) = max(1+0, 5) = 5F[3] = max(C[3]+F[1], F[2]) = max(2+5, 5) = 7F[4] = max(C[4]+F[2], F[3]) = max(10+5, 7) = 15F[5] = max(C[5]+F[3], F[4]) = max(6+7, 15) = 15F[6] = max(C[6]+F[4], F[5]) = max(2+15, 15) = 17- Jumlah maksimum yang bisa didapat adalah 17. 8]
Rekonstruksi Solusi (Mencari Koin yang Dipilih):
- Kita melakukan penelusuran mundur (backtrace) untuk melihat pilihan mana yang menghasilkan nilai maksimum di setiap langkah. 11]
- berasal dari , artinya koin diambil. 12]
- Lanjut ke , yang berasal dari , artinya koin diambil. 13]
- Lanjut ke , yang berasal dari , artinya koin tidak diambil. 14]
- berarti koin diambil. 14]
- Himpunan koin optimal: atau {5, 10, 2}. 15]
Kompleksitas: Waktu dan Ruang . 16]
Persoalan 2: Robot Coin-Collection
- Deskripsi Persoalan:
- Terdapat papan berukuran
n x mdengan beberapa koin diletakkan di sel-selnya (maksimal satu koin per sel). 19]- Sebuah robot mulai dari sel kiri atas
(1,1)dan harus mencapai sel kanan bawah(n,m). 20]- Robot hanya bisa bergerak satu sel ke kanan atau satu sel ke bawah. 21]
- Tujuan: Mengumpulkan jumlah koin semaksimal mungkin. 20]
- Penyelesaian dengan Dynamic Programming:
- Relasi Rekursif:
- Misalkan adalah jumlah koin maksimum yang bisa dikumpulkan untuk mencapai sel
(i,j). 24]- Robot bisa mencapai
(i,j)hanya dari sel(i-1,j)(atas) atau(i,j-1)(kiri). 25]- Maka, jumlah koin maksimum di
(i,j)adalah jumlah maksimum dari kedua sel sebelumnya, ditambah koin yang mungkin ada di(i,j)itu sendiri. 29]- Formula: 30] di mana jika ada koin di
(i,j), dan 0 jika tidak. 30]- Basis: dan . 30]
- Algoritma:
- Isi tabel
Fberukurann x mbaris demi baris atau kolom demi kolom. 31, 33]- Rekonstruksi Solusi (Mencari Jalur):
- Lakukan penelusuran mundur dari
F(n,m).- Di sel
(i,j), jika , maka jalur optimal datang dari atas. 34]- Jika , maka jalur optimal datang dari kiri. 35]
- Jika nilainya sama, jalur bisa datang dari kedua arah, menghasilkan beberapa jalur optimal. 36]
- Contoh pada Gambar 8.3 menunjukkan ada dua jalur optimal untuk mengumpulkan 5 koin. 37, 40]
- Kompleksitas: Waktu dan Ruang . 34]
Persoalan 3: String Editing
- Deskripsi Persoalan:
- Diberikan dua string, X dan Y. 41]
- Tujuan: Mengubah string X menjadi Y menggunakan urutan operasi edit dengan total biaya minimum. 42, 44]
- Operasi yang Diizinkan: Insert (sisip), Delete (hapus), dan Change (ubah), masing-masing memiliki biaya. 42]
- Penyelesaian dengan Dynamic Programming:
- Prinsip Optimalitas: Berlaku untuk masalah ini. 48] Jika seluruh urutan edit optimal, maka setelah operasi pertama, sisa urutan edit juga harus optimal untuk string yang tersisa. 48]
- Relasi Rekursif:
- Misalkan
cost(i,j)adalah biaya minimum untuk mengubahX[1..i](i karakter pertama X) menjadiY[1..j](j karakter pertama Y). 50]- Untuk menghitung
cost(i,j), ada tiga kemungkinan operasi terakhir:
- Hapus : Ubah
X[1..i-1]menjadiY[1..j], lalu hapus . Biaya:cost(i-1, j) + D(x_i). 56]- Ubah menjadi : Ubah
X[1..i-1]menjadiY[1..j-1], lalu ubah menjadi . Biaya:cost(i-1, j-1) + C(x_i, y_j). 56]- Sisip : Ubah
X[1..i]menjadiY[1..j-1], lalu sisipkan . Biaya:cost(i, j-1) + I(y_j). 58]- Formula:
cost(i,j) = min { opsi 1, opsi 2, opsi 3 }59]- Basis:
cost(0,0)=0.cost(i,0)adalah biaya menghapusikarakter pertama X.cost(0,j)adalah biaya menyisipkanjkarakter pertama Y. 52, 54]- Contoh & Rekonstruksi:
- Untuk X = “aabab” dan Y = “babb”, dengan biaya D=1, I=1, C=2, tabel biaya
cost(i,j)dapat dihitung. 69]- Nilai akhir
cost(5,4)adalah 3, yang merupakan biaya edit minimum. 74]- Dengan menelusuri kembali tabel, dapat ditemukan urutan editnya. Contoh, salah satu urutan optimal adalah hapus , hapus , dan sisipkan . 74]
- Kompleksitas: Waktu
O(mn). 66]Persoalan 4: Reliability Design
- Deskripsi Persoalan:
- Sebuah sistem terdiri dari
nperangkat () yang terhubung secara seri. 79]- Untuk meningkatkan keandalan, setiap perangkat pada tahap
idapat diduplikasi sebanyak kali secara paralel. 83]- Tujuan: Memilih jumlah duplikasi () untuk setiap perangkat guna memaksimalkan keandalan total sistem, dengan batasan total biaya tidak melebihi C. 92, 94]
- Penyelesaian dengan Dynamic Programming:
- Fungsi Multiplikatif: Keandalan total sistem adalah produk dari keandalan setiap tahap: . 91]
- Relasi Rekursif:
- Mirip dengan Knapsack/Capital Budgeting, tetapi menggunakan perkalian.
- Misalkan adalah keandalan maksimum dari
itahap pertama dengan total biaya tidak melebihix. 9- Formula: 100] di mana adalah batas atas jumlah duplikasi untuk perangkat
iyang dimungkinkan oleh anggaran. 96]- Basis: (keandalan sistem dengan 0 tahap adalah 100%). 100]
- Contoh & Rekonstruksi:
- Contoh diberikan dengan 3 tahap dan biaya total C=105. 102, 103]
- Perhitungan dilakukan dengan menghasilkan himpunan
S^iyang berisi pasangan(keandalan, biaya)yang tidak terdominasi. 101, 106]- Hasil akhir yang didapat adalah keandalan 0.648 dengan biaya 100. 110]
- Dengan menelusuri balik, ditemukan bahwa konfigurasi optimalnya adalah , , dan . 110]
Additional Information (Optional)
Aspek Teknis Lanjutan
- Optimisasi Ruang (Space Optimization): Untuk banyak masalah DP, kebutuhan ruang bisa dikurangi secara signifikan.
- Coin-Row: Untuk menghitung
F[i], kita hanya butuhF[i-1]danF[i-2]. Kita tidak perlu menyimpan seluruh arrayF. Dengan hanya menyimpan dua nilai sebelumnya, kompleksitas ruang dapat dikurangi dariO(n)menjadiO(1).- Robot-Collection & String Editing: Untuk menghitung baris
ipada tabel, kita hanya membutuhkan data dari barisi-1. Jadi, kita tidak perlu menyimpan seluruh tabeln x m. Kita hanya perlu menyimpan dua baris pada satu waktu, mengurangi kompleksitas ruang dariO(nm)menjadiO(m)(atauO(n)jika per kolom).- Levenshtein Distance: Masalah String Editing adalah implementasi dari algoritma yang sangat terkenal untuk menghitung Levenshtein Distance. Jarak ini mengukur “perbedaan” antara dua string dan memiliki aplikasi yang sangat luas, mulai dari fitur spell-checker di pengolah kata, deteksi plagiarisme, hingga penyelarasan sekuens DNA dalam bioinformatika.
- DP dengan Fungsi Multiplikatif: Persoalan Reliability Design menunjukkan bagaimana kerangka DP dapat beradaptasi. Logika dasarnya tetap sama (membuat keputusan di setiap tahap), tetapi cara mengkombinasikan hasilnya berubah. Alih-alih
+dan0(sebagai identitas aditif), kita menggunakan*dan1(sebagai identitas multiplikatif).Eksplorasi Mandiri
- Implementasi String Editing: Cobalah untuk mengimplementasikan algoritma String Editing. Visualisasikan tabel
cost(i,j)yang dihasilkan. Setelah itu, implementasikan juga fungsi backtracing untuk mencetak urutan edit (delete, insert, change) yang sebenarnya.- Variasi Coin-Row: Bagaimana jika aturannya diubah: “Anda boleh mengambil koin yang bersebelahan, tetapi tidak boleh mengambil tiga koin berturut-turut”? Coba pikirkan bagaimana relasi rekursif
F(n)akan berubah. (Petunjuk: state Anda mungkin perlu menyimpan lebih banyak informasi daripada hanyaF(n)).- Koneksi ke Masalah Lain: Perhatikan bahwa Robot Coin-Collection adalah variasi dari masalah “Longest Common Subsequence” (LCS) dan “Shortest Path on a DAG” (Directed Acyclic Graph). Memahami koneksi ini akan memperluas kemampuan Anda dalam mengenali pola-pola DP.