【问题标题】:How accurate is Dijkstra Algorithm?Dijkstra 算法的准确性如何?
【发布时间】:2018-12-15 17:44:06
【问题描述】:

Dijkstra 算法是否有必要总是找到两个验证之间的最短部分?

【问题讨论】:

  • 我认为你的意思是最短的“路径”而不是“部分”
  • 是的。谢谢大佬

标签: graph-algorithm dijkstra


【解决方案1】:

是的,确实如此。一直是proven:

Dijkstra 算法的证明是通过对 访问的节点数。

不变假设:对于每个访问过的节点v,考虑dist[v] 从源到v的最短距离;对于每个未访问的节点 udist[u] 被假定为通过visited 的最短距离 仅节点,从源到 u。仅在以下情况下才考虑此假设 路径存在,否则距离设置为无穷大。 (注:我们做 不要假设 dist[u] 是未访问的实际最短距离 节点)
基本情况是只有一个访问节点,即 初始节点源,在这种情况下,假设是微不足道的。

否则,假设 n-1 个访问过的节点。在这种情况下, 我们选择一条边 vu,其中 udist[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后仍会 确实,对于每个未访问的节点 wdist[w] 将是最短的 仅使用访问节点从源到 w 的距离,因为如果有 是一条不经过u的较短路径,我们会找到它 以前,如果使用 u 有更短的路径,我们会有 在处理 u 时更新它。

【讨论】:

    【解决方案2】:

    如果图表中的所有边权重均为正,则 Dijkstra 算法会找到最短路径。但是,如果图表具有负权重,则它不起作用。为了在具有负边权重的图中找到最短路径,使用了 Bellman-Ford 等算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2012-12-08
      • 2011-09-13
      • 2019-02-14
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多