My first Magazine pemrograman-kompetitif-dasar | Page 84

7 Dynamic Programming 12: 13: 14: 15: 16: best ← min(best, d p[i − 1][c − a[i]] + 1) end if d p[i][c] ← best end for end for return d p[N][G] 18: end function 17: 7.2.3 Longest Common Subsequence Contoh Soal 7.4: Longest Common Subsequence (LCS) Diberikan 2 buah string A dan B. Panjang kedua string tidak harus sama. Berapa panjang string terpanjang yang merupakan subsequence dari A dan B? Subsequence dari sebuah string adalah string lain yang dapat dibentuk dengan menghapus beberapa (boleh nol) karakter dari string asli tanpa mengubah urutannya. Sebagai contoh, "gak", "oak", "gerak", dan "gerobak" adalah subsequence dari "gerobak", sementara "garuk", "ombak", "gerebek", dan "georbak" bukan. Contoh A = "ajaib" B = "badai" LCS dari A dan B adalah "aai", dengan panjang 3. Kita bisa definisikan d p(i, j) sebagai panjang subsequence terpanjang dari i karakter pertama dari A dan j karakter pertama dari B. Jika karakter ke-i dari A, atau dinotasikan dengan A i sama dengan B j , maka kita bisa memasangkan karakter tersebut sebagai kandidat subsequence . Jika A i 6 = B j , maka A i tidak bisa dipasangkan dengan B j . Dalam kasus ini, kita perlu mengecek subpersoalan untuk mencari LCS dari i karakter pertama pada A dan j − 1 karakter pertama pada B, atau i − 1 karakter pertama pada A dan j karakter pertama pada B, lalu dipilih yang menghasilkan LCS terpanjang. Dari sini kita juga bisa lihat bahwa jika i atau j adalah 0, maka d p(i, j) = 0. Ini adalah base case dari persoalan LCS. Dengan demikian d p(i, j) dapat dirumuskan sebagai berikut:  i = 0 ∨ j = 0  0, d p(i − 1, j − 1) + 1, A i = B j d p(i, j) =  max(d p(i − 1, j), d p(i, j − 1)), A i 6 = B j Analisis Kompleksitas Jika panjang string A adalah M dan panjang string B adalah N, maka terdapat O(M) nilai berbeda untuk nilai i dan O(N) nilai berbeda untuk nilai j pada d p(i, j). Dibutuhkan O(1) untuk menghitung d p(i, j). Sehingga untuk menghitung seluruh nilai d p(i, j) untuk seluruh i dan j dibutuhkan waktu O(NM). 74