Алгоритм Беллмана-Форда определяет кратчайший путь от источника до всех других вершин. Первоначально расстояние между и всеми остальными вершинами установлено в . Затем вычисляется кратчайший путь от до каждой вершины; это продолжается для итераций. Мои вопросы:
- Почему должны быть итерации ?
- Было бы важно, если бы я проверил края в другом порядке?
Скажем, если я сначала проверю ребра 1,2,3, но затем на второй итерации я проверю 2,3,1.
Профессор MIT Эрик сказал, что порядок не имеет значения, но меня это смущает: не будет ли алгоритм некорректно обновлять узел на основе ребра если его значение зависит от ребра но обновляется после ?
algorithms
shortest-path
user1675999
источник
источник
Ответы:
Рассмотрим кратчайший путь из в t , s , v 1 , v 2 , … , v k , t . Этот путь состоит не более чем из | V | - 1 ребро, потому что повторение вершины в кратчайшем пути всегда плохая идея (или, по крайней мере, существует кратчайший путь, который не повторяет вершины), если у нас нет циклов с отрицательным весом.s t s,v1,v2,…,vk,t |V|−1
В первом раунде мы знаем, что ребро будет ослаблено, поэтому оценка расстояния для v 1 будет правильной после этого раунда. Обратите внимание, что мы понятия не имеем, что такое v 1 в этой точке, но, поскольку мы ослабили все ребра, мы, должно быть, ослабили и это. Во втором раунде мы расслабляемся ( v 1 , v 2 ) в некоторой точке. Мы до сих пор не знаем, что такое v 1 или v 2 , но мы знаем, что их оценки расстояний верны.(s,v1) v1 v1 (v1,v2) v1 v2
Повторяя это, после некоторого раунда мы ослабили ( v k , t ) , после чего оценка расстояния для t является правильной. Мы не знаем, что такое k , пока весь алгоритм не закончится, но мы знаем, что это произойдет в какой-то момент (при условии отсутствия циклов с отрицательным весом).k+1 (vk,t) t k
Таким образом, важно наблюдение , что после первого раунда , то я -й узел кратчайшего пути должен иметь свою оценку расстояния установлен на правильное значение. Как путь не более | V | - 1 ребро длинное, | V | - 1 раунда достаточно, чтобы найти этот кратчайший путь. Если | V | Третий раунд все еще что-то меняет, затем происходит что-то странное: все пути уже должны быть «согласованы» с их окончательными значениями, поэтому мы должны иметь ситуацию, что существует некоторый отрицательный цикл веса.i i |V|−1 |V|−1 |V|
источник
Самая длинная дорожка может быть без всяких циклов
|V|
. Мы начнем с источника, поэтому у нас уже есть путь длиной 1, поэтому нам нужно|V| - 1
больше узлов, чтобы получить самый длинный путь.Порядок не имеет значения, потому что каждый заказ будет поддерживать инвариант: после
n
итераций значение для каждого узла будет меньше или равно стоимости минимальной стоимости пути отs
узла, содержащего не болееn
ребер.Если в начале итерации стоимость верна до
n
узлов, то в конце итерации она верна доn+1
узлов. Изменение порядка может привести к тому, что некоторые узлы будут стоить дешевле, прежде чем они будут обычно обновляться, но в конечном итоге они все равно будут обновлены.источник