algorithm - 负权重的 Dijkstra 算法

标签 algorithm dijkstra

现在我知道如果图表包含负权重边,Dijkstra 将不起作用。但有一个异常(exception)。 (只有离开源的边可以具有负权重,而所有其他边必须为正。)

我希望能够证明这一点。我不知道如何开始。我制作了一些图表,在所有这些图表中,Dijkstra 最终都完美地工作,但我不明白如何证明这一点?

所以我真正想要的是有人证明 Dijkstra 在这种情况下会起作用或不会(只有来自源的传出边是负的。)

此外,图表不能包含任何涉及源的循环。

最佳答案

首先注意,如果没有涉及源的循环,我们可以对传入源的任何边修剪图,并且不会影响结果,在 Dijkstra 算法中不会到达通向源的顶点无论如何(否则,就会存在涉及源的循环)。

从现在开始,我们假设源没有传入边缘。

请注意,松弛步骤所需的声明(三角不等式):d(u,v) <= d(u,x) + w(x,v)必须(空)保存每个w(x,v) < 0 ,唯一u其中存在一条来自 u 的路径至x (这是来源)是 u=x=source ,路径为空路径。

这将我们引向d(u,x) + w(x,v) = 0 + w(x,v) = w(u,v) = d(u,v) (其中 u 是源),并且不等式仍然成立。

关于algorithm - 负权重的 Dijkstra 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026724/

相关文章:

arrays - 查找 2 个巨大数组之间的变化

ruby - 里程表上出现多少次零

c++ - 我的 dijkstra 算法有什么问题

c# - 得分最高的二维数组(板)最短路径

Networkx - 获取 Dijkstra 路径中的边缘属性

algorithm - Dijkstra 和 Prim 算法

algorithm - 高斯曲线拟合算法

java - 试图找到整数数组元素的所有排列的集合

python - 如何在 url 列表中快速找到不返回 302(重定向)状态代码的最后一个可用 url

algorithm - 解决集体版本的车辆路径问题