Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 在迪克斯特拉';s算法为什么必须首先以当前最小的代价扩展节点?_Algorithm_Search_Graph_Shortest Path_Dijkstra - Fatal编程技术网

Algorithm 在迪克斯特拉';s算法为什么必须首先以当前最小的代价扩展节点?

Algorithm 在迪克斯特拉';s算法为什么必须首先以当前最小的代价扩展节点?,algorithm,search,graph,shortest-path,dijkstra,Algorithm,Search,Graph,Shortest Path,Dijkstra,我在其他帖子中读到,Dijkstra的算法总是首先扩展最短路径。为什么必须以这种方式实施?假设我们创建了Dijkstra的一个轻松版本,它扩展了任何未访问的路径/节点,只要它们的成本(在上一次迭代中计算)小于无穷大 我已经研究了一些示例,但还没有展示一个示例,该示例无法使用此放松版本的算法计算正确的最短路径。如果展开任何节点,您最终会找到一些通往目标的路径,但无法保证通往目标的路径成本是最优的 如果找到一条通往已访问节点的更便宜路径,则必须通过传递方式更新此已访问节点的所有节点,从而使松弛算法的

我在其他帖子中读到,Dijkstra的算法总是首先扩展最短路径。为什么必须以这种方式实施?假设我们创建了Dijkstra的一个轻松版本,它扩展了任何未访问的路径/节点,只要它们的成本(在上一次迭代中计算)小于无穷大

我已经研究了一些示例,但还没有展示一个示例,该示例无法使用此放松版本的算法计算正确的最短路径。

如果展开任何节点,您最终会找到一些通往目标的路径,但无法保证通往目标的路径成本是最优的

如果找到一条通往已访问节点的更便宜路径,则必须通过传递方式更新此已访问节点的所有节点,从而使松弛算法的效率低于原始算法。

如果展开任何节点,你最终会找到通往目标的路径,但你不能保证通往目标的路径成本是最优的


如果找到一条通往已访问节点的较便宜路径,则必须通过传递方式更新此已访问节点的所有节点,从而使松弛算法的效率低于原始算法。

我理解,如果我们在达到目标后停止,则松弛算法可能会产生次优路径成本。但是,如果我们假设它必须一直运行到完成(即,一旦每个节点都被访问,它就会停止运行),该怎么办呢。它是否仍然会计算出从源到目的地的错误总成本?如果您第一次访问某个节点时碰巧访问了更昂贵路径上的任何一个节点,并且如果您检测到更便宜的路径,则不更新成本,那么您最终将获得昂贵的总成本。在这种情况下,访问每个节点一次并不是一个充分的终止标准。如果您确实更新了节点成本,那么您也必须更新可传递的成本,这些可传递的更新将使您的懒惰算法在运行时比原始算法更昂贵。我理解,如果我们在达到目标后停止,那么放松的算法可能会产生次优的路径成本。但是,如果我们假设它必须一直运行到完成(即,一旦每个节点都被访问,它就会停止运行),该怎么办呢。它是否仍然会计算出从源到目的地的错误总成本?如果您第一次访问某个节点时碰巧访问了更昂贵路径上的任何一个节点,并且如果您检测到更便宜的路径,则不更新成本,那么您最终将获得昂贵的总成本。在这种情况下,访问每个节点一次并不是一个充分的终止标准。如果您确实更新了节点成本,那么您也必须更新可传递的成本,并且这些可传递的更新将使您的惰性算法在运行时比原始算法更昂贵