Senin, 29 Februari 2016

Algoritma Floyd-Warshall

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 bagi graf ini untuk memiliki siklus dengan bobot negatif. Algoritma ini menghitung bobot terkecil dari semua jalur yang menghubungkan sebuah pasangan titik, dan melakukan sekaligus untuk semua pasangan titik terpendek diantara semua pasangan simpul. Algoritma ini mengijinkan bobot sisi negatif. Langkah-langkah dari algoritma Floyd-Warshall adalah sebagai berikut (Budiarsyah dan Dibi Khairurrazi , 2010) :

1. Langkah awal
    Untuk menentukan shortest path dengan menggunakan algoritma Floyd Warshall adalah dengan merepresentasikan suatu graf sebagai suatu matriks berbobot.  Format output berupa matriks n x n berjarak D = [dij] dimana dij merupakan jarak dari vertex  i ke j. 

2. Langkah kedua
    melakukan dekomposisi Floyd-Warshall dengan urutan : 
      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, yaitu tidak ada vertex intermediate. 
      D(k)  menjadi matriks n x n [dij(k)] 
      Tentukan dij(n) sebagai jarak dari i ke j kemudian hitung D(n) 
      Hitung D(k) untuk k = 0,1,...., n 
3. Langkah ketiga
    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 dua kali 
•    Untuk sebuah shortest path dari i ke j dengan beberapa vertex intermediate pada path dipilih dari kumpulan {1, 2, ...., k}, dengan kemungkinan :
a)    k bukan merupakan vertex pada path (path terpendek memiliki panjang dij(k-1)).
b)    k merupakan vertex pada path (path terpendek memiliki panjang dij(k-1) + dij(k-1)). 
•    Setelah melakukan pengamatan diatas, kemudian dlakukan 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. 
•    Setiap subpath hanya dapat memuat vertex intermediate pada {1, ..., k-1} dan sedapat mungkin memiliki nilai terpendek, kemudian beri nama panjangnya dik(k-1) dan dkj(k-1) sehingga path  memiliki panjang dik(k-1)  + dkj(k-1). 

4. Langkah terakhir
Melakukan iterasi yang dimulai dari iterasi ke 0 sampai dengan n. Perhitungan yang dilakukan adalah : 
•    Menentukan D(0)  (iterasi ke 0) = [wij] merupakan matriks bobot. 
•    Menentukan D(k)  dengan menggunakan rumus ,  dij(k)  = min {dij(k-1), dik(k-1) + dkj(k-1)}, untuk k = 1, ..., n dimana n adalah jumlah vertex. 

Hasil akhir dari algoritma Floyd-Warshall adalah matriks untuk iterasi ke n. Dari matriks ke-n ini, dapat dilihat shortest path untuk setiap vertex pada suatu graph.

0 comments:

ACCESS INFORMATION



Buka Semua | Tutup Semua

Sedang Perbaikan
Sedang Perbaikan
Silakan kirim pesan dan saran Anda,

Ahmad Sachowi Amin

Selamat Datang di Blog Saya, cybermatika.net.
Hobi saya adalah Belajar dan Belajar, entah yang penting bermanfaat untuk orang lain.Sharing adalah jalan saya, sharing dengan siapa saja yang penting memberi manfaat bagi saya.Ilmu adalah Cara saya, cara saya untuk belajar dan sharing tentang banyak hal.