- グラフ上でソースからBFSを実行して ( とする)、 からターゲット
s
までの最短経路の長さを見つけます。また、 -から任意のノードまでの距離をマークします。s
t
d
d(s,v)
s
v
-
ソース ( ) からの距離が最大で-の場合にのみ、そのようなサブグラフ
G'=(V',E')
を作成します。は、との両方が にある場合にのみに含まれます。G
v
V'
s
d
d(s,v) <= d
e=(u,v)
E'
u
v
V'
- 新しいグラフ
G*=(V*,E*)
を作成します。ここV'=V*
で、エッジ(u,v)
がANDにE*
ある場合は、エッジがあります。E'
d(s,u) < d(s,v)
- 新しい重み関数を設定し、を使用してBellman Fordを
w*(u,v) = -w(u,v)
実行します。G*
w*
G
from s
toの最も重い最短パスt
は weight-d(t)
であり、BF によって検出されたパスは一致するパスです。
O(VE)
Bellman-Ford がボトルネックであるため、アルゴリズムの時間計算量はです。
正しさの証明
主張 1: からs
への最短パスにt
はサイクルが含まれていません。
証明は、サイクルを削除することで簡単になり、より短いパスが得られます。
主張 2: から へのすべての最短経路s
はt
にあるG'
証明: からs
へのすべての最短経路t
の長さは でd
あり、 からの距離がs
よりも長いノードd
のみを削除したため、最短経路に不要なノードのみを削除します。
主張 3: からs
へのすべての最短経路t
は にありG*
ます。
証明: 最短経路のいくつかのエッジを削除したと仮定(u,v)
し、その経路を としますs->...->x->u->v->y->...->t
。パスv->y->..->t
の長さは(最小であると仮定して)
でd-d(s,u)-1
あることに注意してください。したがって、: - 矛盾から の最小性までの距離を持つパスがあります。d(s,u)
E*
d(s,v) <= d(s,u)
(u,v)
s->...->v->y->...->t
s
d(s,v) + d-d(s,u)-1 <= d(s,u) + d - d(s,u) -1 <= d-1
d
主張 4: にはサイクルがありませんG*
。
証明: : に循環があると仮定しG*
ますv1->v2->vk->v1
。G' の定義により、すべてのノードは から到達可能ですs
。d(s,v1)
一般性を失うことなく、が他のすべてについて最小であると仮定しましょうd(s,vi)
(そうでない場合は、この仮定に一致するようにインデックスを回転させます)。しかし、パス v1->v2->...->vk->v1 とd(s,v1)=d(s,v1)
. (vi,vi+1)
これは、このパスの少なくとも 1 つのエッジを意味します。d(vi) >= d(vi+1)
これは の構成と矛盾してE*
おり、サイクルは G* に存在しません。
主張 5: アルゴリズムは正しい。
Bellman-Ford の正しさから、G*
負のサイクルが含まれていない (サイクルがまったくない) ため、BF はw*
inに従って最小の重みを持つパスを見つけますG*
。w
このパスは、の構成から、に従って最大の重みを持つパスですw*
。
のすべての最短パスG
も (それらのみ) に存在するためG*
、このパスはG
最大の重みを持つ最短パスでもあります。
QED