Anda di halaman 1dari 3

Algoritma dan Pemrograman 2C

DYNAMIC PROGRAMMING
(PEMROGRAMAN DINAMIS)

DEFINISI DYNAMIC PROGRAMMING

Suatu Perancangan algoritma, dengan solusi optimalnya diperoleh


berdasarkan rangkaian keputusan sebelumnya yang dilakukan secara
simultan disebut dengan Dynamic Programming (Pemrograman Dinamis).
Pada metode/algoritma Greedy, solusi optimalnya hanya dapat
diperoleh pada satu rangkaian keputusan, sedangkan pada Dynamic
Programming solusi optimalnya dapat diperoleh dari banyak rangkaian
keputusan yang mungkin menghasilkan.
Satu cara untuk memecahkan masalah-masalah, yang mana ini tidak
mungkin untuk membuat sebuah rangkaian dari langkah-langkah keputusan
yang dapat dilakukan mengacu (mengarah) pada rangkaian keputusan
optimal, adalah untuk mencoba semua kemungkinan rangkaian-rangkaian
keputusan. Kita dapat memberikan nomor (angka) semua rangkaian
keputusan dan kemudian memilih yang terbaik. Dynamic programming
seringkali secara spontan mengurangi jumlah pembilangan dengan
menghindari pembilangan dari beberapa rangkaian keputusan yang tidak
memungkinkan menjadi optimal. Di dalam dynamic programming hubungan-
hubungan keputusan optimal didapat dengan membuat prinsip optimalitas
secara explisit. Pernyataan prinsip itu merupaka rangkaian keputusan
optimal yang memiliki sesuatu yang dinyatakan dengan initial dan keputusan,
dalam mengambil keputusan harus menyusun suatu keputusan optimal
dengan memperhatikan hasil pernyataan dari keputusan pertama. Di dalam
dynamic programming, banyak rangkaian keputusan yang mungkin
menghasilkan. Tetapi, rangkaian yang berisi sub-sub rangkaian optimal tidak
dapat optimal jika prinsip berpengaruh pada optimasi dan pasti tidak akan
menghasilkan.
Dalam menyelesaikan persoalan, algoritma Dynamic Programming
menggunakan teknik rekursif. Dalam merumuskan hubungan-hubungan
kembali dynamic programming yang harus dipecahkan, seseorang dapat
menggunakan 1 dari 2 pendekatan yang berbeda yaitu forward atau
backward. Anggap x1, x2, …, xn, sebagai variabel-variabel dimana suatu
hubungan dari keputusan-keputusan harus dibuat. Dalam pendekatan
forward, untuk keputusan xi dibuat dengan batasan hubungan keputusan
optimal untuk xi+1, …, xn. Dalam pendekatan backward, untuk keputusan xi
dibuat dengan batasan hubungan keputusan optimal untuk xn, …, xi-1.

ALGORITMA WARSHALL

Algoritma yang ditemukan oleh Warshall untuk mencari path


terpendek merupakan algoritma yang sederhana dan mudah
implementasinya. Masukan Algoritma Warshall adalah matriks hubungan graf
berarah berlabel, dan keluarannya adalah path terpendek dari semua titik ke
semua titik.
Dalam usaha untuk mencari path terpendek, algoritma ini memulai
iterasi dari titik awalnya kemudian memperpanjang path dengan

Dynamic Programming IX.1


Algoritma dan Pemrograman 2C

mengevaluasi titik demi titik hingga mencapai titik tujuan dengan jumlah
bobot yang seminimum mungkin.

Misalnya Wo adalah matriks terhubung graf berarah berlabel mula-mula.

W* adalah matriks hubung minimal dengan Wij* = path terpendek dari titik vi
ke vj.

Algotima Warshall untuk mencari path terpendek adalah sebagai berikut:


1. W = Wo
2. Untuk k = 1 hingga n, lakukan :
Untuk i = 1 hingga n, lakukan
Untuk j = 1 hingga n, lakukan
Jika W[i,j] > W[i,k] + W[k,j] maka
Tukar W[i,j] dengan W[i,k] + W[k,j]
3. W* = W

Dalam iterasinya untuk mencari path terpendek, algoritma Warshall


membentuk n matriks, sesuai dengan iterasi-k. ini menyebabkan waktu
prosesnya lambat, terutama untuk n yang besar. Meskipun waktu prosesnya
bukanlah yang tercepat, algoritma Warshall sering digunakan untuk
menghitung path terpendek karena kesederhanaan algoritmanya. Program
implementasi algoritma Warshall sangat mudah dibuat.

Contoh :
Carilah path terpendek dari titik vi ke titik vj (i,j = 1,2,…,6) graf berarah
berlabel pada gambar berikut.
7 4
V1 V2 V3

2 1 3

4 2 2 1
V4 V5 V6

Penyelesaian
Matriks hubung graf pada gambar di atas adalah:
v1 V2 v3 v4 v5 v6
v1 ∞ 7 ∞ 2 ∞ ∞
v2 ∞ ∞ 4 ∞ 1 ∞
W=Wo = v3 ∞ ∞ ∞ ∞ ∞ 3
v4 ∞ 4 ∞ ∞ ∞ ∞
v5 2 ∞ 2 ∞ ∞ ∞
v6 ∞ 1 ∞ ∞ ∞ ∞

Iterasi untuk k = 1
Untuk setiap sel matriks W, dicek apakah W[i,j] > W[i,k] + W[k,j]. Jika ya
maka W[i,j] diganti dengan W[i,k] + W[k,j].
W[1,2] = 7, sedangkan W[1,1]+W[1,2]= ∞ + 7=∞
Karena W[1,2] < W[1,1]+W[1,2], maka harga W[1,2] tidak diubah.
W[5,4]= ∞, sedangkan W[5,1]+W[1,4] = 2 + 2=4

Dynamic Programming IX.2


Algoritma dan Pemrograman 2C

Karena W[5,4] > W[5,1]+W[1,4], maka harga W[5,4] diubah menjadi 4.


Ini berarti bahwa ada path dari v5 ke v4 melalui v1 yang mempunyai bobot
lebih kecil (yaitu path v5 v1 v4 dengan jumlah bobot 4) dibandingkan
dengan path v5 ke v4 secara langsung (bobot = ∞ karena tidak ada path
dari v5 ke v4 secara langsung).

Dengan cara yang sama, harga W[I,j] dihitung untuk setiap I dan j, di
dapatkan matriks:

v1 V2 v3 v4 v5 v6
v1 ∞ 7 ∞ 2 ∞ ∞
v2 ∞ ∞ 4 ∞ 1 ∞
W1 = v3 ∞ ∞ ∞ ∞ ∞ 3
v4 ∞ 4 ∞ ∞ ∞ ∞
v5 2 9 2 4 ∞ ∞
v6 ∞ 1 ∞ ∞ ∞ ∞

Iterasi untuk k = 2
Iterasi untuk k=2 dilakukan dengan cara yang sama seperti iterasi untuk k =
1, hanya titik perantaranya adalah titik v2.
W[6,5]= ∞, sedangkan W[6,2] + W[2,5] = 1 + 1 = 2.
Karena W[6,5] > W[6,2] + W[2,5] maka harga W[6,5] diganti dengan 2.
Ini berarti bahwa path dari v6 ke v5 melalui v2 (v6 v2 v5) lebih pendek
dibandingkan path dari v6 ke v5 secara langsung atau melalui v1.

Proses yang sama dilakukan untuk semua harga i dan j. Didapatkan:

v1 V2 V3 v4 v5 v6
v1 ∞ 7 11 2 8 ∞
v2 ∞ ∞ 4 ∞ 1 ∞
W2 = v3 ∞ ∞ ∞ ∞ ∞ 3
v4 ∞ 4 8 ∞ 5 ∞
v5 2 9 2 4 10 ∞
v6 ∞ 1 5 ∞ 2 ∞

Dengan cara yang sama, untuk k = 3,4,5, dan 6, diperoleh matriks :


v1 V2 v3 V4 v5 v6 v1 V2 v3 v4 v5 v6
v1 ∞ 7 11 2 8 14 v1 ∞ 6 10 2 7 13
v2 ∞ ∞ 4 ∞ 1 7 v2 ∞ ∞ 4 ∞ 1 7
W3 W4
v3 ∞ ∞ ∞ ∞ ∞ 3 v3 ∞ ∞ ∞ ∞ ∞ 3
= =
v4 ∞ 4 8 ∞ 5 11 v4 ∞ 4 8 ∞ 5 11
v5 2 9 2 4 10 5 v5 2 8 2 4 9 5
v6 ∞ 1 5 ∞ 2 8 v6 ∞ 1 5 ∞ 2 8

v1 V2 v3 V4 v5 v6 v1 V2 v3 v4 v5 v6
v1 9 6 9 2 7 12 v1 9 6 9 2 7 12
v2 3 9 3 5 1 6 v2 3 7 3 5 1 6
W5 W6
v3 ∞ ∞ ∞ ∞ ∞ 3 v3 7 4 7 9 5 3
= =
v4 7 4 7 9 5 10 v4 7 4 7 9 5 10
v5 2 8 2 4 9 5 v5 2 6 2 4 7 5
v6 4 1 4 6 2 7 v6 4 1 4 6 2 7

Jika pada W* ada wij dengan harga ∞ berarti tidak ada path dari vi ke vj
baik langsung maupun tidak langsung.

Dynamic Programming IX.3

Anda mungkin juga menyukai