Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 什么';改进的Dijkstra单源、单目的地和统一成本搜索之间的区别是什么?_Algorithm_Comparison_Updates_Dijkstra_Ucs - Fatal编程技术网

Algorithm 什么';改进的Dijkstra单源、单目的地和统一成本搜索之间的区别是什么?

Algorithm 什么';改进的Dijkstra单源、单目的地和统一成本搜索之间的区别是什么?,algorithm,comparison,updates,dijkstra,ucs,Algorithm,Comparison,Updates,Dijkstra,Ucs,如果我们将Dijkstra算法从“单源到所有节点的最短路径”修改为从“单源到单目的点”的最短路径,那么这种修改后的Dijkstra算法与统一成本搜索有什么区别?任何帮助都将不胜感激。谢谢。没有区别。如果您使用dijkstra,当您从单个源开始时,将计算出所有节点的最短路径。您可以从源节点访问连接的节点。然后,下一个节点是优先级队列中最短的成本节点。在优先级队列中插入新节点之前,请检查当前节点成本和新成本。若新成本小于节点成本,则将此节点插入优先级队列 查看以了解如何计算单个源到所有节点。中对两种

如果我们将Dijkstra算法从“单源到所有节点的最短路径”修改为从“单源到单目的点”的最短路径,那么这种修改后的Dijkstra算法与统一成本搜索有什么区别?任何帮助都将不胜感激。谢谢。

没有区别。如果您使用dijkstra,当您从单个源开始时,将计算出所有节点的最短路径。您可以从源节点访问连接的节点。然后,下一个节点是优先级队列中最短的成本节点。在优先级队列中插入新节点之前,请检查当前节点成本和新成本。若新成本小于节点成本,则将此节点插入优先级队列


查看以了解如何计算单个源到所有节点。

中对两种算法之间的差异进行了很好的剖析。我只是引用Arial Felner的一些结论:

这两种算法有许多相似之处,在逻辑上是一致的 相等的最重要的相似之处在于它们精确地展开 相同的节点和顺序完全相同

正如我们所怀疑的,从理论角度来看,这两种算法是等价的

然而,这些算法之间也有许多不同之处 在教科书中描述并在课堂上教授。主要区别在于优先级中节点的标识 队列。在修改后的Dijkstra中,所有节点最初都插入队列中。在UCS, 在搜索过程中,节点被延迟插入队列


因此

  • 就内存需求而言,它们是不同的,UCS的OPEN比改进的Dijkstra的Q小得多。在任何给定的时间步长下,改进Dijkstra的内存需求都大于UCS
  • 就运行时间而言,同样的推理也适用于操作OPEN或Q的时间开销。修改的Dijkstra操作这些结构的开销更大,因为它存储的节点具有dist[]=∞, 它永远不会被扩展。相反,在UCS中,“打开”仅包括具有距离的节点≠ ∞, i、 例如,只有逻辑上需要并且可能被选择用于扩展的节点

  • 综上所述,UCS和改进的Dijkstra在其大O复杂度方面是等效的,以相同的顺序扩展相同的节点,但是从实用角度来看,UCS应该是首选的,并且在没有启发式信息的情况下处理单源-单目的地问题时使用更广泛

    我对我的问题进行了编辑,使之更清楚,即使在复杂性或其他方面,是否仍然没有区别?