对Dijkstra算法的证明感到困惑

问题描述 投票:4回答:1

在Dijkstra算法正确性的证明中,有一个引理说明如下:

让您在最短路径P上成为v的前任:s-> ...-> u-> v从s到v。然后,如果d(u)=δ(s,u)和边(u,v )放松,我们有d(v)=δ(s,v),其中函数δ(x,y)表示从x到y的最小路径权重。

我想知道为什么在这个引理中我们需要条件d(u)=δ(s,u)。如果路径P:s-> ...-> u-> v是从s到v的最短路径,则根据最佳子结构的性质,P的子路径s-> ...-> u也必须是从s到u的最短路径。因此,d(u)必须等于δ(s,u)。

是否存在d(u)≠δ(s,u)但P:s-> ...-> u-> v从s到v最短的情况?如果有,有人可以在这里提供示例。

任何帮助将不胜感激。

algorithm graph shortest-path dijkstra
1个回答
0
投票

是的,我们必须要有这个引理。当我们运行算法时,到u的距离一直在变化,直到我们到u的距离最短为止。例如,如果某个节点a到达u,并且从s到a的距离是最短路径,则在算法的后面。我们发现,通过b从s到u是最短的路径。因此,在这一点上,d(u)变为最佳。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.