具有负权重的图表示例,Dijkstra的算法将正常工作

时间:2016-01-29 19:33:37

标签: algorithm graph dijkstra negative-number

这不是问题的另一个重复,试图理解,为什么Dijkstra不能使用负权重。我知道为什么,但在某些特殊情况下,它会与负重量一起使用,我正试图找到它们。

因此,在某些情况下,Dijkstra可以正确处理负权重的图形,但我找不到示例。有没有人知道图表,那会有效吗?

2 个答案:

答案 0 :(得分:3)

事实上,任何仅在start边缘具有负权重的图形都可以使用。负权重的问题在于它们可以使算法“错过”最低权重的顶点,因为它“较晚”地获得较低的权重。所以

| begin | end | weight |
|   s   |  1  |   -1   |
|   s   |  2  |   -2   |
|   1   |  3  |    1   |
|   2   |  3  |    1   |
|   3   |  t  |    1   |

应该对Dijkstra没有实际的麻烦。

可以概括为一个更强有力的陈述:任何在Dijkstra评估之前正确计算顶点权重的图形都将被Dijkstra正确处理,保留Dijkstra的时间表现。

答案 1 :(得分:0)

一个简单的例子,Dijkstra在负重量下工作正常就是:

s -(-1)-> t

如果您从源s在此图上运行Dijkstra算法,它将发现t作为最近邻居并选择那个,然后我们构建了正确的最短路径树。