Алгоритм Форда-Беллмана
Версия от 06:35, 1 декабря 2010; 192.168.0.2 (обсуждение)
Эта статья находится в разработке!
Алгоритм
Для заданного взвешенного графа
алгоритм находит кратчайшие пути из заданной вершины до всех остальных вершин, в случае когда в графе содержатся отрицательные циклы достижимые из алгоритм сообщает, что кратчайших путей не существует.Псевдокод
Bellman_Ford(G, s) for для каждойdo for to do for для каждого ребра do if then for для каждого ребра do if then return return
Корректность алгоритма Беллмана-Форда
Лемма: |
Пусть -взвешенный ориентированный граф, — стартовая вершина. Тогда после завершения итераций цикла для всех вершин, достижимых из s выполняется равенство . |
Доказательство: |
Рассмотрим произвольную вершину | достижимую из , , где , — кратчайший ациклический путь из в . Путь содержит не более ребер. На каждой из итераций цикла релаксируются ребер. Среди ребер, прорелаксированных во время i-й итерации находится ребро . Поэтому выполнены равенства
Сложность
Инициализация занимает
времени, каждый из проходов требует времени, обход по всем ребрам для проверки наличия отрицательного цикла занимает времени. Итого алгоритм Беллмана-Форда работает за времени.