Я разрабатываю программу поиска пути. Теоретически говорят, что А * лучше, чем Дейкстра. Фактически, последний является частным случаем первого. Однако, при тестировании в реальном мире, я начинаю сомневаться, что A * действительно лучше?
Я использовал данные Нью-Йорка, от 9-й вызов реализации DIMACS - кратчайшие пути, в котором даны широта и долгота node.
При применении A * мне нужно рассчитать сферическое расстояние между двумя точками, используя Формулу Хаверсина, которая включает в себя sin, cos, arcsin, square root. Все они очень трудоемкие.
В результате получается
Использование Dijkstra: 39.953 ms, расширенные узлы 256540.
Использование A *, 108.475 ms, расширенных узлов 255135.
Заметив, что в * мы расширили менее 1405 узлов. Однако время для вычисления эвристики намного больше, чем это было спасено.
По моему мнению, причина в том, что на очень большом реальном графике вес эвристики будет очень мал, и его эффект можно игнорировать, а время вычисления доминирует.