Relaxation

Relaxation (緩和法)。

各Vertexの最短路重みの上界: d[v]

各vertex v∈V に関し、始点 sから、vへの最短路の重みに関する
上界 d[v]を、vertexの属性として管理する。


 d[v] :最短路の推定値(shortest-path estimate)

初期化:Initialize-Single-Source(G,s)

Single-source shortest-path Problem (単一始点最短路問題)での、
最短路の推定値 d[v], 先行点 π(v)の初期化。
 s:始点vertex。

Initialize-Single-Source(G,s)
 for each vertex v ∈ V[G]
  do d[v] ← ∞
   π[v] ← NIL
d[s] ←0    

緩和操作:Relax(u,v,w)

Edge (u,v)に関する緩和操作 Relax(u,v,w)。

これまで発見されている最短路を「vertex u を通ることにより改善できるか」を判定。
改善できるなら、vertex vの 最短路推定値 d[v], 先行点 π[v]を更新する。


緩和操作により、d[v]が減少し、π[v]が更新されていく。

 w:"Edge weight(辺重み)"。Edge(辺)を、実数値の重みに変換する関数(w: E →R)

Relax(u,v,w)
 if d[v] > d[u] + w(u,v)
  then  d[v] ← d[u] + w(u,v)
     π[v] ← u


[操作]

初期化 "Initialize-Single-Source(G,s)"を呼び出し、
Edge (u,v)に対しする、緩和操作 "Relax(u,v,w)"を行っていく。
結果、各vertexに対し、最短路推定値 d[v], 先行vertex π[v]を、更新していくことができる。

各Single-Source Shortest-Path Algorithmでの、緩和操作:

Single-Source Shortest-path Problemの、解法の各Algorithmにごとに違うのは、
各Edgeに対し、
・緩和操作を実行する回数
・Edgeに対する緩和操作の順序。


[負の辺を許す 一般的な単一始点最短路問題]
 ・Bellman-Ford algorithm (ベルマン・フォード アルゴリズム)
 ⇒Edgeごとに何度も緩和操作を行う。


[閉路を含まない有向グラフの最短路問題]:
 ・Dijkstra algorithm (ダイクストラ アルゴリズム)
 ・DAG-shortest path algorithm (有向非巡回グラフ 最短路アルゴリズム)
 ⇒Edgeごとに1回の緩和操作


[Reference]:
Introduction to Algorithms, Second Edition
アルゴリズムの設計と解析手法 (アルゴリズムイントロダクション)