【发布时间】:2018-12-15 17:44:06
【问题描述】:
Dijkstra 算法是否有必要总是找到两个验证之间的最短部分?
【问题讨论】:
-
我认为你的意思是最短的“路径”而不是“部分”
-
是的。谢谢大佬
Dijkstra 算法是否有必要总是找到两个验证之间的最短部分?
【问题讨论】:
是的,确实如此。一直是proven:
Dijkstra 算法的证明是通过对 访问的节点数。
不变假设:对于每个访问过的节点v,考虑dist[v] 从源到v的最短距离;对于每个未访问的节点 u, dist[u] 被假定为通过visited 的最短距离 仅节点,从源到 u。仅在以下情况下才考虑此假设 路径存在,否则距离设置为无穷大。 (注:我们做 不要假设 dist[u] 是未访问的实际最短距离 节点)
基本情况是只有一个访问节点,即 初始节点源,在这种情况下,假设是微不足道的。否则,假设 n-1 个访问过的节点。在这种情况下, 我们选择一条边 vu,其中 u 的 dist[u] 是所有未访问者中最小的 节点和边 vu 满足 dist[u] = dist[v] + length[v,u]。 dist[u] 被认为是从源到 u 的最短距离 因为如果有更短的路径,并且如果 w 是第一个未访问的 该路径上的节点然后由原始假设 dist[w] > dist[u] 这就产生了矛盾。同样,如果有更短的路径 到 u 而不使用未访问的节点,并且如果最后一个节点在 那条路径是 w,那么我们会有 dist[u] = dist[w] + length[w,u],也是矛盾的。
处理完u后仍会 确实,对于每个未访问的节点 w,dist[w] 将是最短的 仅使用访问节点从源到 w 的距离,因为如果有 是一条不经过u的较短路径,我们会找到它 以前,如果使用 u 有更短的路径,我们会有 在处理 u 时更新它。
【讨论】:
如果图表中的所有边权重均为正,则 Dijkstra 算法会找到最短路径。但是,如果图表具有负权重,则它不起作用。为了在具有负边权重的图中找到最短路径,使用了 Bellman-Ford 等算法。
【讨论】: