图论中的松弛条件是什么?

时间:2010-04-07 13:28:52

标签: graph graph-theory conditional-statements

我试图理解图论的主要概念及其中的算法。大多数算法似乎包含“松弛条件”我不确定这是什么。

请有人向我解释一下。

这方面的一个例子是dijkstras算法,这里是伪代码。

 1  function Dijkstra(Graph, source):
 2      for each vertex v in Graph:           // Initializations
 3          dist[v] := infinity               // Unknown distance function from source to v
 4          previous[v] := undefined          // Previous node in optimal path from source
 5      dist[source] := 0                     // Distance from source to source
 6      Q := the set of all nodes in Graph
    // All nodes in the graph are unoptimized - thus are in Q
 7      while Q is not empty:                 // The main loop
 8          u := vertex in Q with smallest dist[]
 9          if dist[u] = infinity:
 10              break                         // all remaining vertices are inaccessible from source
 11          remove u from Q
 12          for each neighbor v of u:         // where v has not yet been removed from Q.
 13              alt := dist[u] + dist_between(u, v)
 14              if alt < dist[v]:             // Relax (u,v,a)
 15                  dist[v] := alt
 16                  previous[v] := u
 17      return dist[]

由于

2 个答案:

答案 0 :(得分:36)

放松步骤:

  • 您有两个节点,uv
  • 对于每个节点,您都有一个来自源节点的暂定距离(对于除源之外的所有节点,它从正无穷大开始,并且只会降低到达到最小值)。

放松步骤基本上是问这个:

  • 我已经知道我可以通过一段距离v到达dist[v]。我可以转而v通过u改进吗? (后者的距离为dist[u] + weight(u, v)

图形:

s ~~~~~~~> v
 \         ^
  \        |
   \~~~~~> u

您知道某条距离为s~>v的路径dist[v],并且您知道某条距离为s~>u的路径dist[u]。如果dist[u] + weight(u, v) < dist[v],则路径s~>u->vs~>v短,所以您最好使用该路径!

(我写a~>b表示从ab任何长度的路径,而a->b我指的是直接单边从ab)。

您可能还想查看此讲座:http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed17.htm

答案 1 :(得分:9)

英语单词“relax”的意思之一就是减少某些东西。因为在第14,15和16行,你基本上检查你是否可以减少(优化)当前计算的距离,我想这就是为什么它被称为“放松条件”。