Floyd-Warshall algorithm
algoritma Floyd-Warshall Jika kita mendapatkan jalan terpendek dari A ke B dan dari B ke C, maka kita akan mendapatkan jalan terpendek dari A ke C
Algoritma Floyd Warshall Algoritma Floyd Warshall digunakan untuk mencari jarak terpendek (shortest path) untuk setiap pasangan vertek/node. Algoritma ini menggunakan matriks bobot n x n sebagai masukan, dimana n merupakan jumlah dari vertex.
Algoritma Floyd Warshall Algoritma Floyd-Warshal ini dapat mentolerir negatif edge(tetapi bukan negatif cycle) dan menggunakan suatu tabel dari jarak terpendek untuk setiap pasang node. Ide dari algoritma Floyd Warshal adalah sebagai penentuan awal seluruh jarak terpendek untuk setiap pasang node.
Mekanisme algoritma Floyd Warshall 1. Langkah awal yang harus dilakukan untuk menentukan shortest path dengan menggunakan algoritma Floyd Warshal adalah : merepresentasikan suatu graph sebagai suatu matriks bobot. Dimana bobot untuk masing-masing edge adalah: wij = 0 jika i = j, = w(i,j) jika i ≠ j dan (i,j) Є E = ∞ jika i ≠ j dan (i,j) not(E) Format output berupa matrix n x n berjarak D = [dij] dimana dij adalah jarak dari vertex i ke j.
Mekanisme algoritma Floyd Warshall 2. Langkah kedua adalah: melakukan dekomposisi Floyd Warshall. Urutannya adalah sebagai berikut: dij(k) merupakan panjang dari shortest path dari i ke j sehingga semua vertex intermediate yang terdapat pada path (jika ada) terkumpul pada (1, 2, …, k}. dij(0) dikumpulkan pada wij, dimana berarti kondisi tidak ada vertex intermediate D(k) menjadi matrix n x n [dij(k)] Tentukan dij(n) sebagai jarak dari i ke j. Jadi, yang dilakukan selanjutnya adalah menghitung D(n) D(n) beranggotakan elemen-elemen dij(n) Hitung D(k) untuk k = 0, 1, …, n.
Mekanisme algoritma Floyd Warshall 3. Langkah ketiga adalah: menentukan struktur shortest path. Dalam hal ini, harus dilakukan dua pengamatan terlebih dahulu sebelum melangkah lebih jauh, yaitu: Sebuah shortest path tidak memuat vertex yang sama sebanyak 2 kali. Sebuah path yang memuat vertex 2 kali merupakan cycle. Untuk sebuah shortest path dari i ke j dengan beberapa vertex intermediate pada path dipilih dari kumpulan {1, 2, …, k), dengan 2 kemungkinan: k bukan vertex pada path, path terpendek mempunyai panjang dij(k – 1) k adalah vertex pada path, path terpendek mempunyai panjang dik(k – 1) + dkj(k – 1)
Mekanisme algoritma Floyd Warshall Setelah melakukan pengamatan di atas, kemudian dilakukan penentuan shortest path dari i ke j yang memuat vertex k. Shortest path tersebut memuat sebuah subpath dari i ke k dan sebuah subpath dari k ke j. j k i dik dkj
Mekanisme algoritma Floyd Warshall Setiap subpath hanya dapat memuat vertex intermediate pada {1, …, k-1} dan sedapat mungkin haruslah paling pendek, beri nama panjangnya dik(k – 1) dan dkj(k – 1). Sehingga path mempunyai panjang dik(k – 1) + dkj(k – 1) Dengan menggabungkan dua persamaan tersebut, maka didapat : dij(k) = min { dij(k – 1), dik(k – 1) + dkj(k – 1)}
Mekanisme algoritma Floyd Warshall 4. Langkah keempat adalah: melakukan iterasi. Dimulai dari iterasi ke-0 sampai dengan n Perhitungan yang dilakukan adalah: Menentukan D(0) ( iterasi ke-0 )= [wij], merupakan matrix bobot Menentukan D(k) dengan menggunakan dij(k) = min { dij(k – 1), dik(k – 1) + dkj(k – 1)}, untuk k = 1, …, n. Dimana n adalah jumlah verteks.
Mekanisme algoritma Floyd Warshall Hasil akhir dari algoritma Floyd Warshall adalah matriks untuk iterasi ke-n. Dari matriks ke-n ini, dapat dilihat shortest path untuk setiap vertek pada suatu graph.
Floyd-Warshall algorithm RESUME Floyd-Warshall algorithm Catatan: k=0, adalah sebuah path dari vertex i ke vertex j tanpa intermediate vertex. Artinya vertex i ke vertex j terdiri dari 1 link
For k 1 to n do for i 1 to n do for j 1 to n dij (k)min(dij(k-1),dik(k-1)+ dkj(k-1))
2 3 4 1 6 5 7 9
Floyd-Warshall algorithm dij (0)=d15 (0) 2 3 4 1 6 5 7 9 ú û ù ê ë é 3 ∞ 6 9 1 4 2 7 W=D(0)=
k=1 Iterasi ke(1)k=1, untuk baris pertama pada matrix d11=min(0,0+0)=0 d12=min(3,0+3)=3 d13=min(7,0+7)=7 d14=min(4,0+4)=4 d15=min(∞,0+∞)=∞ d16=min(∞,0+∞)=∞ ú û ù ê ë é 3 ∞ 6 9 1 4 2 7 W=D(0)=
Iterasi ke(1)k=1, untuk baris kedua pada matrix d21=min(3,3+0)=3 d22=min(0,3+3)=0 d23=min(2,3+7)=2 d24=min(∞,3+4)=7 d25=min(∞,3+∞)=∞ d26=min(9,3+∞)=9 é 3 7 4 ∞ ∞ ù ê ú 3 2 ∞ ∞ 9 ê ú ê ú ê ú ê ú D21(1)=min(d21(0),d21(0)+d11(0) ê ú ê ú ë ê ú û
Iterasi ke(1)k=1, untuk baris ke-tiga dan ke-empat d31=min(7,7+0)=7 d32=min(2,7+3)=2 d33=min(0,7+7)=0 d34=min(1,7+4)=1 d35=min(3,7+∞)=3 d36=min(6,7+∞)=6 d41=min(4,4+0)=4 d42=min(∞,4+3)=7 d43=min(1,4+7)=1 d44=min(0,4+4)=0 d45=min(3,4+∞)=3 d46=min(∞,4+∞)= ∞ ú û ù ê ë é 3 ∞ 6 9 1 4 2 7 W=D(0)=
Iterasi ke(1)k=1, untuk baris ke-lima dan ke-enam ú û ù ê ë é 3 ∞ 6 9 1 4 2 7 d51=min(∞,∞+0)=∞ d52=min(∞,∞+3)=∞ d53=min(3,∞+7)=3 d54=min(3,∞+4)=3 d55=min(0,∞+∞)=0 d56=min(3,∞+∞)=3 d61=min(∞,∞+0)=∞ d62=min(9,∞+3)=9 d63=min(6,∞+7)=6 d64=min(∞,∞+4)=∞ d65=min(3,∞+∞)=3 d66=min(0,∞+∞)=0 W=D(0)=
Sehingga matriks akhir untuk Iterasi ke(1)k=1 adalah : W=D(1) W=D(1) Baris 1(0,3,7,4,∞,∞) Baris 2(3,0,2,∞,∞,9) baris 3(7,2,0,1,3,6) Baris 4(4,7,1,0,3,∞) Baris 5(∞,∞,3,3,0,3) Baris 6(∞,9,6,∞,3,0) ú û ù ê ë é 3 ∞ 6 9 1 7 4 2
Bandingkan hasil iterasi k=0 dan k=1 9 2 6 Shortest path dari 2 ke 4 dan sebaliknya, lewat intermediate 1 3 6 2 3 7 3 1 3 1 5 4 4 3 ú û ù ê ë é 3 ∞ 6 9 1 4 2 7 ú û ù ê ë é 3 ∞ 6 9 1 7 4 2 W=D(0)= W=D(1)=
Lakukan Iterasi ke(2)k=2 W=D(1) K=2, untuk baris ke-satu dan ke-dua d11=min(0,3+3)=0 d12=min(3,3+0)=3 d13=min(7,3+2)=5 d14=min(4,3+7)=4 d15=min(∞,3+∞)=∞ d16=min(∞,3+9)=12 d21=min(3,0+3)=3 d22=min(0,0+0)=0 d23=min(2,0+2)=2 d24=min(7,0+7)=7 d25=min(∞,0+∞)=∞ d26=min(9,0+9)=9 ú û ù ê ë é 3 ∞ 6 9 1 7 4 2
Iterasi ke(2)k=2, untuk baris ke-tiga dan ke-empat W=D(1) d31=min(7,2+3)=5 d32=min(2,2+0)=2 d33=min(0,2+2)=0 d34=min(1,2+7)=1 d35=min(3,2+∞)=3 d36=min(6,2+9)=6 d41=min(4,7+3)=4 d42=min(∞,7+0)=7 d43=min(1,7+2)=1 d44=min(0,7+7)=0 d45=min(3,7+∞)=3 d46=min(∞,7+9)= 16 ú û ù ê ë é 3 ∞ 6 9 1 7 4 2
Iterasi ke(2)k=2, untuk baris ke-lima dan ke-enam d51=min(∞,∞+3)=∞ d52=min(∞,∞+0)=∞ d53=min(3,∞+2)=3 d54=min(3,∞+7)=3 d55=min(0,∞+∞)=0 d56=min(3,∞+9)=3 d61=min(∞,9+3)=12 d62=min(9,9+0)=9 d63=min(6,9+2)=6 d64=min(∞,9+7)=16 d65=min(3,9+∞)=3 d66=min(0,9+9)=0 W=D(1) ú û ù ê ë é 3 ∞ 6 9 1 7 4 2
Matriks akhir hasil Iterasi ke(2)k=2 W=D(2) W=D(2) Baris 1(0,3,5,4,∞,12) Baris 2(3,0,2,7,∞,9) baris 3(5,2,0,1,3,6) Baris 4(4,7,1,0,3,16) Baris 5(∞,∞,3,3,0,3) Baris 6(12,9,6,16,3,0) ú û ù ê ë é 3 16 6 9 12 ∞ 1 7 4 2 5
Bandingkan hasil Iterasi ke(1) dan ke(2) 9 Shortest path dari 1 ke 3 dan sebaliknya, lewat intermediate 2 2 6 3 6 2 3 7 3 1 3 1 5 4 4 3 ú û ù ê ë é 3 ∞ 6 9 1 7 4 2 ú û ù ê ë é 3 16 6 9 12 ∞ 1 7 4 2 5 W=D(1)= W=D(2)=
Iterasi ke(3)k=3 W=D(2)= W=D(3)= Shortest path dari 1 ke 5,6 dan sebaliknya, lewat intermediate 2,3 Shortest path dari 2 ke 4,5,6 dan sebaliknya, lewat intermediate 3 Shortest path dari 4 ke 6 dan sebaliknya, lewat intermediate 3 9 2 6 3 6 2 3 7 3 1 3 1 5 4 4 3 ú û ù ê ë é 3 16 6 9 12 ∞ 1 7 4 2 5 ú û ù ê ë é 3 7 6 8 11 5 1 4 2 W=D(2)= W=D(3)=
Iterasi ke(4)k=4 W=D(4)= W=D(3)= Shortest path dari 1 ke 5 dan sebaliknya, lewat intermediate 4 9 2 6 3 6 2 3 7 3 1 3 1 5 4 4 3 ú û ù ê ë é 3 7 6 8 11 5 1 4 2 ú û ù ê ë é 3 7 6 8 11 5 1 4 2 W=D(4)= W=D(3)=
Iterasi ke(5)k=5 W=D(5)= W=D(4)= 2 6 9 2 6 Shortest path dari 4 ke 6 dan sebaliknya, lewat intermediate 5 Shortest path dari 1 ke 6 dan sebaliknya, lewat intermediate4, 5 3 6 2 3 7 3 1 3 1 5 4 4 3 ú û ù ê ë é 3 7 6 8 11 5 1 4 2 ú û ù ê ë é 3 6 8 10 5 7 1 4 2 W=D(5)= W=D(4)=
Iterasi ke(5)k=5 W=D(5)= W=D(6)= 2 6 3 1 5 4 ú û ù ê ë é 3 6 8 10 5 7 9 2 6 3 6 2 3 7 3 1 3 1 5 4 4 3 ú û ù ê ë é 3 6 8 10 5 7 1 4 2 ú û ù ê ë é 3 6 8 10 5 7 1 4 2 W=D(5)= W=D(6)=
Hasil akhir 9 ú û ù ê ë é 3 6 8 10 5 7 1 4 2 2 6 3 6 2 W=D(6)= 3 7 3 1 3 1 5 4 4 3 Shortest path dari 1 ke 2 dan sebaliknya, tidak ada intermediated12=3 Shortest path dari 1 ke 3 dan sebaliknya, lewat intermediate 2d13=5 Shortest path dari 1 ke 4 dan sebaliknya, tidak ada intermediated14=4 Shortest path dari 1 ke 5 dan sebaliknya, lewat intermediate 4d15=7 Shortest path dari 1 ke 6 dan sebaliknya, lewat intermediate 4,5 d16=10 Dan seterusnya
soal Hitunglah D(0), D(1), D(2), D(3), D(4) dan D(5)