Прав ли я относительно различий между алгоритмами Флойд-Варшалла, Дейкстры и Беллмана-Форда?


16

Я изучал эти три, и я излагаю свои выводы из них ниже. Может ли кто-нибудь сказать мне, достаточно ли я их понял, или нет? Спасибо.

  1. Дейкстры алгоритм используется только тогда , когда у вас есть один источник , и вы хотите знать , наименьший путь от одного узла к другому, но не может в таких случаях , как это .

  2. Алгоритм Флойда-Варшалла используется, когда любой из всех узлов может быть источником, поэтому вы хотите, чтобы кратчайшее расстояние достигло любого конечного узла из любого исходного узла. Это терпит неудачу только при наличии отрицательных циклов.

  3. Bellman-Ford используется как Dijkstra, когда есть только один источник. Это может обрабатывать отрицательные веса, и его работа такая же, как у Флойд-Варшалла, за исключением одного источника, верно? (Это тот, в котором я менее всего уверен.)


Добро пожаловать! Я отредактировал лишние части кода; люди могут переходить в Википедию самостоятельно или проверять алгоритмы в своих любимых учебниках. Обратите внимание, что ваш вопрос странный, потому что ответ «да» не может состоять из ничего более.
Рафаэль

Ответы:


23

Алгоритм Дейкстры используется только тогда, когда у вас есть один источник, и вы хотите знать наименьший путь от одного узла к другому, но он терпит неудачу [в графах с отрицательными ребрами]

Алгоритм Дейкстры является одним из примеров кратчайшего пути из одного источника или алгоритма SSSP . Каждый алгоритм SSSP вычисляет расстояния по кратчайшему пути от выбранного исходного узла до каждого другого узла в графе. Более того, он вычисляет компактное представление всех кратчайших путей от до любого другого узла в форме корневого дерева. В коде Википедии, является родителем в этом дереве.ssprevious[v]v

Поведение алгоритма Дейкстры в графах с отрицательными ребрами зависит от конкретного обсуждаемого варианта. Некоторые варианты алгоритма, такие как в Википедии, всегда работают быстро, но неправильно вычисляют кратчайшие пути при наличии отрицательных ребер. Другие варианты, такие как вариант в этих примечаниях к лекции, всегда правильно вычисляют кратчайшие пути (если нет источника, до которого можно добраться до отрицательного цикла), но в худшем случае может потребоваться экспоненциальное время при наличии отрицательных ребер.

Алгоритм Флойда-Варшалла используется, когда любой из всех узлов может быть источником, поэтому вы хотите, чтобы кратчайшее расстояние достигло любого узла назначения из любого узла-источника. Это терпит неудачу только при наличии отрицательных циклов.

Правильно. Floyd-Warshall - один из примеров алгоритма кратчайшего пути для всех пар , то есть он вычисляет кратчайшие пути между каждой парой узлов. Другой пример - «для каждого узла v запустите Dijkstra с v в качестве исходного узла». Есть несколько других.

Bellman-Ford используется как Дейкстра, когда есть только один источник. Это может обрабатывать отрицательные веса, и его работа такая же, как у Флойд-Варшалла, за исключением одного источника, верно?

Беллман-Форд является еще одним примером алгоритма кратчайшего пути из одного источника , такого как Дейкстра. Беллман-Форд и Флойд-Варшалл похожи - например, они оба алгоритмы динамического программирования - но Флойд-Варшалл не тот же алгоритм, что и "для каждого узла v, запустите Bellman-Ford с v в качестве исходного узла". В частности, Флойд-Варшалл работает за время , тогда как повторный Беллман-Форд работает за время ( для каждой исходной вершины).О(В3)О(В2Е)О(ВЕ)

Для более подробной информации, обратитесь к вашему любимому учебнику по алгоритмам. (У вас есть любимый учебник алгоритмов, не так ли?)


Не могли бы вы поделиться своим любимым учебником по алгоритмам?
Абдул

2

@ Абдул приманки. - Учебником, используемым в MIT / Stanford, является T. Cormen, et al. Введение в алгоритмы. Учебником, используемым в Корнелле, является J. Kleinberg и др. Algorithm Design. cs.sjtu.edu.cn/~jiangli/teaching/CS222/files/materials/…
AffluentOwl

2

Все три алгоритма представлены на слайдах лекций профессора Джахьюна Парк (Стэнфордский университет). Вот ссылка Алгоритмы кратчайшего пути


Это не отвечает на вопрос о различиях и не является автономным, просто ссылка без резюме не считается хорошим ответом. Также это кажется излишним, поскольку оно не охватывает больше, чем существующие ответы.
Зло

1

Страница Википедии о проблеме кратчайшего пути описывает две разные проблемы: SSSP и APSP.

Кратчайший путь с одним источником (SSSP):

  • Алгоритм Дейкстры: решает проблему кратчайшего пути из одного источника.
    • Ограничения: только отрицательные края, которые он не может обработать.
    • Невзвешенные графы: Дейкстры такие же, как BFS.
  • Алгоритм Беллмана – Форда: решает проблему с одним источником, если вес ребер может быть отрицательным. Это улучшение Dijkstra, где он теперь может обрабатывать и отрицательные веса.

Все пары кратчайшего пути (APSP):

  • Алгоритм Флойда – Варшалла: решает все пары кратчайших путей. Обрабатывает как положительные, так и отрицательные края.
    • Ограничения: не может обрабатывать отрицательные циклы.

Следовательно, Флойд-Варшалл не то же самое, что BFS, хотя основная методология та же, динамическое программирование.


1

Возможно, это должен быть комментарий, а не ответ, но это различие между этими алгоритмами, которое другие ответы не упоминают.

Люди склонны называть алгоритм Флойда Флойд-Варшаллом , но алгоритмы Флойда и Варшалла не совпадают.

О(1)О(N2)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.