dijkstra的vs Bellman-Ford算法

时间:2019-11-28 07:19:02

标签: algorithm graph dijkstra graph-traversal bellman-ford

我目前的理解是dijkstra的算法比bellman-ford更有效,但它不能处理负边缘。但是,假设我们有一个边缘加权图,其中有负权重的边缘,图中没有负权重的循环,我们是否仍可以使用dijkstra的算法?

1 个答案:

答案 0 :(得分:1)

这个问题在这里已经得到很好的回答。 https://stackoverflow.com/a/13159425/12449779

总而言之,Dijkstra的算法在每次迭代中都将顶点标记为与“标记的”顶点相距最小距离。最初,源顶点是唯一的距离为0的标记顶点。假设存在两个标记顶点A和B,它们与源之间的距离有限,并且它们的路径重叠。当前,到A和B的路径将被视为从A到B的最短路径。由于路径不重叠,因此从Source到A到B的任何路径的长度应为source到A的长度+从A到B的路径的长度B大于从源到B的路径,因为从源到A和B的路径不重叠。但是,如果允许负负边缘,则成立。由于从A到B的路径长度可能为负。因此, Dijkstra的算法不起作用。没有简单的方法将具有负边缘的一般图形转换为具有非负边缘的普通图形。 Bellman Ford适用于任何不包含负加权循环的图形。