我被要求调查Dijkstra算法的改进。我一直在研究A Star算法,但我发现许多解释都使用了不熟悉的单词和数学符号。
我理解A Star只考虑朝向目标节点的边缘。例如,如果将A Star算法应用于英国的道路网络,目的地是Dundee,而我从伦敦开始,则只会检查向北的边缘。
这至少是正确的吗?
答案 0 :(得分:8)
A *使用启发式方法来猜测节点到目标的最低成本。因此,在选择节点时,您不仅要分析从该节点开始的成本,还要分析从节点到目标的可能成本。这允许忽略可能导致错误方向的路径。
如果示例中的启发式使用节点的地理距离,则将首先检查通向北方的道路(因为它们具有较小的估计总成本)。但是在执行算法期间,这些道路可能会从一开始就聚集一个非常大的实际距离(可能是因为有很多曲线)。然后还可以检查通往南方的道路。因此,如果它比通往北方的所有弯曲道路都短(不考虑GB的实际路线图),可以向南走一点并向北直行。
启发式的本质定义了算法的质量。如果启发式给出距离的下限(即,不可能以比启发式说的更便宜的成本到达目标),则路径实际上是最短路径。如果启发式不是下限,则也可以允许其他路径(这可能是算法运行时和路径质量之间的权衡)。启发式算法估计最小成本越好,您检查的错误方向就越少。即如果启发式是常数,那么你最终会得到一个普通的Dijkstra算法。如果启发式计算目标的实际成本,您将只遵循最短路径,并且不会检查其他节点。