逆削除法

逆削除法（ぎゃくさくじょほう、）とは、グラフ理論において辺重み付き連結グラフの最小全域木を求めるアルゴリズムの一種である。1956年、クラスカルによって初めて提案されているが、逆削除法と共に同じ論文内で提案されたクラスカル法とは異なったアルゴリズムである。与えられたグラフが非連結の場合は、逆削除法によって各連結成分ごとに最小全域木を求めることができる。このように、非連結なグラフに対して逆削除法によって求まる連結成分ごとの最小全域木の集合は最小全域森（）と呼ばれる。

また、逆削除法は貪欲法の一種であり、アルゴリズムの各段階で最良の選択を踏む。同じく貪欲法に分類されるクラスカル法とは逆の選択を続けていく。クラスカル法では辺が空のグラフから逐次辺の追加を行うのに対し、逆削除法では元のグラフから逐次辺の削除を行うアルゴリズムである。逆削除法の手順は以下の通りである:
 辺集合  を持つグラフ  を与える。
  に含まれる辺を重みが大きいものから探索する。
 各反復においてその辺を削除することでグラフの連結性が保たれるかを判定する。
 もしその辺を削除したときにグラフの連結性が保たれるならば、その辺を削除して次の辺の探索を行う。

 手順 
 function ReverseDelete(edges[] E) is
     sort E をin decreasing order （降順に並べ替える）
     Define an index i ← 0

     while i < size(E) do
         Define edge ← E[i]
 	    delete E[i]  （一度辺を削除する）
 	    if graph is not connected then （もしグラフが非連結となるならば）
                 E[i] ← edge （再び、辺のリストに加える）
                 i ← i + 1

     return edges[] E

上記のグラフでの  は辺集合であり、各辺には重みが与えられ、少なくとも頂点 、 が含まれるような頂点の集合を含む。

 例 
以下の例では緑の辺がその反復において評価を行っている辺であり、赤の辺は削除されたことを表す。
200pxこれは与えられた元のグラフである。辺上に書かれている数値は辺の重みを表している。200px逆削除法ではまずグラフの中で重みが15で最も大きい辺の DE を選択する。仮に辺 DE を削除したとしてもグラフは連結性を保たれるため、辺 DE を削除する。200px 残った辺の中で最も重みの大きな辺の FG を選択する。仮に辺 FG をグラフから削除したとしてもグラフの連結性は保たれるため、グラフから辺 FG を削除する。200px残った辺の中で最も重みの大きな辺の BD を選択する。仮に辺 BD をグラフから削除したとしてもグラフの連結性は保たれるため、グラフから辺 BD を削除する。200px残った辺の中で最も重みの大きな辺の EG を選択する。仮に辺 EG をグラフから削除するとグラフの連結性は失われるため、辺 EG を残して、次の重みの大きい辺 BC を選択する。辺 BC はグラフの連結性の判定によりグラフから削除される。200px残った辺の中で最も重みの大きな辺の EF を選択する。仮に辺 EF をグラフから削除したとしてもグラフの連結性は保たれるため、グラフから辺 EF を削除する。200pxここで、未探索の辺がなくなったため、アルゴリズムは終了し、残ったグラフが元のグラフの最小全域木である。

 動作時間 
逆削除法は頂点数  と辺数 に対して（ランダウの記号を用いて）時間計算量  で実行することができる。この計算量は以下のようにして達成される:
辺を重みの降順に並べ替える場合には時間計算量  で実行することができる。ここで、辺の総数は最大でも頂点数  に対して、 となることから、並べ替えは  の時間計算量となる。
反復の回数は  回行われる。
一回の反復における辺の削除、グラフの連結性の判定、辺の再挿入については各動作時間計算量  で実行することができる。

 妥当性の証明 
先にクラスカル法#正しさの証明に目を通すことで理解が容易になる。

妥当性の証明では二つの段階によって示される。始めにアルゴリズムの最後に求まる部分グラフが全域木であることを示し、続いてその全域木が最小全域木であることを示す。

 全域木 
各反復で生成された残りの部分グラフ  は、（#手順節）7行目においてグラフの連結性の確認を行っているため、非連結にはならない。また、得られた部分グラフには閉路を含むことがない。なぜならば、仮に閉路が存在するとすると、閉路内に含まれる辺を探索する過程で最大重みの辺が削除されるからである。このことから、 は元のグラフの最小全域木でなければならない。

 重みの最小性 
次の命題  を帰納法によって示す：「もし  をある while（反復）の終了時点で残っている辺を辺集合にもつグラフであるとすると、 の部分グラフであるような最小全域木が存在する」
 明らかに while（反復）の開始前では命題  が成り立つ。なぜならば、重み付き連結グラフでは必ず最小全域木が存在し、また、 の辺集合は元のグラフ全ての辺をもつ集合であるため、この最小全域木は必ず  の部分グラフとなるからである。
 続いて、途中の反復におけるグラフ  において命題  が成り立つと仮定し、 に含まれる最小全域木を  とする。逆削除法のある反復において辺  を削除した後でも、（ とは異なる可能性のある）ある最小全域木  が  の部分グラフとして存在することを示す必要がある。
 もし今削除しようとする辺  が  に含まれていないとすると、 とすれば、 は  の部分グラフであることから、命題  は成り立つ。
 そうでないとき、すなわち  が  に含まれている場合を考える。始めに、各反復では  はグラフが非連結とならないような辺のみを削除するため、 の削除ではグラフの切断を引き起こされない。一方、 は木であることから、 を削除すると  は非連結となる。つまり、 の削除によって  を部分グラフ  と  に分割される。全体のグラフ（すなわち ）は  の削除後も連結なので、 と  を結ぶ他の経路が存在しなければならない。このことから、（削除前の） には閉路  が存在する。この閉路の中には  に含まれないが  に含まれるような別の辺  が存在する必要がある（もし閉路のすべての辺が  に属しているとすると、木の定義に違反する）。ここで、 が  の部分グラフである最小全域木であることを述べる。
 始めに  が全域木であることを示す。木から辺を一本削除し、閉路を生じさせないような別の辺を追加すれば、同じ頂点集合を持つ別の木が得られる。 は全域木であったため、 もまた全域木である。ここで注意しなければならないのは、辺  が削除されているため、辺  を追加したとしても閉路は生じない。
 続いて、 が最小全域木であることを示す。辺  および  の重みについて3つの場合を考える（重み関数を  とする）
 : このとき、 の重みは  よりも小さくなり、 が最小全域木であるという仮定に反する。
 : このとき、重みの降順で辺を処理する際に、 は  より先に評価されるべきである。さらに、閉路  が存在するため、 を削除しても  が非連結にはならない。したがって、アルゴリズムは既に  を削除しているはずであり、 に存在しないことになるが、これは矛盾する（手順4で  の存在を示している）。
 よって、 でなければならない。このとき  も最小全域木であり、命題  は再び成り立つ。
 以上より、while （反復）が終了した時点（すべての辺が探索された時点）で命題  は成り立ち、 は全域木の辺集合であり、加えて、 は最小全域木の辺集合であることが示された。したがって、 が最小全域木の辺集合であることが導かれる。

 脚注 

 参考文献 
.
.
.

 関連項目 
 クラスカル法
 プリム法
 ブルーフカ法
 ダイクストラ法

Category:全域木
Category:グラフアルゴリズム
Category:最適化アルゴリズムとメソッド
Category:数学に関する記事