Anda di halaman 1dari 3

Algoritma dan Pemrograman 2

BAB IX
DYNAMIC PROGRAMMING
(PEMROGRAMAN DINAMIS)
9.1. 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 hubunganhubungan 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.

9.2. 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
mengevaluasi titik demi titik hingga mencapai titik tujuan dengan jumlah
bobot yang seminimum mungkin.
Misalnya Wo adalah matriks terhubung graf berarah berlabel mula-mula.

Dynamic Programming

IX.1

Algoritma dan Pemrograman 2

W* adalah matriks hubung minimal dengan W ij* = 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.
V1

2
4
Penyelesaian
V4
Matriks hubung
graf pada gambar di atas adalah:
v1
V2
v3
v1

v2

4
W=Wo =
v3

v4

v5
2

2
v6

V2

V3

2
V5

v4
2

v5

1
V6

v6

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
Karena W[5,4] > W[5,1]+W[1,4], maka harga W[5,4] diubah menjadi 4.
Ini berarti bahwa ada path dari v 5 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).

Dynamic Programming

IX.2

Algoritma dan Pemrograman 2

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

v1
v2
v3
v4
v5
v6

W1 =

V2
7

4
9
1

v3

v4
2

v5

v6

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

v1
v2
v3
v4
v5
v6

W2 =

V2
7

4
9
1

V3
11
4

8
2
5

v4
2

v5
8
1

5
10
2

v6

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

W3
=

W5
=

v1
v2

v1

V2
7

v3
11
4

V4
2

v5
8
1

v6
14
7

v1
v2

v1

V2
6

v3
10
4

v4
2

v5
7
1

v6
13
7

v3

v3

v4
v5
v6

4
9
1

8
2
5

5
10
2

11
5
8

v4
v5
v6

4
8
1

8
2
5

5
9
2

11
5
8

v1
v2

v1
9
3

V2
6
9

v3
9
3

V4
2
5

v5
7
1

v6
12
6

v1
v2

v1
9
3

V2
6
7

v3
9
3

v4
2
5

v5
7
1

v6
12
6

v3

v3

v4
v5
v6

7
2
4

4
8
1

7
2
4

9
4
6

5
9
2

10
5
7

v4
v5
v6

7
2
4

4
6
1

7
2
4

9
4
6

5
7
2

10
5
7

W4
=

W6 =

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