[英]Weighted Directed Graph best method for shortest path
对于我正在做的一个问题,我很困惑为什么答案是 BFS 而不是 Dijkstra 的算法。
问题是:有一个加权有向图 G=(V,E),具有 n 个节点和 m 个边。 每个节点的权重为 1 或 2。问题是要找出使用哪种算法在 G 中找到从给定顶点 u 到给定顶点 v 的最短路径。选项有:
a) O(n+m) time using a modified BFS
b) O(n+m) time using a modified DFS
c) O(mlogn) time using Dijkstra's Algorithm
d) O(n^3) time using modified Floyd-Warshall algorithm
答案是 a) O(n+m) 时间使用修改后的 BFS,
我知道在将 BFS 与 DFS 进行比较时,BFS 更适合较短的路径。 我也知道 Dijkstra 的算法类似于 BFS,如果我没记错的话,Dijkstra 的算法更适合这种情况下的加权图。 我假设 BFS 更好,因为它说修改后的 BFS,但修改的确切含义是什么,或者还有另一个原因 BFS 会更好。
Since all paths are limited to either a distance of 1 or 2, for every edge of length 2 from nodes a
to b
you can just create a new node c
with an edge from a
to c
of length 1 and an edge from c
to b
长度为 1,然后这变成一个只有权重为 1 的边的图,通常可以BFS
找到从u
到v
的最短路径。 由于您只添加了O(m)
个新节点和O(m)
个新边,因此 BFS 的时间复杂度为O(n+m)
。
另一种可能性是,在 BFS 的每一层,存储另一个节点列表,这些节点由当前层的权重为 2 的边获得,并与稍后获得两层的节点同时考虑它们。 这种方法虽然有点挑剔。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.