Что такое условие релаксации в теории графов? - PullRequest
14 голосов
/ 07 апреля 2010

Я пытаюсь понять основные понятия теории графов и алгоритмы в ней.Кажется, что большинство алгоритмов содержат «условие релаксации». Я не уверен, что это такое.

Может кто-нибудь объяснить мне, пожалуйста.

Примером этого является алгоритм 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 ]

36 голосов
/ 07 апреля 2010

Шаг релаксации:

  • У вас есть два узла, u и v
  • Для каждого узла у вас есть ориентировочное расстояние отисходный узел (для всех узлов, кроме источника, он начинается с положительной бесконечности и только уменьшается до достижения своего минимума).

Шаг релаксации в основном задается следующим образом:

  • Я уже знаю, что могу достичь 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->v короче s~>v, так что лучше использовать его!

(я пишу a~>b для обозначения пути любой длина от a до b, тогда как a->b Я имею в виду прямой единственный край от a до b).

Вы также можете проверить эту лекцию: http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/detail/embed17.htm

9 голосов
/ 07 апреля 2010

Одно из значений английского слова «релаксация» - это что-то уменьшающееся. Поскольку в строках 14, 15 и 16 вы, по сути, проверяете, можете ли вы уменьшить (оптимизировать) текущее вычисленное расстояние, я думаю, именно поэтому оно называется «условием релаксации».

...