Реализация алгоритма Star (A*) в Java

отказ от ответственности: у меня мало фона в Java, так как я преимущественно разработчик C#.

хотел бы иметь реализацию java алгоритма*.
Да, я видела много версий одного и того же онлайн и я не могу выбрать между ними.

Я ищу реализацию алгоритма A*, которая использует все новые функции java, что делает алгоритм быстрее(даже если немного). Причина в том, что мы реализуем это для поиска пути на MMO и поэтому производительность является главным приоритетом.

любой указатели ( по крайней мере, где искать ) ?

2 ответов


попробуйте несколько, измерить, выбрать самый быстрый, адаптироваться к вашим потребностям. Производительность в основном определяется выбором эвристической функции, которая не зависит от a * proper.

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

Если память становится проблемой, переключитесь на итеративное углубление A* (IDA*) или рекурсивный поиск best-first (RBFS).

Если ничего не работает, рассмотрите возможность использования алгоритма аппроксимации (жадный поиск). Просто оптимизация прилично написанного цикла* не даст вам огромные ускорения.

посмотреть Рассел и Норвиг для алгоритмов и хорошего обсуждения вопросов.


Если производительность является вашим главным приоритетом, A*, вероятно, не лучший выбор. A * предоставляет точное решение, и в результате будет продолжать обработку, пока не найдет правильный ответ. Есть и другие легкие решения, которые дают достаточно хорошие решения в гораздо более быстрое время: e.g принудительное восхождение на холм или лучше всего-сначала, даже простая глубина.