Menurut halaman ini , algoritma Dijkstra hanyalah BFS dengan antrian prioritas. Apakah sesederhana itu? Saya pikir tidak.
Menurut halaman ini , algoritma Dijkstra hanyalah BFS dengan antrian prioritas. Apakah sesederhana itu? Saya pikir tidak.
Jawaban:
Anda dapat mengimplementasikan algoritma Dijkstra sebagai BFS dengan antrian prioritas (meskipun itu bukan satu-satunya implementasi).
Algoritma Dijkstra bergantung pada properti bahwa jalur terpendek dari ke juga jalur terpendek ke salah satu simpul di sepanjang jalur. Inilah yang dilakukan BFS.t
Atau dalam perspektif lain: bagaimana algoritma Dijkstra akan berperilaku jika semua bobotnya 1? Persis seperti BFS.
Pertama, bagaimana kita mengadaptasi BFS ke grafik tertimbang yang lebih umum ?
Berikut adalah ide dari buku "Algoritma (Bagian 4.4)" oleh Dasgupta et al:
Untuk setiap tepi dari (dengan bobot ), ganti dengan tepi dengan panjang , dengan menambahkan dummy node antara u dan v .E l e l e 1 l e - 1
Akibatnya, tepi grafik hasil semuanya memiliki panjang satuan. Oleh karena itu, kita dapat menghitung jarak dalam G dengan menjalankan BFS pada G ′ .
Kedua, bagaimana algoritma Dijkstra pada mengalahkan BFS pada grafik transformasi G ′ ?
BFS pada dapat benar-benar lambat jika beberapa l e besar karena limbah terlalu banyak waktu di jarak ke simpul boneka komputasi yang kita tidak peduli tentang sama sekali. Algoritma Dijkstra menghindari hal ini dengan menetapkan jarak perkiraan untuk node dan membuat mereka rileks jika memungkinkan.
Ketiga, bagaimana perilaku algoritma Dijkstra pada grafik tidak tertimbang?
Berperilaku persis sama dengan BFS. Kami menguraikan ini dari dua poin utama.
Pada "relaksasi".
Untuk algoritma Dijkstra pada grafik umum, tertimbang, relaksasi adalah
for all edges (u,v) in E:
if dist(v) > dist(u) + w(u,v)
dist(v) = dist(u) + w(u,v)
for all edges (u,v) in E:
if dist(v) = \infty
dist(v) = dist(u) + 1
Pada "antrian prioritas".
Ketika algoritma Dijkstra dijalankan pada grafik tidak berbobot, setiap saat, antrian prioritas berisi paling banyak dua nilai (jarak) yang berbeda. Oleh karena itu, antrian FIFO BFS sudah mencukupi.