Попробуйте несколько, измерьте, выберите самое быстрое, адаптируйтесь к вашим потребностям.Производительность в основном определяется выбором эвристической функции, которая не зависит от собственно A *.
Если эвристика фиксирована, реализация очереди приоритетов, скорее всего, станет узким местом, поэтому попробуйте сопряжениекуч .Это одни из самых быстрых структур данных кучи на практике, и они имеют преимущество перед двоичными кучами в том, что они позволяют O (1) время вставки + амортизированный O (log n) pop-min.Это важно в ожидаемом случае многих циклов A *, когда очередь заполняется, но никогда не очищается полностью, т. Е. Количество вставок намного больше, чем количество всплывающих окон.
Если память становится проблемой, переключитесь на итеративно углубляющийся A * (IDA *) или рекурсивный поиск по принципу «лучший сначала» (RBFS).
Если ничего не работает, попробуйте использовать алгоритм аппроксимации (жадный поиск).Простая оптимизация прилично написанного цикла A * не даст вам огромного ускорения.
См. Рассел и Норвиг для алгоритмов и хорошего обсуждения проблем.