Зачем использовать алгоритм Дейкстры вместо лучшего (самого дешевого) первого поиска?
из того, что я прочитал до сих пор. 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 держит хорошо для взвешенных графов