Dijkstra算法如何更好地找到A *算法来寻找最短路径?

时间:2011-02-13 06:03:56

标签: algorithm dijkstra

Dijkstra算法如何更好地找到A *算法来寻找最短路径?

2 个答案:

答案 0 :(得分:11)

寻找最短路径并不是更好。只要你对A *有一个可接受的启发式,它就会发现短路径比Dijkstra更快。

正如Mehrad在评论中指出的那样,如果你给它一个返回0的启发式函数,A *会降级为Dijktras。

wikipedia article for A*有很多关于所有这些的好信息。

答案 1 :(得分:3)

如果你想找到一个给定源节点到图中所有节点的最短路径,那么Dijkstra优于A *,因为如果你不停留在Dijkstra,那么无论如何都要覆盖整个图形。具体目标。与简单的Dijkstra相反,A *是面向目标的算法,因此需要知道源节点和目标节点。如果你想用N *节点用A *算法覆盖整个图形,你基本上必须从源节点运行N次算法。

Dijkstra也可能更好地找到从源节点到图的许多目标的最短路径。取决于目标的位置(特别是距离源的距离),目标数量M,图形的大小,A *启发式的质量,将有一些收支平衡点,其中运行一个Dijkstra比运行更好或更低性能M乘以A *算法。

编辑:受到马修正确评论的启发,我重新措辞并添加评论:

  • Dijkstra在寻找所有节点的最短路径方面并不比A *更好。正确的是:它不比A *差。
  • 要找到带有A *的所有节点的最短路径,将设置估算目标节点的成本为零的函数(因为没有目标节点)。将估计目标节点的成本的函数设置为零使得A *与Dijkstra相同; Dijkstra是A *的一个特例。 (如果函数设置为零,那么是否应该将算法称为“A *”(而不仅仅是“Dijkstra”)是值得怀疑的,因为具有非零函数是A *的核心。)
  • 当我们试图找到所有节点的最短路径时,我们也可以说:Dijkstra就足够了。 A *的改进不是必要的,对我们没有帮助。
  • 最后一句话也适用于在图表中搜索,例如:查找标记有最接近给定源节点的特定标志的节点。由于您事先不知道目标,因此无法定义估算搜索节点成本的函数,因此A *(在非零函数的狭义上)不适用。