Зачем использовать алгоритм Дейкстры, если быстрый поиск по Breadth First Search (BFS) может сделать то же самое быстрее?

Оба могут быть использованы для поиска кратчайшего пути из одного источника. BFS работает в O(E+V), а Дейкстра работает в O((V+E)*log(V)).

Кроме того, я видел, как Дейкстра часто использовал протоколы маршрутизации.

Итак, зачем использовать алгоритм Дейкстры, если BFS может делать то же самое быстрее?

Ответ 1

Dijkstra позволяет назначать расстояния, отличные от 1 для каждого шага. Например, при маршрутизации расстояния (или веса) могут быть назначены скоростью, стоимостью, предпочтением и т.д. Затем алгоритм дает вам кратчайший путь от вашего источника до каждого node в пройденном графике.

В то же время BFS в основном просто расширяет поиск на один "шаг" (ссылка, край, все, что вы хотите назвать в своем приложении) на каждой итерации, которая, как оказалось, влияет на поиск наименьшего количества шагов, перейдите к любому заданному node из вашего источника ( "root" ).

Ответ 2

Если вы рассматриваете туристические сайты, они используют алгоритм Дейкстры из-за весов (расстояний) на узлах.

Если вы будете рассматривать одинаковое расстояние между всеми узлами, то лучше выбрать BFS.

Например, рассмотрим A -> (B, C) -> (F) с весами ребер, заданными A->B= 10, A->C= 20, B->F= C->F= 5.

Здесь, если мы применяем BFS, ответом будет ABF или ACF, так как оба являются кратчайшими (относительно количества ребер), но если мы применим Dijstra's, ответ будет ABF только потому, что он считает веса на подключенном пути.

Ответ 3

Алгоритм Дейкстры

  • Как BFS для взвешенных графиков.
  • Если все затраты равны, Dijkstra = BFS

Источник: https://cs.stanford.edu/people/abisee/gs.pdf

Ответ 4

С точки зрения реализации алгоритм Дейкстры может быть реализован точно так же, как BFS, путем замены queue priority queue.

Источник: введите описание ссылки здесь