在证明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最短的情况?如果是这样,有人可以在这里提供示例。
任何帮助将不胜感激。
答案 0 :(得分:0)
是的,我们必须要有这个引理。 当我们运行算法时,到u的距离一直在变化,直到我们到u的距离最短为止。例如,如果某个节点a到达了u,并且从s到a的距离是d(u),但不是最优的,并且在算法的后面。我们发现通过s从s到u是最短的路径。因此,在这一点上,d(u)变为最佳。
希望这会有所帮助。