2 つの状態間の最短経路を見つけるためのA* 検索アルゴリズムを実装しました。アルゴリズムは、訪問した状態の既知の最適な距離を格納するためにハッシュ マップを使用します。そして、最短経路の再構築に必要な親子関係を格納するための 1 つのハッシュマップ。
これがコードです。アルゴリズムの実装は一般的です (状態は「ハッシュ可能」および「比較可能」である必要があるだけです) が、この特定のケースでは、状態は int のペア (ベクトル) であり[x y]
、特定のハイトマップ内の 1 つのセルを表します (隣接するセルにジャンプするためのコストは依存します)身長差について)。
質問は、パフォーマンスを向上させることが可能かどうか、そしてその方法は? おそらく、1.2 または将来のバージョンのいくつかの機能を使用したり、アルゴリズム実装のロジックを変更したり (たとえば、パスを格納する別の方法を使用する)、またはこの特定のケースで状態表現を変更したりすることでしょうか?
このマップのJava 実装は瞬時に実行され、Clojure 実装には約 40 秒かかります。もちろん、これにはいくつかの自然で明白な理由があります: 動的型付け、永続的なデータ構造、プリミティブ型の不要な (アン) ボックス化...
トランジェントを使用しても大きな違いはありませんでした。