Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 有人能告诉我为什么我的算法是错误的吗?_Algorithm_Shortest Path - Fatal编程技术网

Algorithm 有人能告诉我为什么我的算法是错误的吗?

Algorithm 有人能告诉我为什么我的算法是错误的吗?,algorithm,shortest-path,Algorithm,Shortest Path,我正在研究单源最短路径问题,我对bfs做了一个修改,可以解决这个问题。该算法运行时间为O(2E)次,我只是不明白为什么它是错误的(必须是这样,否则dijstra的算法将不是最有效的算法) 在Dijkstra算法中,优先级队列确保在知道顶点与源的距离之前不会处理顶点 BFS没有此属性。如果到顶点的最短路径的边数多于边数最少的路径的边数,则会过早处理该路径 例如,当您需要从S到T的最短路径时,请考虑此图: S--5--C--1--T | | 1 1 | | A--1--B

我正在研究单源最短路径问题,我对bfs做了一个修改,可以解决这个问题。该算法运行时间为O(2E)次,我只是不明白为什么它是错误的(必须是这样,否则dijstra的算法将不是最有效的算法)


在Dijkstra算法中,优先级队列确保在知道顶点与源的距离之前不会处理顶点

BFS没有此属性。如果到顶点的最短路径的边数多于边数最少的路径的边数,则会过早处理该路径

例如,当您需要从
S
T
的最短路径时,请考虑此图:

S--5--C--1--T
|     |
1     1
|     |
A--1--B

顶点
C
将在顶点
B
之前访问。你会认为到
C
的距离是5,因为你还没有发现较短的路径。当访问
C
时,它将为
T
分配6的距离。这是不正确的,并且永远不会被修复,因为
C
不会再次被访问。

在Dijkstra的算法中,优先级队列确保在知道顶点与源的距离之前不会处理顶点

BFS没有此属性。如果到顶点的最短路径的边数多于边数最少的路径的边数,则会过早处理该路径

例如,当您需要从
S
T
的最短路径时,请考虑此图:

S--5--C--1--T
|     |
1     1
|     |
A--1--B
顶点
C
将在顶点
B
之前访问。你会认为到
C
的距离是5,因为你还没有发现较短的路径。当访问
C
时,它将为
T
分配6的距离。这是不正确的,并且永远不会被修复,因为
C
将不再被访问