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 n koin 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 n koin pertama.
      • Untuk menentukan , kita mempertimbangkan dua pilihan untuk koin ke-n:
        1. Ambil koin ke-n: Keuntungannya adalah nilai koin tersebut () ditambah keuntungan maksimum dari n-2 koin pertama (karena koin n-1 tidak bisa diambil), yaitu .
        2. Tidak ambil koin ke-n: Keuntungannya sama dengan keuntungan maksimum dari n-1 koin 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 F dilakukan langkah demi langkah: 9]
        • F[0] = 0
        • F[1] = 5
        • F[2] = max(C[2]+F[0], F[1]) = max(1+0, 5) = 5
        • F[3] = max(C[3]+F[1], F[2]) = max(2+5, 5) = 7
        • F[4] = max(C[4]+F[2], F[3]) = max(10+5, 7) = 15
        • F[5] = max(C[5]+F[3], F[4]) = max(6+7, 15) = 15
        • F[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]
      1. berasal dari , artinya koin diambil. 12]
      2. Lanjut ke , yang berasal dari , artinya koin diambil. 13]
      3. Lanjut ke , yang berasal dari , artinya koin tidak diambil. 14]
      4. 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 m dengan 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 F berukuran n x m baris 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 mengubah X[1..i] (i karakter pertama X) menjadi Y[1..j] (j karakter pertama Y). 50]
      • Untuk menghitung cost(i,j), ada tiga kemungkinan operasi terakhir:
        1. Hapus : Ubah X[1..i-1] menjadi Y[1..j], lalu hapus . Biaya: cost(i-1, j) + D(x_i). 56]
        2. Ubah menjadi : Ubah X[1..i-1] menjadi Y[1..j-1], lalu ubah menjadi . Biaya: cost(i-1, j-1) + C(x_i, y_j). 56]
        3. Sisip : Ubah X[1..i] menjadi Y[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 menghapus i karakter pertama X. cost(0,j) adalah biaya menyisipkan j karakter 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 n perangkat () yang terhubung secara seri. 79]
    • Untuk meningkatkan keandalan, setiap perangkat pada tahap i dapat 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 i tahap pertama dengan total biaya tidak melebihi x. 9
      • Formula: 100] di mana adalah batas atas jumlah duplikasi untuk perangkat i yang 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^i yang 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]