Anda di halaman 1dari 27

Dynamic Programming

Muhammad Faishol Amirul Mukminin


Outline
1. Definisi
2. Implementasi DP
3. Classical DP
4. Tips
Definisi
Apa itu Dynamic Programming?
● Dynamic Programming (DP) merupakan strategi penyelesaian masalah
dengan cara memecah menjadi beberapa sub masalah yang lebih kecil.
● Skill utama yang diperlukan untuk menguasai teknik ini adalah kemampuan
untuk menentukan problem states dan hubungan antara permasalahan saat
ini dengan sub permasalahannya.
● DP utamanya digunakan untuk menyelesaikan permasalahan mencari nilai
optimal dan menghitung banyak cara.
● Kebanyakan persoalan DP hanya meminta nilai optimalnya/banyak caranya
saja.
Implementasi DP
Overview
● Dalam implementasi dynamic programming, umumnya terdapat dua metode
berbeda.
● Kedua metode ini adalah top-down dan bottom-up.
● Meskipun metode ini berbeda, namun solusi yang dikeluarkan selalu optimal
dan sama.
● Yang membedakan adalah proses dan resource yang digunakan saat
mencari sebuah solusi.
● Terkadang top-down lebih baik dibandingkan bottom-up, namun terkadang
bottom-up lebih baik dibandingkan top-down. Hal ini bergantung pada
permasalahan yang dihadapi
Top-Down (1/2)
● Pendekatan top-down biasa juga disebut memoisasi.
● Kata memoisasi berasal dari "memo", yang artinya catatan.
● Pada top-down, penyelesaian masalah dimulai dari kasus yang besar
● Untuk menyelesaikan kasus yang besar, dibutuhkan solusi dari kasus yang
lebih kecil karena solusi kasus yang lebih kecil belum ada, maka kita akan
mencarinya terlebih dahulu, lalu mencatat hasilnya.
● Hal ini dilakukan secara rekursif.
Top-Down (2/2)
● Top-down merupakan transformasi alami dari rumus rekursif, sehingga
biasanya mudah diimplementasikan.
● Urutan pengisian tabel tidak penting dan hanya menghitung nilai dari fungsi
jika hanya diperlukan.
● Ketika seluruh tabel memo pada akhirnya terisi, bisa saja lebih lambat karena
adanya overhead pemanggilan fungsi.
Bottom-Up (1/2)
● Pada bottom-up, penyelesaian masalah dimulai dari kasus yang kecil.
● Ketika merumuskan rumus rekursif, kita mengetahui jawaban kasus yang
paling kecil, yaitu base case. Informasi ini digunakan untuk menyelesaikan
kasus yang lebih besar.
● Bottom-up biasanya dianalogikan dengan pengisian "tabel DP".
● Berbeda dengan top-down, bottom-up ini dilakukan secara iteratif.
Bottom-Up (2/2)
● Bottom-up tidak mengalami perlambatan dari overhead pemanggilan fungsi.
● Bottom-up juga memungkinkan penggunaan teknik DP lanjutan seperti flying
table, kombinasi dengan struktur data tree, atau teknik-teknik lanjutan lainnya.
● Namun, Anda harus memikirkan urutan pengisian nilai tabel.
● Selain itu, semua tabel harus diisi nilainya walaupun tidak dibutuhkan
akhirnya.
Fibonacci
● Fibonacci merupakan salah satu contoh paling umum untuk DP.
● Fibonacci adalah barisan yang didapat dengan menjumlahkan dua suku
sebelumnya.
● Beberapa suku pertama dari barisan ini adalah 1, 1, 2, 3, 5, 8, ….
● Maka dari itu, misalkan F(n) adalah barisan fibonacci ke-n, diketahui:

F(n) = F(n - 1) + F(n - 2) untuk n > 1

F(1) = 1

● Terlihat bahwa untuk menghitung F(n) kita perlu menyelesaikan


submasalahnya dahulu yakni F(n - 1) dan F(n - 2).
Fibonacci - Top Down
Fibonacci - Bottom Up
Classical DP
Prefix Sum
● Diberikan 105 bilangan dan 105 pertanyaan.
● Setiap pertanyaan, menanyakan hasil penjumlahan bilangan yang berada di
indeks ke-L hingga R (inklusif).
Coin Change
● Diberikan M jenis koin, masing-masing jenis bernilai a1, a2, ..., aM rupiah.
● Asumsikan banyak nya koin untuk setiap nominal yang ada tak terbatas.
● Tentukan banyaknya koin paling sedikit untuk membayar tepat sebesar N
rupiah!
● Sebagai contoh apabila diberi koin 1, 6, dan 10 rupiah. Maka solusi terbaik
untuk mendapatkan 12 rupiah adalah menggunakan 2 koin 6 rupiah.
● Berbeda halnya dengan greedy yang akan menggunakan 2 koin 1 rupiah dan
1 koin 10 rupiah, dimana ini tidak optimal.
0-1 Knapsack
● Diberikan N buah barang, dinomori dari 1
sampai N. Barang ke-i memiliki harga vi
rupiah dan berat wi gram. Kita memiliki
tas yang berkapasitas G gram.
● Kita ingin memasukkan beberapa barang
ke dalam tas, sedemikian sehingga
jumlah berat dari barang-barang yang
kita masukan tidak lebih dari kapasitas
tas dan jumlah harganya sebanyak
mungkin.
● Solusi terbaik untuk kapasitas 14 dan
daftar benda di samping adalah
mengambil barang ke 1, 2, dan 5.
Tips
Kapan menggunakan DP?
1. Terdapat subproblem yang overlapping.
2. Saat solusi optimal dari masalah saat ini dapat dibentuk dari solusi optimal
sub masalahnya.
3. Saat ditanyakan banyak cara, namun memiliki terlalu banyak syarat.
4. Saat ragu dengan metode greedy atau terbukti tidak dapat diselesaikan
dengan greedy.
5. Saat dimensi DP nya memang mencukupi.
Bagaimana merumuskan DP?
1. Tentukan statenya dengan mencari hal-hal yang mempengaruhi hasil,
misalnya panjang sekuens, digit terakhir, tipe, dsb.
2. Definisikan dengan detail fungsinya.
3. Rumuskan relasi sesuai definisi sebelumnya dengan melihat efek yang
dibutuhkan pada kasus sebelumnya atau selanjutnya seperti apa.
4. Tentukan base casenya
DP Uhuyyyy
Soal #1
Akan dibangun sebuah gedung dengan tinggi 10 kilometer. Namun, tinggi tiap
lantai yang akan dibangun terbatas pada tinggi 2, 3, dan 5 kilometer saja. Berapa
banyak variasi gedung yang dapat dibangun?
Soal #2
Banyak bilangan basis-4 yang hasil jumlah digitnya 10 adalah...
Soal #3
Seekor katak ingin menyeberang sungai. Terdapat dua jenis benda, yaitu batu dan
daun. Hanya batu yang dapat ditempati katak. Seekor katak dapat melompat ke
benda tepat di depannya atau dapat melompatinya (dengan kata lain, menempati
benda kedua yang ada di depannya). Berapa banyak cara yang bisa ditempuh
katak untuk menyeberangi sungai dengan selamat jika konfigurasi benda di
sungai adalah sebagai berikut (katak menyeberang dari kiri ke kanan)
Soal #4
Pak Dengklek membawa bebeknya ke
suatu goa yang petanya sebagai berikut.
Lingkaran adalah ruangan, dan arah
panah menunjukkan lorong untuk
mencapai suatu ruangan dari sebuah
ruangan. Angka menunjukkan jumlah
permata dalam setiap ruangan.

Berapa maksimum permata yang dapat


dikumpulkan mulai dari pintu masuk (kiri
bawah) sampai keluar (Kanan atas)?
Soal #5
Berapa banyak kata sepanjang N-karakter yang dapat dibentuk dari angka-angka
{0, 1, 2}, sedemikian sehingga angka-angka yang saling bersebelahan hanya
berselisih maksimum 1. Contoh : Untuk N=2 terdapat 7 kata yang dapat dibentuk
yaitu : <0 0>, <0 1>, <1 0>, <1 1>, <1 2>, <2 1>, <2 2>. Notasi < > menyatakan
bentukan satu kata. Jika N=10, berapa banyak kata yang dapat dibentuk?
Soal #5
Pak Dengklek sedang menyusun ubin untuk menutupi lantai berukuran 4x7
dengan ubin berukuran 1x2. Ubin boleh disusun vertikal atau horisontal tanpa
memotongnya. Ada berapa banyak cara untuk memenuhi lantai tersebut?

Anda mungkin juga menyukai