Algoritma Floyd Warshall adalah salah satu varian dari pemrograman dinamis, metode untuk memecahkan masalah pencarian rute terpendek (sama sepertiย Algoritma Dijkstra).ย Metode ini melakukan pemecahan masalah dengan memandang solusi yang akan diperoleh sebagai suatu keputusan yang saling terkait. Maksudnya, solusi-solusi dibentuk dari solusi yang berasal dari tahap sebelumnya dan ada kemungkinan solusi lebih dari satu.ย Algoritma ini juga bisa diterapkan pada sebuah aplikasi pencari rute jalan yang terdekat dari suatu daerah ke daerah lainnya. dengan metode ini hasil yang di dapat bisa lebih optimal namun memelukan resource yang cukup besar jika dipakai untuk pencarian yang kompleks.
Langkah pertama kita jadikan grafik di atas menjadi sebuah tabel atau matriks.
Kotak abjad berwarna hijau disamping kiri adalahย titik awalย dan kotak abjad berwarna merah yang ada di atas adalahย titik tujuan-nya. Sedangkan kotak angka hijau dan merah berfungsi untuk menentukan sebuahย index prosesย (R0=1,R1=2,R2=3,danย R3=4)ย danย memudahkanย posisi angka-angka yang ada didalam tabel dengan mengkombinasikan-nya dengan kotak abjad yang samaย dengan warnaya. sebagai contoh :ย
A(3),B(2)ย (titik awal,ย titik tujuan) =ย 9,0
Karena dalam grafik diatas terdapat 4 buah titik, yaituย A, B, C, Dย maka akan ada 5 proses yang akan dilewati yaituย R0, R1, R2, R3,ย danย R4ย sebagai hasil akhir. perlu diingat bahwa hasil dari sebuah proses akan digunakan untuk proses berikutnya.
Rumusnya adalah :
r = Index proses. =>ย R0 =ย 1,ย R1 =ย 2,ย R2 =ย 3,ย R3 =ย 4,ย R4ย adalah hasil akhir.
S = Titik awal. ย ย =>ย A, B, C, dan Dย (kotak hijau).
E = Titik tujuan. ย =>ย A, B, C, dan Dย (kotak merah).
” jika hasil penjumlahan nilai titik awalย S(r)ย dan nilai titik tujuanย E(r)ย lebih kecilย daripada nilai jarak yang sebenarnyaย S(E),ย maka ganti nilai jarak sebenarnya dengan hasil penjumlahan nilai titik awal dan nilai titik tujuanย ย [ S(E) = ย S(r) + E(r)ย ]ย “.
Jadi, Saya akan mencontohkan sebagian penerapan rumus diatas untuk proses pertama yaituย R0.
r = R0 = 1
Sย ย =ย {ย A(r) = 0ย ;ย B(r) = 5ย ;ย C(r) = 9ย ;ย D(r) =ย tak hinggaย }
Eย ย =ย {ย A(r) = 0ย ;ย B(r) = 5ย ;ย C(r) = 9ย ;ย D(r) =ย tak hinggaย }
– Titik awal A ke titik tujuan A ย =>ย A(A) = 0
A(r) + A(r) = 0 + 0 = 0 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 0 sama denganย A(A)ย <tidak diganti>
– Titik awal A ke titik tujuan B ย =>ย A(B) = 5
A(r)ย + B(r) = 0ย + 5 = 5 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 5 sama denganย A(B)ย <tidak diganti>
– Titik awal A ke titik tujuan C ย =>ย A(C) = 9
A(r)ย + C(r) = 0ย + 9 = 9 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 9 sama denganย A(C)ย <tidak diganti>
– Titik awal A ke titik tujuan C ย =>ย A(D) = tak hingga
A(r)ย + D(r) = 0ย +ย tak hingggaย =ย tak hinggaย ย ย ย ย => ย ย ย ย ย tak hinggaย sama denganย A(D)ย <tidak diganti>
– Titik awal B ke titik tujuan A ย =>ย B(A) = 5
B(r) + A(r) = 5 + 0 = 5 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 0 sama denganย B(A)ย <tidak diganti>
– Titik awal B ke titik tujuan B ย =>ย B(B) = 0
B(r)ย + B(r) = 5ย + 5 = 10 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 10 lebih besarย dariย B(B)ย <tidak diganti>
– Titik awal B ke titik tujuan C ย =>ย B(C) = 3
B(r)ย + C(r) = 5ย + 9 = 14 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 14ย lebih besarย dariย B(C)ย <tidak diganti>
– Titik awal B ke titik tujuan C ย =>ย B(D) = 1
B(r)ย + D(r) = 5ย +ย tak hingggaย =ย tak hinggaย ย ย => ย ย ย ย tak hinggaย lebih besarย dariย B(D)ย <tidak diganti>
– Titik awal C ke titik tujuan A ย =>ย C(A) = 9
C(r) + A(r) = 9 + 0 = 9 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 9 sama denganย C(A)ย <tidak diganti>
– Titik awal C ke titik tujuan B ย =>ย C(B) = 3
C(r)ย + B(r) = 9ย + 5 = 14 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 14ย lebih besarย dariย C(B)ย <tidak diganti>
– Titik awal C ke titik tujuan C ย =>ย C(C) = 0
C(r)ย + C(r) = 9ย + 9 = 18 ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย 18 lebih besarย dariย C(C)ย <tidak diganti>
– Titik awal C ke titik tujuan C ย =>ย C(D) = 1
C(r)ย + D(r) = 9ย +ย tak hingggaย =ย tak hinggaย ย ย ย ย => ย ย ย ย tak hinggaย lebih besarย dariย C(D)ย <tidak diganti>
– Titik awal D ke titik tujuan A ย =>ย D(A) =ย tak hingga
D(r) + A(r) =ย tak hinggaย + 0 =ย tak hinggaย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย tak hinggaย sama denganย D(A)ย <tidak diganti>
– Titik awal D ke titik tujuan B ย =>ย D(B) = 1
D(r)ย + B(r) =ย tak hinggaย + 5 =ย tak hinggaย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย tak hinggaย lebih besarย dariย D(B)ย <tidak diganti>
– Titik awal D ke titik tujuan C ย =>ย D(C) = 1
D(r)ย + C(r) =ย tak hinggaย + 9 =ย tak hinggaย ย ย ย ย ย ย ย ย ย ย ย => ย ย ย ย tak hinggaย lebih besarย dariย D(C)ย <tidak diganti>
– Titik awal D ke titik tujuan C ย =>ย D(D) = 0
D(r)ย + D(r) =ย tak hinggaย +ย tak hingggaย =ย tak hinggaย ย ย => ย ย ย ย tak hinggaย lebih besarย dariย D(D)ย <tidak diganti>
Demikianlah proses dariย R0. Tidak ada yang diganti karna tidak ada hasil penjumlahan yang menunjukkan lebih dari nilai jarak sebenarnyaย S(E).ย Untuk proses selanjutnya sampai proses hasil akhirย R4ย saya presentasika melalui gambar di bawah ini.
Dari hasil tabel matriksย R4ย dapat diketahui rute terpendek manakah yang harus ditempuh dari titikย Aย menuju ke titikย C. kemudian kita tulis nilai-nilai yang ada di table matriksย R4ย disamping titik dalam grafik sesuai dengan abjab mereka.
Untuk mengetahui bagaimana kita mendapatkan urutan rute mana saja yang harus kita lewati, kalian bisa melihat artikel yang sebelumnya tentangย Algoritma Dijkstraย pada bagianย “Cara mengetahui rute yang harus dilewati”
Berikut Merupakan Contoh makalah Penerapan Algoritma Floyd Warshall
MENENTUKAN RUTE TERPENDEK DENGAN MENGGUNAKAN ALGORITMA FLOYD