如果我们将Dijkstra算法从“单个源到所有节点的最短路径”修改为找到从“单个源到单个目标点”的最短路径,那么修改后的Dijkstra和统一成本搜索之间会有什么区别?任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
没有区别。如果使用dijkstra,则从单一源开始时,将为所有节点计算最短路径。您从源节点访问连接的节点。然后,下一个节点是优先级队列中最短的成本节点。在将新节点插入优先级队列之前,请检查当前节点成本和新成本。如果新成本小于节点成本,则将此节点插入优先级队列。
查看this,了解如何计算所有节点的单一来源。
答案 1 :(得分:0)
在Dijkstra’s Algorithm versus Uniform Cost Search or a Case Against Dijkstra’s Algorithm中可以很好地剖析这两种算法之间的差异。我只是引用您Arial Felner的一些结论:
这两种算法有很多相似之处,并且在逻辑上 当量。最重要的相似之处是它们完全扩展 相同的节点,并且顺序完全相同。
我们怀疑,从理论上讲,这两种算法是等效的。
但是,这些算法之间存在许多差异,例如 在教科书中有描述,在课堂上有讲授。主要区别是优先级中节点的身份 队列。在修改后的 Dijkstra 中,所有节点最初都插入到队列中。在 UCS 中, 在搜索过程中懒惰地将节点插入队列。
因此,
总而言之,UCS和改良的Dijkstra在O复杂度方面是等效的,以相同的顺序扩展相同的节点,但是从实际的角度来看, UCS应该是首选,并且在处理单一来源-没有启发式信息的单一目的地问题时被广泛使用。