Jika Anda ingin memeriksa artikel ini, Anda boleh menggunakan mesin penerjemah. Namun ingat, mohon tidak menyalin hasil terjemahan tersebut ke artikel, karena umumnya merupakan terjemahan berkualitas rendah.
Masalah-Algoritma-Floyd-Warshall
Algoritma Floyd-Warshall adalah algoritma untuk mencari lintasan terpendek pada sebuah graf berbobot dengan bobot positif atau negatif (namun tidak memiliki siklus negatif).
Sejarah
Algoritma Floyd-Warshall merupakan sebuah contoh penerapan dari pemrograman dinamis yang diperkenalkan oleh Robert Floyd pada tahun 1962. Namun, pada dasarnya memiliki kesamaan dengan algoritma yang pernah diperkenalkan sebelumnya oleh Bernard Roy pada tahun 1959 dan juga Stephen Warshall pada 1962.
Algoritma Floyd Warshall juga dikenal dengan Algoritma Floyd, Algoritma Roy-Warshall, Algoritma Roy-Floyd, dan algoritma WFI.
Algoritma
Algoritma Floyd-Warshall memiliki input graf berarah dan berbobot (V,E), yang berupa daftar titik (node/vertex V) dan daftar sisi (edge E). Jumlah bobot sisi-sisi pada sebuah jalur adalah bobot jalur tersebut. Sisi pada E diperbolehkan memiliki bobot negatif, akan tetapi tidak diperbolehkan memiliki siklus dengan bobot negatif. Algoritma ini menghitung bobot terkecil dari semua jalur yang menghubungkan sebuah pasangan titik, dan melakukannya sekaligus untuk semua pasangan titik. Algoritma ini berjalan dengan waktu Θ(|V|3).
Dasar algoritma ini adalah observasi berikut:
--belum diterjemahkan—Implementasi algoritma ini dalam pseudocode:
(Graf direpresentasikan sebagai matrix keterhubungan, yang isinya ialah bobot/jarak sisi yang menghubungkan tiap pasangan titik, dilambangkan dengan indeks baris dan kolom)
(Ketiadaan sisi yang menghubungkan sebuah pasangan dilambangkan dengan Tak-hingga)
function fw(int[1..n,1..n] graph) {
// Inisialisasivarint[1..n,1..n] jarak:= graph
varint[1..n,1..n] sebelum
for i from 1 to n
for j from 1 to n
if jarak[i,j] < Tak-hingga
sebelum[i,j]:= i
// Perulangan utama pada algoritmafor k from 1 to n
for i from 1 to n
for j from 1 to n
if jarak[i,j] > jarak[i,k] + jarak[k,j]
jarak[i,j] = jarak[i,k] + jarak[k,j]
sebelum[i,j] = sebelum[k,j]
return jarak
}
Aplikasi dan Generalisasi
Jalur terpendek dalam graf berarah (Algoritma Floyd).
Perhitungan cepat untuk menemukan rute terpendek dalam jaringan.
Implementasi
Implementasi Algoritma Floyd-Warshall dalam Perl, yaitu Graph Module
Kleene, S. C. (1956). "Representation of events in nerve nets and finite automata". Dalam C. E. Shannon and J. McCarthy (ed.). Automata Studies. Princeton University Press. hlm.pp. 3–42.