Dijkstra 算法将正确运行的负权重图示例
Example of graph with negative weights that Dijkstra's Algorithm will work correctly
这不是另一个重复的问题,试图理解为什么 Dijkstra 不能使用负权重。我知道为什么,但在某些特殊情况下,它会使用负权重,我正在尝试找到它们。
因此,在某些情况下,Dijkstra 可以正确处理具有负权重的图,但我找不到示例。有谁知道图表,那行得通吗?
Dijkstra 在负权重下工作正常的一个简单例子就是:
s -(-1)-> t
如果你 运行 Dijkstra 算法在这个来自源 s
的图上,它会发现 t
作为最近的邻居并选择那个,然后我们构造正确的最短路径树.
事实上,任何仅在起源于 start
的边上具有负权重的图都可以工作。负权重的问题在于它们可能导致算法 "miss" 一个权重最低的顶点,因为它获得了较低的权重 "later"。所以
| begin | end | weight |
| s | 1 | -1 |
| s | 2 | -2 |
| 1 | 3 | 1 |
| 2 | 3 | 1 |
| 3 | t | 1 |
应该不会给 Dijkstra 带来实际麻烦。
可以将其概括为更强的陈述:任何在 Dijkstra 评估之前正确计算顶点权重的图都将由 Dijkstra 正确处理,同时保留 Dijkstra 的时间性能。
这不是另一个重复的问题,试图理解为什么 Dijkstra 不能使用负权重。我知道为什么,但在某些特殊情况下,它会使用负权重,我正在尝试找到它们。
因此,在某些情况下,Dijkstra 可以正确处理具有负权重的图,但我找不到示例。有谁知道图表,那行得通吗?
Dijkstra 在负权重下工作正常的一个简单例子就是:
s -(-1)-> t
如果你 运行 Dijkstra 算法在这个来自源 s
的图上,它会发现 t
作为最近的邻居并选择那个,然后我们构造正确的最短路径树.
事实上,任何仅在起源于 start
的边上具有负权重的图都可以工作。负权重的问题在于它们可能导致算法 "miss" 一个权重最低的顶点,因为它获得了较低的权重 "later"。所以
| begin | end | weight |
| s | 1 | -1 |
| s | 2 | -2 |
| 1 | 3 | 1 |
| 2 | 3 | 1 |
| 3 | t | 1 |
应该不会给 Dijkstra 带来实际麻烦。
可以将其概括为更强的陈述:任何在 Dijkstra 评估之前正确计算顶点权重的图都将由 Dijkstra 正确处理,同时保留 Dijkstra 的时间性能。