Dijkstra 算法的负边缘

Posted

技术标签:

【中文标题】Dijkstra 算法的负边缘【英文标题】:Dijkstra's Algorithm negative edge 【发布时间】:2021-12-27 23:50:21 【问题描述】:

谁能帮我解答这个问题 我仍然对 Dijkstra 的算法是否适用于负边缘感到困惑 这个问题来自 Grokking Algorithms 书,在其勘误表中据说这个问题有一个可能的答案 它如何有一个负边缘的可能答案?

【问题讨论】:

1 不够大,无法更改任何路线 【参考方案1】:

首先,Dijkstra 的算法不适用于所有负加权图,但在这种特殊情况下,您可以看到负权重在从起点到任何其他点的最短路径上没有任何不同图形。这就是为什么无论有没有负边缘,你都会得到相同的结果。

Dijkstra 不适用于负加权图的想法在这里得到了很好的解释(感谢 Amit)-> Why doesn't Dijkstra's algorithm work for negative weight edges?

【讨论】:

【参考方案2】:

自从我上次接触 Dijkstra 以来已经过去 10 年了,但我认为这个并没有中断,因为每次你越过负数部分时,循环仍然会增加总和(减 1 对几个加 2 )。这样,否定的路径就被丢弃了。但是将负 1 更改为负 5 就会有问题。

我现在没有在我的电脑上将此图表应用到我 10 年前的作业中,但我很确定这是怎么回事。

【讨论】:

以上是关于Dijkstra 算法的负边缘的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Dijkstra 的算法不适用于负权重边缘?

C++ Dijkstra 算法 - 打印边缘名称/类型

Dijkstra 堆实现算法的复杂性

修改 Dijkstra 算法以处理具有多个可能成本的边

Dijkstra 与机场和道路[关闭]

是否有可能让 networkx dijkstra 避免某些边缘?