【发布时间】:2015-12-22 06:25:29
【问题描述】:
我正在阅读 Sanjoy DasGupta 的名为“算法”的书(第 122 页)中存在负边时的最短路径
http://beust.com/algorithms.pdf
Dijkstra 算法之所以有效,部分原因是从 任何节点 v 的起点 s 必须排他地通过节点 比 v 更接近。当边长可以是 消极的。在图 4.12 中,从 S 到 A 的最短路径经过 B,更远的节点。
(S,A) = 3, (S,B)=4, (B,A)= =2
S-----3--------A
| ^
| |
4 -2
| |
| |
B----------->
为了适应这种新的变化,需要进行哪些更改 并发症?为了回答这个问题,让我们从一个特定的高级视图 Dijkstra 算法。一个关键的不变量是 dist 值 它认为总是高估或完全正确。他们 从无穷大开始,他们改变的唯一方法是 沿边更新
:
procedure update((u; v) belongsto E)
dist(v) = min{dist(v), dist(u) + l(u,v)}
这个更新操作只是一个事实的表达,即 到 v 的距离不可能大于到 u 的距离,加上 l(u, v)。它具有以下属性。 1. 在 u 是到 v 的最短路径中的倒数第二个节点且 dist(u) 的特定情况下,它给出了到 v 的正确距离 正确设置。 2.它永远不会使dist(v)太小,从这个意义上说它是安全的。例如,大量无关的更新不会造成伤害。
这个操作非常有用:它是无害的,如果使用 仔细,将正确设置距离。实际上,Dijkstra 算法 可以简单地认为是一系列更新。我们知道这一点 特定序列不适用于负边缘,但是否存在 其他一些序列呢?为了了解这个属性 序列必须具备,我们挑一个节点t,看看最短的 从 s 到它的路径。
我对上述文字的问题是
- 作者所说的第二个属性是什么意思? “它永远不会使 dist(v) 变得太小,从这个意义上说它是安全的。例如,大量无关的更新不会造成伤害。”我无法理解这个
- 作者所说的“我们知道这个特定的序列不适用于负边,但是还有其他序列可以吗?”是什么意思?我不是以英语为母语的人,很难理解这句话吗?
【问题讨论】:
标签: algorithm graph-algorithm dijkstra