Dijkstra算法的准确性如何?

时间:2018-12-15 17:44:07

标签: graph-algorithm dijkstra

Dijkstra算法是否必须始终在两个顶点之间找到最短的部分?

2 个答案:

答案 0 :(得分:1)

是的,确实如此。已经是proven

  

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

     

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

     

否则,假设关于 n-1 个访问节点的假设。在这种情况下,   我们选择边缘 vu ,其中 u dist [u] 最小   节点和边缘 vu 使得 dist [u] = dist [v] +长度[v,u] 。    dist [u] 被认为是从源到 u 的最短距离   因为如果路径更短,并且 w 是第一个未访问的人   然后按照原始假设 dist [w]> dist [u]   这就产生了矛盾。同样,如果路径更短   到 u 而不使用未访问的节点,并且如果最后一个节点是一个节点   该路径为 w ,那么我们本来会有 dist [u] = dist [w] +   长度[w,u] ,这也是一个矛盾。

     

处理 u 后,它仍然   确实,对于每个未访问的节点 w dist [w] 将是最短的   仅使用访问的节点从源到 w 的距离,因为如果存在   是一个较短的路径, u 不会,我们会发现的   以前,如果使用 u 的路径更短,   在处理 u 时对其进行了更新。

答案 1 :(得分:0)

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