技能一覧 › 大学数学 グラフ理論

負の重みを含む最短路(ベルマン・フォード法)

負の重みの辺を含む有向グラフで、ベルマン・フォード法の緩和 を 回くり返して、始点から各頂点への最短距離を求められる。負の閉路があるかどうかも判定できる

前提

中学までに習ったことだけで始められます。

説明

辺に向きと重み(長さ)がついたグラフで、始点から各頂点への重みの合計の最小値(最短距離)を求める方法です。重みに負の数が混じっていても使えます。たとえば、ある区間を通ると費用が払い戻されるような経路の問題に使えます。さらに、始点からたどり着ける負の閉路(一周すると重みの合計が負になる回り道)があるかどうかも判定できます。

なぜそうしてよいのか

まず言葉を決めます。有向グラフとは、頂点の集合 と、向きのついた辺 の集まりのことです。各辺には重み (負でもよい)がついています。辺を向きに沿ってたどったもの(同じ頂点を何度通ってもよい)を道とよび、その重みの合計を道の長さとします。始点 から頂点 への道の長さの最小値が最短距離です。同じ頂点に戻ってくる道で長さが負のものを負の閉路といいます。 から負の閉路にたどり着けると、それを何周もすれば長さをいくらでも小さくできます。そのため、その閉路を経由して行ける頂点には最短距離が存在しません。

アルゴリズムでは、各頂点に「今わかっている最良の長さ」 を持たせます。最初は 、ほかは (まだ届いていない)とします。各辺 について「 まで長さ で来られるなら、この辺を足せば へ で行ける」ので、 と書き換えます。これを緩和といいます。 は増えることがありません。また、有限の はつねに から への実際の道の長さなので、最短距離より小さくなることはありません。すべての辺を 1 回ずつ緩和する作業を 1 巡とよびます。このとき「 巡したあとの は、辺を 本以下使う から への道の長さの最小値以下」が成り立ちます(そのような道がなければ何も主張しません)。 についての帰納法で示します。 のとき、辺 0 本の道は にとどまる長さ 0 の道だけです。そして なので成り立ちます。 のときは、辺 本以下の道のうち最短のものを とします。 の辺が 本以下なら、 巡目までに はその長さ以下になっています。 は増えないので、 巡目のあともそのままです。 の辺がちょうど 本なら、最後の辺を とします。 のその手前までの部分は、辺 本の から への道です。よって 巡目までに、 は有限で、その長さ以下になっています。 巡目にこの辺を緩和すると、( の長さ)となります。

からたどり着ける負の閉路がなければ、 から への最短の道は、同じ頂点を 2 度通らないものに取れます。道の途中の閉路は からたどり着けるので長さが 0 以上であり、取り除いても長さは増えないからです。このような道の辺は 本以下です。したがって 巡すれば、到達できるすべての で が最短距離に一致します。到達できない は のままです。もう 1 巡しても何も変わりません。逆に、どの辺ももう緩和できない状態を考えます。このとき から到達できる頂点の はすべて有限です。 は有限です。そして が有限で辺 が緩和できないなら、 なので も有限です。これを からの道に沿ってくり返せばわかります。ここで、たどり着ける負の閉路 があったとします。閉路上の はすべて有限なので、 を でたし合わせると、両辺の が打ち消し合います。その結果 (閉路の重みの合計)となり、閉路の重みの合計が負であることに反します。よって、 巡のあとにまだ更新できる辺があることと、 から到達できる負の閉路があることは同じです。

手順

  1. 初期化する:始点を とし、それ以外の頂点を とする。

  2. 1 巡する:すべての辺 を決めた順に調べる。 かつ なら、 と更新する。

  3. 手順 2 を 回くり返す。途中のある巡で 1 回も更新が起きなければ、そこで打ち切ってよい(以後も変化しない)。

  4. 負の閉路を判定する:もう 1 巡だけ調べる。更新できる辺が 1 本でもあれば、始点から到達できる負の閉路がある。1 本もなければ、各 がそのまま最短距離である( のままなら到達不能)。

例題

頂点の集合を とする有向グラフがある。辺と重みは 、、、、 である。ベルマン・フォード法により、始点 から頂点 への最短距離を求めよ。

例題の解答

辺は の順に調べる。 なので、最大 3 巡する。

【手順 1】、 とする。

【手順 2:1 巡目】: より 。: より 。: より 。: より 。: なので更新しない。

【手順 3:2 巡目】: なので変化なし。: なので変化なし。: より 。: なので変化なし。: なので変化なし。

【手順 3:3 巡目】各辺で 、、、、 となり、更新は起きない。

【手順 4】3 巡目で更新がなかったので、もう 1 巡調べても更新は起きない。よって始点から到達できる負の閉路はない。最短距離は 、、、 である。 への最短の道は で、長さは となる。

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能の次に学べること