Dijkstra的算法概念

时间:2014-08-21 07:30:53

标签: algorithm graph shortest-path

我只是在学习Dijkstra算法而且在这个

中有点混乱
If min(A,B) = x;
   min(A,C) = y;
   min(B,C) = must be x-y;

请说明理由或我错了吗?

2 个答案:

答案 0 :(得分:2)

好的,这就是你的意思:

我将在所有这些中引用有向的非负权重图。

最短路径问题:

对于V中的有向图G和节点r以及实际成本向量(E中的c_e:e)(我希望我们在这里使用LaTeX)

我们希望找到:

对于V中的每个v,从最小成本的r到v的dipath(假设它存在)

以下是您想要的要点:

假设我们知道对于V中的每个v,存在从r到v的成本y_v的路径,并且我们发现E中的边缘vw满足y_v + c_vw< y_w

由于将vw附加到dipath到v(获得w的路径)给出了一条长度为y_v + c_vw的路径

成本最低的dipath满足:

对于E

中的所有大众,

y_v + c_vw> = y_w

我们称这样的y向量为“可行的潜力”

命题:y_v是最小的

设y是一个可行的势,让P为从r到v的dipath,然后它跟随c(P)> = y_v

证明:

c(P)= sum c_ei(路径成本中的第i个边缘)

回想一下可行的潜力是否合理y_v + c_vw> = y_w

所以c_vw> = y_w - y_v 这就是你拥有的

因此

c(P)> = sum(y_vi-y_v {i-1})(第i项的成本取前一项的成本)

如果你把它写成总和(-y_v {i-1} + y_vi)然后展开总和:(显然y_v0 = 0)

-y_v0 + y_v1 -y_v1 + y_v2 - .... -y_v {k-2} + y_v {k-1} -y_v {k-1} + y_vk

你看到所有条款都取消了,给出了:

c(P)> = y_vk - y_v0 = y_vk

因此,我们已经显示c(P)> = y_vk

答案 1 :(得分:1)

这是错误的,想想任何等边三角形,两边的差异是0而第三尺寸的长度不是。