1. ハンガリー法(Hungarian_Algorithm)

1.1. 概要とアルゴリズムの実装例

This browser does not support PDFs.
Please download the PDF to view it: Download PDF.

1.2. 定式化

完全2部グラフ(complete bipartite graph)と枝の非負のコストが与えられた時に,最小コストを達成する完全マッチング(perfect matching)を求める問題

ここで完全マッチングのコストはとする.

1.3. 定義

  • 関数を満たす時はpotentialと呼ぶ.
  • potential のvalueをと定義する.

この時,任意のpotentialのvalueは任意の完全マッチングのコスト以下になっていることは容易に分かる(照明略).

  • がpotential に対して,を満たす時,枝はtight edgeと呼ばれる

ハンガリー法はtight edgeのみから構成される完全マッチングを求めるアルゴリズムである.その時,完全マッチングのコストはpotentialのvalueと一致するので最小コストを達成する完全マッチングであることが分かる.

  • potential を伴ったグラフを便宜上と表し,のorientationをと表す(の枝に向きをつけたもの).ただし,枝の向きはアルゴリズム中で定める.

  • 上のからへの枝の集合をと表す.(アルゴリズムの任意の時点でがマッチングとなっていることが後に示される)

  • に含まれていない頂点とする.つまり,.ただしtailは枝の終点を表す.についても同様に定める.
  • 上でからtight edgeのみを通って到達可能な頂点集合とする(幅優先探索などで求められる)

1.4. ハンガリー法(Hungarian_Algorithm)

ハンガリー法はtight edgeのみから構成される完全マッチングを求めるアルゴリズム

(操作1)によって,マッチングは1増加する

(操作2)の時が空集合でないことを示す.

よりは空でないので,頂点を1つ固定しとする.ここで,であるのでである.次にの存在を示す.であるのでも空集合ではない.よって,頂点を1つ固定してとおくことができる.ここでだとすると,の定義よりからtight edgeのみを通ってに到達するパスがあるが,もしそうならばであるので(操作1)が行われるので矛盾.ゆえに.

以後,アルゴリズムで常に成立する性質である保存条件とその証明,及び計算量について述べる.

1.5. 保存条件

アルゴリズムで(操作1)と(操作2)を行なっても以下の性質は保たれる.

Maintain

(保存条件1)はpotential

(保存条件2)上のからへの枝の集合はMathicngとなる

(保存条件3)の任意の枝はtight-edgeである

1.6. 保存条件の性質が保たれることを証明

1.6.1. 操作1

(保存条件1,3)がこの操作によって保たれることは自明.

(保存条件2)がこの操作によって保たれることを示すには以下を示せば十分.

パスに含まれる任意の有効枝,, とする.パスが通る有効枝の向きを全て逆にした時に,に流入する上の有効枝はのみでから流出する上の有効枝はのみである.

に流入する上の有効枝はのみということだけ示し,残りは読者に委ねる.がパスの始点であればの元であるので,逆向きにする前には上の有効枝でに流入するものは存在しないので,逆向きにした後に,に流入する上の有効枝はのみ.がパスの始点でないとするとは経由点となるのでパスに含まれる有効枝でとなるものが存在する.ここで,(保存条件2)が逆向きにする前に成立していることから,逆向きにする前にはに流入する上の枝はのみである.ゆえに逆向きにした後ではに流入する上の有効枝はのみになる.

1.6.2. 操作2

がpositiveであることを示す.ポテンシャルの定義よりはnon-negativeである.もしが0であるなら,,がtight edgeであるものが存在する.よって,であるのでとなるがこれはの定義に矛盾.

(保存条件1)がこの操作によって保たれることを示す.

つまり,任意の有効枝に対して端点のpotentialの和が枝のcost以下になることを示す.

からへの任意の有効枝を考えと,増加した場合()を考えれば良い.に含まれるなら減少するのでpotentialの和は変わらないので,の場合のみ考えればよい.この時,の定義より,であるのでは操作後もpotentialである.からへの有効枝についても同様の議論が行えるので,は操作後もpotentialである.

操作2は枝の向きを変えないので,集合は不変である.ゆえに(保存条件2)が成立

(保存条件3)が操作後にも保たれることを示す.

操作2では不変であるので,「の任意の枝は端点が両方に含まれているか,両方ともに含まれないかいずれかである」ことを示せば十分である.実際,が操作後のに含まれているなら,操作前にもに含まれており,がどちらもに含まれているなら,操作後の端点のpotentialの和はとなり操作前と変わらない.がどちらもに含まれていない場合も端点のpotentialの和は操作前と操作後で変わらないので良い.「の任意の枝は端点が両方に含まれているか,両方ともに含まれないかいずれかである」ことは以下のように示すことができる.に含まれているとする.は(保存条件3)よりtight-edgeであるのでに含まれているなら,必然的にに含まれる.よって,として矛盾を導けばよい.であるのでの点からのtight-edgeのみを通ってに到達するパスが存在する.の直前に通る点をとする.この時,はtight-edgeになるが,これはがMatchingであることに矛盾.

1.7. 計算量

である.である.

  • (操作1)によってmathcingの数が1増えるので(操作1)は回行われる.

  • (操作2)を行うことで,の元が少なくとも1つ増えるので,(操作1)が再び行われる間に(操作2)は最大で回行われる.

  • (操作2)を一回行う計算量はであるので全体の計算量はである.

1.8. 実装

pythonのモジュールscipyを実装する関数

Last modified by akirat1993 2019-09-11 21:45:11
Created by akirat1993 2019-09-05 11:56:53

results matching ""

    No results matching ""