我已经实现了一个A* 搜索算法来查找两个状态之间的最短路径。算法使用哈希映射来存储访问状态的最佳已知距离。以及一个用于存储重建最短路径所需的子父关系的哈希图。
这是代码。该算法的实现是通用的(状态只需要是“可散列的”和“可比较的”),但在这种特殊情况下,状态是整数对(向量),[x y]
它们代表给定高度图中的一个单元格(跳转到相邻单元格的成本取决于关于高度的差异)。
问题是是否可以提高性能以及如何提高性能?也许通过使用 1.2 或未来版本的某些功能,通过更改算法实现的逻辑(例如使用不同的方式存储路径)或在这种特殊情况下更改状态表示?
此地图的Java 实现会立即运行,而 Clojure 实现大约需要 40 秒。当然,这有一些自然而明显的原因:动态类型、持久数据结构、对原始类型进行不必要的(取消)装箱......
使用瞬变并没有太大的区别。