Зачем использовать алгоритм Дейкстры вместо лучшего (самого дешевого) первого поиска?

из того, что я прочитал до сих пор. The Лучший Поиск Кажется быстрее с точки зрения поиска кратчайшего пути к цели, потому что алгоритм Дейкстры должен расслабить все узлы, когда он пересекает график. Что делает алгоритм Дейкстры лучше, чем лучший первый поиск?

3 ответов


редактировать: ваше редактирование уточняет, что вас интересует Лучший-Первый Поиск, а не BFS.

лучший-первый поиск на самом деле информированный алгоритм, который сначала расширяет наиболее перспективный узел. Очень похож на известный a* алгоритм (на самом деле* - это конкретный алгоритм поиска).

Dijkstra неинформированный алгоритм - он должен использоваться, когда у вас нет знания по графике, и не может оценить расстояние от каждого узла до цели.

обратите внимание, что A* (который является s лучшим первым поиском) распадается на алгоритм Дейкстры при использовании эвристическая функция h(v) = 0 для каждого v.

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

вывод: лучший-первый поиск должен быть предпочтительнее dijkstra, когда у вас есть некоторые знания на графике, и может оценить расстояние от цели. Если вы этого не сделаете-неинформированный лучший-первый поиск, который использует h(v) = 0, и реле только на уже исследованных вершинах, распадается на алгоритм Дейкстры.
кроме того, если оптимальность важна-алгоритм Дейкстры всегда подходит, в то время как лучший алгоритм поиска (A * в частности) может использоваться только при наличии соответствующей эвристической функции.


оригинальный ответ-ответ, почему выбрал Dijkstra над BFS:

BFS терпит неудачу, когда дело доходит до взвешенных графов.

пример:

     A
   /   \
  1     5
 /       \
B----1----C

здесь: w(A,B) = w(B,C) = 1, w(A,C) = 5.

BFS из A вернется A->C как кратчайший путь, но для взвешенного графа, это путь вес 5!!! а самый короткий путь имеет вес 2: A->B->C.
алгоритм Дейкстры не допустит этой ошибки и вернет кратчайший взвешенный путь.

если ваш график невзвешенный-BFS является оптимальным и полным - и обычно следует предпочесть дийкстре-и потому, что это проще и быстрее (по крайней мере, асимптотически говоря).


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


BFS хорош для нахождения кратчайшего пути от источника к вершине в случае, когда все ребра имеют одинаковый вес, т. е. найти минимум ребер от источника к вершине. А Dikjstra держит хорошо для взвешенных графов