Algoritma Floyd-Warshall LANDASAN TEORI

bersesuaian memiliki arah yang berlawanan dengan arah orientasi yang didefinisikan. Orientasi yang diberlakukan pada setiap sirkuit dapat dibuat sembarang sehingga suatu graf berarah dapat dinyatakan dengan beberapa Matriks Sirkuit yang berbeda

2.4. Algoritma Floyd-Warshall

Algoritma Floyd-Warshall adalah sebuah algoritma analisis graf untuk mencari bobot minimum dari graf berarah. Algoritma Floyd-Warshall adalah matriks hubung graf berarah berlabel, dan keluarannya adalah path terpendek dari semua titik ke titik yang lain Kamayudi, A. 2009. Dalam usaha untuk mencari path terpendek, Algoritma Warshall memulai iterasi dari titik awalnya kemudian memperpanjang path dengan mengevaluasi titik demi titik hingga mencapai titik tujuan dengan jumlah bobot yang seminimum mungkin. Misalkan � adalah matriks hubung graf berarah berlebel mula-mula. � ∗ adalah matriks hubung minimal dengan � �� ∗ = path terpendek dari titik � � ke � � . [4] Algoritma Warshall untuk mencari path terpendek adalah sebagai berikut 1. W = � 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 Dalam iterasinya untuk mencari path terpendek, Algoritma Warshall membentuk n matriks sesuai dengan iterasi-k. Hal ini menyebabkan waktu prosesnya lambat, terutama untuk n yang besar. Meskipun waktu prosesnya bukanlah yang tercepat, Algoritma Warshall sering dipergunakan untuk menghitung path terpendek karena kesederhanaannya. Program implementasinya Algoritma Warshall sangat mudah dibuat. 2.5. Algoritma Johnson Algoritma Johnson adalah dapat digunakan untuk graf yang berbobot negatif dan untuk menyelesaikan masalah lintasan terpendek di setiap titik ke semua titik lain. Langkah awal penyelesaian Noviandi, E. 2012. Algoritma Johnson adalah mengonstruksi graf yang baru dengan menambahkan graf baru pada graf dan memberi bobot sisi yang keluar dari titik baru tersebut dengan 0. Langkah selanjutnya adalah mencari lintasan terpendek dari titik baru ke semua titik lain. Lintasan Terpendek tersebut digunakan untuk mengubah bobot semua sisi pada graf baru agar bobot semula bernilai positif. Setelah itu dicari lintasan terpendek dari tiap titik ke semua titik lain dengan mengubah hasilnya dengan menggunakan hasil dari perhitungan berupa matriks. Dari matriks ini dapat diketahui panjang lintasan terpendek dari titik ke semua titik lain. Langkah Algoritma Johnson adalah sebagai berikut 1. Mengostruksi graf baru G, dengan cara menambahkan titik baru sehingga V’ = V + {s} dan E + {s,vv di V} 2. Setiap titik v di V → w s, v ∞ → w v, s 3. Menjalankan Algoritma Bellman-Ford pada graf baru a. jika terdapat bobot negatif maka selesai b. jika tidak terdapat bobot negatif maka hitung ds, v , v ∈ V 4. Setiap u, v di E Wu, v = wu, v + d s, v – ds, v 5. Setiap v di V, dijalankan Algoritma Djikstra untuk menghitung du, v 6. D’ = du, v 7. Setiap u, v di V ; du, v = du, v + dsv – ds, u 8. D = du, v Keterangan ws,v = bobot sisi dari s ke v. ds,v = panjang lintasan terpendek dari s ke v. wu,v = bobot sisi baru dari u ke v. du,v = panjang lintasan terpendek dari u ke v dan yang dihutung adalah bobot sisi baru w. du,v = panjang lintasan terpendek dari u ke v. D’ = matriks hasil perhitungan lintasan terpendek dari tiap-tiap pasangan titik dan bobot sisi yang digunakan adalah w. D = matriks hasil akhir dari perhitungan. Dalam Algoritma Johnson terdapat dua Algoritma untuk penyelesainnya, yaitu Algoritma Bellman-Ford dan Algoritma Djikstra. 2.5.1. Algoritma Bellman-Ford Algoritma Bellman-Ford menghitung jarak terpendek dari satu sumber pada sebuah graf berbobot. Maksudnya dari satu sumber ialah bahwa ia menghitung semua jarak terpendek yang berawal dari satu vertex. Algoritma Dijkstra dapat lebih cepat mencari hal yang sama dengan syarat tidak ada edge yang berbobot negatif, maka Algoritma Bellman-Ford hanya digunakan jika ada sisi berbobot negatif. 2.5.2. Algoritma Dijkstra Algoritma Dijkstra ditemukan oleh Edsger W. Dijkstra yang merupakan salah satu varian bentuk algoritma populer dalam pemecahan persoalan yang terkait dengan masalah optimasi dan bersifat sederhana. Algoritma ini menyelesaikan masalah untuk mencari lintasan terpendek sebuah lintasan yang mempunyai panjang minimum dari vertex a ke vertex z dalam graf berbobot, bobot tersebut adalah bilangan positif jadi tidak dapat dilalui oleh vertex negatif. Dalam mencari solusi, Algoritma Dijkstra menggunakan prinsip greedy, yaitu mencari solusi optimum pada setiap langkah yang dilalui dengan tujuan untuk mendapatkan solusi optimum pada langkah selanjutnya yang akan mengarah pada solusi terbaik. Algoritma ini mencari panjang lintasan terpendek dari vertex a ke z dalam sebuah graf berbobot. Langkah-langkah dalam menentukan lintasan terpendek pada Algoritma Dijkstra yaitu: 1. Pada awalnya pilih vertex dengan bobot yang terendah dari vertex yang belum dipilih, diinisialisasikan dengan ‘0’ dan yang sudah terpilih diinisialisasikan dengan ‘1’. 2. Bentuk tabel yang terdiri dari vertex, status, bobot. Lengkapi kolom bobot yang diperoleh dari jarak vertex sumber ke semua vertex yang langsung terhubung dengan vertex sumber tersebut. 3. Jika vertex sumber ditemukan maka tetapkan sebagai vertex terpilih. 4. Tetapkan vertex terpilih dengan label permanen dan perbaharui vertex yang langsung terhubung. 5. Tentukan vertex sementara yang terhubung pada vertex yang sudah terpilih sebelumnya dan merupakan bobot terkecil dilihat dari tabel dan tentukan sebagai vertex terpilih berikutnya. 6. Apakah vertex yang terpilih merupakan vertex tujuan? Jika ya, maka kumpulan vertex terpilih merupakan rangkaian yang menunjukkan lintasan terpendek. 7. Begitu seterusnya hingga semua vertex terpilih.

2.6. JAVA