- グラフ上でソースからBFSを実行して ( とする)、 からターゲット
sまでの最短経路の長さを見つけます。また、 -から任意のノードまでの距離をマークします。stdd(s,v)sv
-
ソース ( ) からの距離が最大で-の場合にのみ、そのようなサブグラフ
G'=(V',E')を作成します。は、との両方が にある場合にのみに含まれます。GvV'sdd(s,v) <= de=(u,v)E'uvV'
- 新しいグラフ
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*
Gfrom stoの最も重い最短パス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->...->tsd(s,v) + d-d(s,u)-1 <= d(s,u) + d - d(s,u) -1 <= d-1d
主張 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