Алгоритм Форда-Беллмана — различия между версиями
(→Корректность алгоритма Беллмана-Форда) |
|||
Строка 35: | Строка 35: | ||
== Литература == | == Литература == | ||
Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ / пер. с англ. — изд. 2-е — М.: Издательский дом «Вильямс», 2009. — с.672 — 676. — ISBN 978-5-8459-0857-5. | Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ / пер. с англ. — изд. 2-е — М.: Издательский дом «Вильямс», 2009. — с.672 — 676. — ISBN 978-5-8459-0857-5. | ||
+ | |||
+ | [[Категория: Алгоритмы и структуры данных]] | ||
+ | [[Категория: Кратчайшие пути в графах]] |
Версия 22:38, 25 сентября 2011
Эта статья находится в разработке!
Алгоритм
Для заданного взвешенного графа
алгоритм находит кратчайшие пути из заданной вершины до всех остальных вершин, в случае когда в графе содержатся отрицательные циклы достижимые из алгоритм сообщает, что кратчайших путей не существует.Псевдокод
Bellman_Ford(G, s) for для каждойdo for to do for для каждого ребра do if then for для каждого ребра do if then return return
Корректность алгоритма Форда-Беллмана
Лемма: |
Пусть — взвешенный ориентированный граф, — стартовая вершина. Тогда после завершения итераций цикла для всех вершин, достижимых из , выполняется равенство . |
Доказательство: |
Рассмотрим произвольную вершину | , достижимую из , , где , — кратчайший ациклический путь из в . Путь содержит не более ребер. На каждой из итераций цикла релаксируются ребер. Среди ребер, прорелаксированных во время i-й итерации, находится ребро . Поэтому выполнены равенства .
Теорема: |
Пусть - взвешенный ориентированный граф, — стартовая вершина. Если граф не содержит отрицательных циклов, достижимых из вершины , то алгоритм возвращает и для всех . Если граф содержит отрицательные циклы, достижимые из вершины , то алгоритм возвращает |
Доказательство: |
Пусть граф Пусть граф не содержит отрицательных циклов, достижимых из вершины . Тогда если вершина достижима из , то по лемме . Если вершина не достижима из , то из несуществования пути. Теперь докажем, что алгоритм вернет значение . После выполнения алгоритма верно, что для всех , значит ни одна из проверок не вернет значения . содержит отрицательный цикл , где , достижимый из вершины . Тогда . Предположим, что алгоритм возвращает , тогда для выполняется . Просуммируем эти неравенства по всему циклу: . Из того, что следует, что . Получили, что , что противоречит отрицательности цикла . |
Сложность
Инициализация занимает
времени, каждый из проходов требует времени, обход по всем ребрам для проверки наличия отрицательного цикла занимает времени. Итого алгоритм Беллмана-Форда работает за времени.Литература
Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ / пер. с англ. — изд. 2-е — М.: Издательский дом «Вильямс», 2009. — с.672 — 676. — ISBN 978-5-8459-0857-5.