Это зависит от вашей эвристической функции .например, если у вас идеальная эвристика [h*
], тогда алгоритм жадный (*) даст лучший результат, чем A *, и все равно будет оптимальным [поскольку ваша эвристика идеальна!],Он будет разрабатывать только узлы, необходимые для решения.К сожалению, редко бывает идеальная эвристика.
(*) жадный алгоритм: всегда разрабатывайте узел с наименьшим значением h
.
Однако, если ваша эвристика очень плохая: h=0
, то A * на самом деле BFS!И A * в этом случае будет развивать O(B^d)
узлов, где B - коэффициент ветвления, а d - количество шагов, необходимых для решения.
В этом случае, поскольку у вас есть одна целевая функция, двунаправленный поиск (*) будет более эффективным, так как для него нужно развить только O(2*B^(d/2))=O(B^(d/2))
узлов, что намного меньше, чемчто A * будет развиваться.
двунаправленный поиск: (*) запуск BFS от цели и от начальных узлов, каждая итерация - один шаг с каждой стороны, алгоритм заканчивается, когда в обоих фронтах есть общая вершина.
Дляв среднем случае, если у вас есть эвристика, которая не является идеальной, но не полностью тербильной, A *, вероятно, будет работать лучше, чем оба решения.
Возможная оптимизация для среднего случая : Вы также можетезапустить двунаправленный поиск с помощью A *: со стартовой стороны вы можете запустить A * со своей эвристикой и обычным BFS со стороны цели.Будет ли решение быстрее?Понятия не имею, вы должны, вероятно, сравнить две возможности и найти, что лучше.Однако решение, найденное с помощью этого алгоритма, также будет оптимальным, как BFS и A *.