私はパス検索プログラムを開発しています。理論的にはA*の方がダイクストラより優れていると言われています。実際、後者は前者の特殊なケースです。しかし、現実の世界でテストすると、本当に A* の方が優れているのではないかと疑い始めます。
各ノードの緯度と経度が与えられている第 9 回 DIMACS 実装チャレンジ - 最短経路のニューヨーク市のデータを使用しました。
A* を適用する場合、sin、cos、arcsin、平方根を含むHaversine Formulaを使用して、2 点間の球面距離を計算する必要があります。これらはすべて非常に時間がかかります。
結果は、
ダイクストラを使用: 39.953 ミリ秒、256540 ノードを拡張。
A* を使用すると、108.475 ミリ秒で、255135 ノードが拡張されました。
A* では、拡張したノードが 1405 未満であることに注意してください。ただし、ヒューリスティックを計算する時間は、節約された時間よりもはるかに多くなります。
私の理解では、その理由は、非常に大きな実際のグラフでは、ヒューリスティックの重みが非常に小さくなり、計算時間が支配的である一方で、ヒューリスティックの影響を無視できるからです。