The algoritma Bellman-Ford menentukan jalur terpendek dari sumber untuk semua simpul lainnya. Awalnya jarak antara dan semua simpul lainnya diatur ke . Kemudian jalur terpendek dari ke setiap titik dihitung; ini berlaku untuk iterasi . Pertanyaan saya adalah:
- Mengapa harus ada iterasi?
- Apakah penting jika saya memeriksa tepinya dalam urutan yang berbeda?
Katakanlah, jika saya pertama memeriksa tepi 1,2,3, tetapi kemudian pada iterasi kedua saya periksa 2,3,1.
MIT Prof. Eric mengatakan urutannya tidak masalah, tetapi ini membingungkan saya: bukankah algoritme akan memperbarui node berdasarkan edge jika nilainya bergantung pada edge tetapi diperbarui setelah ?
algorithms
shortest-path
pengguna1675999
sumber
sumber
Jawaban:
Pertimbangkan jalur terpendek dari ke , . Jalur ini paling banyak terdiri dari tepi, karena pengulangan simpul pada jalur terpendek selalu merupakan ide yang buruk (atau setidaknya ada jalur terpendek yang tidak mengulangi simpul), jika kita tidak memiliki siklus bobot negatif .s t s,v1,v2,…,vk,t |V|−1
Di babak satu, kita tahu bahwa tepi akan rileks, sehingga perkiraan jarak untuk akan benar setelah putaran ini. Perhatikan bahwa kami tidak tahu apa pada saat ini, tetapi karena kami telah merilekskan semua sisi, kami juga harus merilekskan ini. Di babak dua, kita santai di beberapa titik. Kami masih tidak tahu apa itu atau , tetapi kami tahu perkiraan jarak mereka benar.(s,v1) v1 v1 (v1,v2) v1 v2
Mengulangi ini, setelah beberapa putaran , kita santai , setelah itu estimasi jarak untuk t benar. Kami tidak tahu apa k sampai seluruh algoritma selesai, tetapi kami tahu bahwa itu akan terjadi di beberapa titik (dengan asumsi tidak ada siklus bobot negatif).k+1 (vk,t) t k
Jadi, pengamatan penting adalah bahwa setelah putaran , simpul ke- i dari jalur terpendek harus memiliki estimasi jarak yang ditetapkan ke nilai yang benar. Karena jalur paling banyak | V | - Panjang 1 tepi, | V | - 1 putaran cukup untuk menemukan jalur terpendek ini. Jika a | Vi i |V|−1 | V| -1 Putaran ke-5 masih mengubah sesuatu, maka sesuatu yang aneh sedang terjadi: semua jalur harus sudah 'diselesaikan' ke nilai akhir mereka, jadi kita harus memiliki situasi di mana ada siklus bobot negatif.|V|
sumber
Jalan terpanjang bisa tanpa siklus apa pun
|V|
. Kita mulai dengan sumber, jadi kita sudah memiliki jalur dengan panjang 1, jadi kita perlu|V| - 1
lebih banyak simpul untuk mendapatkan jalur terpanjang.Urutan tidak penting karena setiap pesanan akan mempertahankan yang invarian: setelah
n
iterasi, nilai untuk setiap node kurang dari atau sama dengan biaya jalur biaya minimum daris
ke node yang mengandung paling banyakn
tepi.Jika, pada awal iterasi, biayanya tepat hingga
n
node, maka pada akhir iterasinya benar hinggan+1
node. Penataan ulang dapat menyebabkan beberapa node memiliki biaya yang lebih rendah sebelum mereka biasanya diperbarui, tetapi mereka akhirnya akan diperbarui pula.sumber