Dijkstra算法中三角不等式和路径松弛有什么区别?

时间:2014-11-18 05:48:21

标签: algorithm data-structures dijkstra

Dijkstra算法中的松弛过程是指更新从源顶点V连接到顶点v的所有顶点的成本。

我认为三角不等式也是一样的。

3 个答案:

答案 0 :(得分:1)

路径放松是我们到达从源到所有顶点的最短路径的过程。 Relaxation of an edge in Dijkstra's algorithm

三角不等式是指顶点之间最短路径的长度。例如,对于不在A到B的最短路径中的任何其他顶点C,A和BD之间的最短距离(A,B)不大于D(A,C)+ D(C,B)。

答案 1 :(得分:0)

当您将松弛过程中涉及的3个节点视为三角形的顶点时,这两个概念非常相似。

然而,关键的区别在于三角形不等式仅 适用于实际可以在2D表面上绘制的三角形。 AB + BC > AC只有这样一个逼真的三角形才能保持。

然而,当在Dijkstra算法中放松边缘时,您可能会遇到AB = 3, BC = 3 and AC = 7的情况,即三个节点A, B and C实际上不会形成正确的三角形(如果绘制)。你甚至可以在Dijkstra算法中使用负距离。

因此,三角不等式不能直接应用于Dijkstra算法的松弛过程。

答案 2 :(得分:0)

我知道这是一个古老的问题但是因为我在这里我会添加一个相关的答案,以防它帮助其他人...

在最短路径算法的松弛步骤中发生的是将移向最短路径。该算法维护从节点 u 到节点 v 的最短路径的估计值,并在其行走期间检测到较短路径时自行校正。 / p>

如果发生松弛意味着检测到违反三角不等式,并且由于实际上不会发生这种情况,那么它必然意味着算法的估计不正确,因此它通过放松更新估计为了使三条路径形成的三角形符合三角形不等式。

算法从无穷远处的估计开始,随着进展,通过放松,这些估计每个会聚在每个节点的正确最短路径上。