ALGORITMA DIJKSTRA
Algoritma
Dijkstra, (dinamai menurut penemunya, seorang ilmuwan
komputer, Edsger Dijkstra), adalah sebuah
algoritma rakus (greedy algorithm) yang dipakai dalam memecahkan
permasalahan jarak terpendek (shortest path problem) untuk sebuah graf
berarah (directed graph) dengan bobot-bobot sisi (edge weights)
yang bernilai tak-negatif.
Algoritma
Dijkstra adalah salah satu metode untuk memecahkan masalah pencarian rute
terpendek. Algoritma ini biasanya diterapkan pada sebuah aplikasi pencari rute
jalan yang terdekat dari suatu daerah ke daerah lainnya.
- Beberapa Titik/simpul/daerah, titik/simpul/daerah yang bisa dijangkau secara langsung, dan juga jarak antara mereka.
- Titik/simpul/daerah awal.
- Titik/simpul/daerah tujuan.
Jika dicontohkan dengan gambar grafik akan seperti ini :
Titik A adalah titik awal dan titik F adalah
titik tujuan. Kemudian kita akan mencari rute manakah yang harus dilewati dan
memilik total jarak yang paling dekat. Untuk bisa mendapatkan rute itu, maka
grafik diatas ditambahkan beberapa kotak untuk mengisi beberapa label. Seperti
ini :
Penjelasannya adalah :
Setelah itu ada beberapa langkah yang harus dilakukan, yaitu :
- Mengisi kotak label pada titik awal dengan label urutan 1 dan label jarak 0.
- Menetapkan label jarak sementara untuk semua titik yang dapat dihubungi langsung dari awal.
- Pilih titik dengan label jarak sementara terkecil dan menuliskan nilainya di label jarak, serta tambahkan label urutan-nya.
- Masukan label jarak sementara pada setiap titik yang belum memiliki label urutan dan label jarak dan dapat dihubungi langsung dari titik yang baru saja ditulis label jarak dan label urutan-nya. nilainya diisi dengan total dari label jarak dari titik sebelumnya dan jarak dari titik tersebut. Jika label jarak sementara di titik tersebut sudah memiliki nilai, maka harus diganti hanya jika nilai yang baru lebih kecil.
- Pilih titik dengan label jarak sementara terkecil dan menggunakan label jarak sementara-nya sebagai label jarak dari titik tersebut, serta tambahkan label urutan-nya.
- Ulangi langkah 4 dan 5 hingga titik tujuan memiliki label jarak dan label urutan.
Maka
pada langkah pertama adalah Mengisi kotak label pada titik awal dengan label
urutan 1 dan label jarak 0.
Kemudian
mengisi label jarak sementara titik yang dapat dihubungi langsung dari
titik A yakni titik B, C, dan E.
Maka
yang terpilih adalah titik B karena memiliki label jarak sementara
terkecil, dan mengisi nilai label jarak-nya sama dengan label jarak
sementara serta memberikan label urutan-nya.
Selanjutnya
mengisi label jarak sementara titik yang belum memiliki label jarak
dan dapat dihubungi langsung dari titik B yakni hanya titik
C. Label jarak sementara titik C diisi dengan total jarak
dari titik A sampai ke titik C yang melalui titik B, yakni
4 + 2 = 6. Namun sebelumnya nilai label jarak sementara-nya titik
C sudah ada dan lebih kecil (5), jadi label jarak sementara-nya
tidak diganti dan tetap bernilai 5.
Langkah
selanjutnya adalah memilih label jarak sementara terkecil. Karena titik E
dan titik C memiliki label jarak sementara yang sama yakni 5,
maka bisa memilih salah satu dari kedua titik tersebut. Misalkan titik C
yang dipilih, maka berikan label jarak dan label urutan-nya.
Kemudian
titik yang dapat dihubungi secara langsung dari titik C dan belum
memilik label jarak adalah titik E dan D. Titik E =>
5 + 1 = 6, lebih besar jika dibandingkan dengan nilai label jarak
sementara yang dimiliki oleh titik E sebelumnya (5), maka
nilai 6 diabaikan dan tetap diisi 5. Titik D => 5 + 2 = 7,
maka langsung saja label jarak sementara titik D diisi dengan 7.
Selanjutnya
titik E terpilih karena memiliki label jarak sementara terkecil.
Berikan label jarak dan label urutan-nya.
Dan
titik F dan G adalah titik yang dapat dihubungi secara langsung
dari titik E dan belum memilik label jarak. Titik F
=> 5 + 3 = 8 dan langsung diisikan kedalam label jarak sementara-nya.
sedangkan titik D => 5 + 1 = 6 dan lebih kecil dari pada nilai
sebelumnya yaitu 7, maka nilai label jarak sementara-nya diganti
dengan 6.
Maka
titik D terpilih karena memiliki label jarak sementara terkecil.
Berikan label jarak dan label urutan-nya.
Titik
F adalah titik terakhir yang dapat dihubungi secara langsung dari titik D
dan belum memilik label jarak serta merupakan titik tujuan. Titik F => 6 + 1
= 7 dan lebih kecil dari pada nilai sebelumnya yaitu 8, maka nilai label
jarak sementara-nya diganti dengan 7.
Karena
titik F adalah stu-satunya titik terakhir yang belum mempunyai label
jarak dan label urutan. maka lansung saja berikan nilai label
jarak dan label urutan-nya. Dengan begitu titik tujuan sudah memiliki label jarak dan label
jarak sementara.
Cara mengetahui rute yang harus
dilewati
Untuk
mengetahui rute manakah yang harus dilewati adalah dengan menelusuri kembali
dari titik tujuan ke titik awal. tuliskan label jarak di samping setiap
titik.
Titik
mana sajakah yang dapat dihungi langsung dari titik F ?, Yakni titik E
dan D. maka, untuk menentukan titik manakah yang seharusnya dilewati
adalah dengan cara mengurangkan label jarak titik F dengan
jaraknya ke titik tujuan serta label jarak titik tersebut. jika hasilnya
kurang dari 0 maka titik tersebut tidak layak untuk dilewati, dan jika
hasilnya lebih dari 0 serta lebih mendekati 0 maka titik tersebut
yang seharusnya dilewati.
Langkah
pertama :
Langkah kedua :
Langkah ketiga :
Dengan
begitu diketahui rute yang harus dilewati dan memiliki jarak terpendek dari
titik A menuju titik F adalah A -> E -> D
-> F.
Sumber
http://achmad-asrori.blogspot.co.id/2013/01/algoritma-dijkstra.html
Tidak ada komentar:
Posting Komentar