【问题标题】:A*(a star) search algorithm for shortest pathA*(a star) 最短路径搜索算法
【发布时间】:2012-02-06 06:46:44
【问题描述】:

基本上我有一组包含 gps 坐标的节点,我如何以这样的方式实现 A* 搜索,以便我可以使用这些地理点将它们相互比较并通过分配一个距离来找到最短路径指向另一个。

更新:2012 年 1 月 11 日

我正在尝试绘制最短路径路径,通过上述算法遍历每个节点并比较遍历的节点的距离以找到最短路径来实现这一点。另一个问题是我在 Android/Java 中找不到正确的 A* 搜索实现。我现在的问题是:

  1. 既然我将保存每个道路交叉点的地理点(节点),我应该将它存储在数组还是链接列表中?

  2. 现在我们能够计算每个节点的距离,但不是动态的。我应该怎么做才能使用 A* 搜索计算最短路线。

【问题讨论】:

    标签: java android search routing a-star


    【解决方案1】:
    两点之间的

    欧几里得距离(即直线距离)可能是一个很好的启发式函数。

    Wikipedia 上查找有关 A* 搜索的详细信息。

    A* 搜索实际上是对Dijkstra 寻找单源最短路径算法的修改。唯一的区别是 A* 搜索使用启发式函数引导搜索,修剪不必要的搜索树分支。一个好的启发式函数应该被设计成它的值在任何搜索路径上都变得单调。它不应该高估两个状态之间的实际距离。由于欧几里得距离是两点之间的最小距离,因此不可能高估两点之间的距离。

    有关欧几里得距离的更多信息,请参阅here。要将其应用于地理坐标,请参阅here

    【讨论】:

    • 您能不能稍微阐述一下您的想法,先生,给我更多的提示。谢谢。
    • 非常感谢您的解释,先生。我仍然不知道如何将它与地理点连接。
    • A* 假定基于图块的空间。如果您想使用 GPS 点,则必须将它们叠加在某种形式的网格上,否则 A* 的效率将不复存在,因为不会修剪非最短路线。当然,由于两极会聚,GPS 坐标不在实际的矩形网格上。尝试搜索非基于平铺的路径查找。
    【解决方案2】:

    您到底想完成什么? A* 是一种启发式搜索算法,例如在游戏中用于寻找下一个“最佳”动作。是否试图找到连接所有这些节点的最短路径?在这种情况下,请查看/google 寻找“旅行推销员问题”。

    【讨论】:

      【解决方案3】:

      Here 是一种内存高效、经过良好测试、开源、真实世界的 A* 实现,也可以在 Android 上使用。距离计算可以很容易地替换(默认是一个快速的haversine实现)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多