Algorithm 有人能告诉我为什么我的算法是错误的吗?
我正在研究单源最短路径问题,我对bfs做了一个修改,可以解决这个问题。该算法运行时间为O(2E)次,我只是不明白为什么它是错误的(必须是这样,否则dijstra的算法将不是最有效的算法)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
在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
将不再被访问