12

免責事項: 私は主に C# 開発者であるため、Java のバックグラウンドはほとんどありません。

A* アルゴリズムの Java 実装が必要です。
はい、オンラインで同じバージョンをたくさん見ましたが、どれかを選ぶことができません。

アルゴリズムを高速化する Java のすべての新機能を使用する A* アルゴリズムの実装を探しています (少しでも)。その理由はMMO、パフォーマンスが最優先事項であるなどのパス検索を実装しているためです。

ポインターはありますか (少なくともどこを見るべきか)?

4

2 に答える 2

23

いくつか試して、測定し、最速のものを選び、ニーズに合わせてください。パフォーマンスは、適切な A* とは無関係なヒューリスティック関数の選択によって主に決定されます。

ヒューリスティックが修正されると、プライオリティ キューの実装がボトルネックになりそうなので、ペアリング ヒープを試してください。これらは、実際に最速のヒープ データ構造の一部であり、O(1) 挿入時間 + 償却 O(log n) ポップ分を許容するバイナリ ヒープよりも優れています。これは、多くの A* ループが予想される場合に重要です。この場合、キューはいっぱいになりますが、完全に空になることはありません。つまり、挿入の数が pop の数よりもはるかに多くなります。

メモリが問題になる場合は、反復深化 A* (IDA*) または再帰的最適優先検索 (RBFS) に切り替えます。

何も機能しない場合は、近似アルゴリズム (欲張り検索) の使用を検討してください。適切に作成された A* ループを単純に最適化しても、大幅な速度向上は得られません。

アルゴリズムと問題の適切な議論については、ラッセルとノーヴィグを参照してください。

于 2011-01-07T11:25:54.720 に答える
10

パフォーマンスが最優先事項である場合、A* はおそらく最良の選択ではありません。A* は正確な解を提供するため、正しい解が見つかるまで処理を保留します。十分に優れたソリューションをはるかに高速に提供する軽量ソリューションが他にもあります。

于 2011-01-07T11:36:46.120 に答える