在计算图形的最短路径时,我应该如何理解“放松”操作的名称?

时间:2016-06-11 12:27:31

标签: algorithm graph-algorithm dijkstra

我的问题就像标题一样。在计算图的最短路径时,经常使用名为放松的操作。很容易理解为什么要使用这个操作,但这个名字的含义对我来说是一个谜。 “放松”的含义是什么?

这是Dijkstra用伪代码写的样本:

DIJKSTRA(G,w,s)
  1 INITIALIZE-SINGLE-SOURCE(G,s)
  2 S ← Φ
  3 Q ← V[G]
  4 while Q≠Φ
  5     do u EXTRACT-MIN(Q)
  6     S ← S∪{u}
  7     for each vertex v∈Adj[u]
  8         do RELAX(u,v,w)

放松就在这里:

RELAX(u,v,w)  
    1  if d[v] > d[u] + w 
          d[v] ← d[u] + w

1 个答案:

答案 0 :(得分:2)

考虑Dijkstra算法的一种方法是,它正在解决与最短路径问题相对应的线性程序。

maximize sum for v in V of d[v]
subject to
d[s] = 0
for each arc u->v, d[v] ≤ d[u] + w[u->v]  (*)

给定LP变量的赋值,我们可以定义每个约束的 slack 。松弛的意思是,当它为零时,约束的左侧等于右侧,当它为负时,则违反约束。在这里,(*)的松弛是d[u] + w[u->v] - d[v]

一旦我们定义了松弛,RELAX就是缓解(*)上的紧张(即负面松弛)的过程。