| クラス | グラフアルゴリズム |
|---|---|
| データ構造 | グラフ |
| 最悪の場合の パフォーマンス | |
| 最悪の場合の 空間複雑度 |
コンピュータサイエンスにおいて、ホップクロフト・カープアルゴリズム(より正確にはホップクロフト・カープ・カルザノフアルゴリズムと呼ばれることもある)[1]は、2部グラフを入力として受け取り、最大濃度マッチング(2つの辺が終点を共有しないという特性を持つ、可能な限り多くの辺の集合)を出力するアルゴリズムである。最悪の場合でもで実行され、ここで はグラフの辺の集合、はグラフの頂点の集合であり、 と仮定される。密なグラフの場合、時間制限は となり、疎なランダムグラフの場合は高い確率でで実行される。[2]
このアルゴリズムは、ジョン・ホップクロフトとリチャード・カープ (1973年)によって発見され、アレクサンダー・カルザノフ (1973年)によっても独立に発見されました。[3]ハンガリーアルゴリズムやエドモンズ(1965年)の研究などの以前のマッチング方法と同様に、ホップクロフト–カープアルゴリズムは、増加パスを見つけることによって部分マッチングのサイズを繰り返し増加させます。これらのパスはグラフのエッジのシーケンスであり、マッチング内のエッジと部分マッチング外のエッジが交互に現れ、最初と最後のエッジは部分マッチング内にありません。増加パスを見つけると、増加パスのエッジを切り替えるだけで(部分マッチングに含まれていなかったエッジを部分マッチングに追加し、その逆)、部分マッチングのサイズを増やすことができます。フォード・ファルカーソンアルゴリズムのような、二部マッチングのより単純なアルゴリズムは、反復ごとに1つの増加パスを見つけます。ホップクロフト・カープアルゴリズムは、代わりに、反復ではなく反復のみが必要であることを保証するように、最短の増加パスの最大セットを見つけます。ミカリとヴァジラニのより複雑なアルゴリズムを使用すると、任意のグラフで最大カーディナリティマッチングを見つけるのと同じパフォーマンスを実現できます。[4]
ホップクロフト・カープアルゴリズムは、最大フロー問題に対するディニックアルゴリズムの特殊なケースとして見ることができる。[5]
パスの拡張
部分的なマッチングにおいてエッジの終点ではない頂点は、自由頂点と呼ばれます。アルゴリズムが依存する基本概念は、拡張パスの概念です。拡張パスは、自由頂点で始まり、自由頂点で終わり、パス内で一致しないエッジと一致するエッジが交互に現れるパスです。この定義から、終点を除き、拡張パス内の他のすべての頂点 (存在する場合) は非自由頂点である必要があります。拡張パスは、2 つの頂点 (両方とも自由) と、それらの間の 1 つの一致しないエッジのみで構成できます。
がマッチングであり、 がに対する増加パスである場合、2 つのエッジ セットの対称差は、サイズ のマッチングを形成します。したがって、増加パスを見つけることにより、アルゴリズムはマッチングのサイズを増やすことができます。
逆に、マッチングが最適でなく、対称差をとし、 が最適マッチングであるとします。と は両方ともマッチングなので、 におけるすべての頂点の次数は最大で 2 です。したがって、 は、互いに素なサイクル、 における一致する辺と一致しない辺の数が等しいパス、 の増大パス、 の増大パスのコレクションを形成する必要がありますが、 は最適であるため、後者は不可能です。ここで、サイクル、および一致する頂点と一致しない辺の数が等しいパスは、とのサイズの差には影響しないため、この差はにおけるの増大パスの数に等しくなります。したがって、現在のマッチング よりも大きいマッチングが存在する場合は常に、増大パスも存在するはずです。増大パスが見つからない場合は、この場合はが最適である ため、アルゴリズムは安全に終了する可能性があります。
マッチング問題における増加パスは、最大フロー問題で生じる増加パスと密接に関連しており、この増加パスは、フローの端末間のフロー量を増加させる可能性のあるパスです。 2部マッチング問題を最大フローインスタンスに変換して、マッチング問題の交互パスをフロー問題の増加パスにすることができます。これには、ソースとシンクの2つの頂点を挿入し、ソースから の各頂点へ、および の各頂点からシンクへ単位容量のエッジを挿入し、 から へのエッジが単位容量を持つようにします。[ 6]任意のネットワークで最大フローを見つけるためにホップクロフト–カープアルゴリズムで使用される手法の一般化は、ディニックのアルゴリズムとして知られています。
アルゴリズム
このアルゴリズムは次の疑似コードで表現できます。
- 入力: 二部グラフ
- 出力: マッチング
- 繰り返す
- 頂点が互いに素な最短増加経路の最大集合
- それまで
より詳しくは、の二分割における 2 つの集合を と とし、任意の時点での から へのマッチングを集合 として表すものとします。アルゴリズムは段階的に実行されます。各段階は次の手順で構成されます。
- 幅優先探索は、グラフの頂点を層に分割します。 の空き頂点はこの探索の開始頂点として使用され、分割の最初の層を形成します。 の空き頂点は定義によりどの一致するエッジにも隣接しないため、探索の最初のレベルでは、一致しないエッジのみがあります。 探索のそれ以降のレベルでは、走査されるエッジは一致するエッジと一致しないエッジを交互に走査する必要があります。つまり、 の頂点から後続の頂点を検索する場合、一致しないエッジのみを走査できますが、 の頂点からは一致するエッジのみを走査できます。の 1 つ以上の空き頂点に到達した最初の層で探索は終了します。
- レイヤー内のすべての自由頂点は、セット に集められます。つまり、頂点は、最短増加パスを終了する場合にのみに配置されます。
- アルゴリズムは、長さ の頂点互いに素な増加パスの最大セットを見つけます。(最大とは、これ以上そのようなパスを追加できないことを意味します。これは、より困難なそのようなパスの最大数を見つけることとは異なります。幸い、ここではパスの最大セットを見つければ十分です。) このセットは、から 内の空き頂点への深さ優先探索(DFS)によって計算され、幅優先階層化を使用して探索が行われます。DFS は、前のレイヤーの未使用の頂点につながるエッジのみをたどることができ、DFS ツリー内のパスは、一致するエッジと一致しないエッジの間で交互になる必要があります。 内の頂点の 1 つを含む増加パスが見つかると、DFS は次の開始頂点から続行されます。 DFS 中に遭遇した頂点は、すぐに使用済みとしてマークできます。これは、DFS の現在のポイントでその頂点から へのパスがない場合、その頂点を使用して DFS の他のポイントに到達できないためです。これにより、DFS の実行時間が保証されます。また、 の空き頂点から の空き頂点へという逆方向に作業することも可能です。これは、疑似コードで使用されているバリエーションです。
- このようにして見つかったパスはすべて拡大するために使用されます。
いずれかのフェーズの幅優先探索部分で拡張パスが見つからなくなると、アルゴリズムは終了します。
分析
各フェーズは、1 つの幅優先探索と 1 つの深さ優先探索で構成されます。したがって、1 つのフェーズは で実装できます。したがって、頂点と辺を持つグラフの最初のフェーズには、時間がかかります。
各フェーズでは、最短増加パスの長さが少なくとも 1 増加します。フェーズでは、指定された長さの増加パスの最大セットが検索されるため、残りの増加パスは必ずこれより長くなります。したがって、アルゴリズムの初期フェーズが完了すると、残りの最短増加パスには少なくとも 個のエッジが含まれます。ただし、最終的な最適マッチングと初期フェーズで見つかった部分マッチングMの対称差は、頂点が互いに素な増加パスと交互サイクルのコレクションを形成します。このコレクション内の各パスの長さが少なくとも である場合、コレクションには最大 個のパスが含まれる可能性があり、最適マッチングのサイズは のサイズと最大個のエッジだけ異なる可能性があります。アルゴリズムの各フェーズではマッチングのサイズが少なくとも 1 増加するため、アルゴリズムが終了する前に最大 個の追加フェーズが存在する可能性があります。
アルゴリズムは最大で合計でフェーズを実行するため、最悪の場合、 合計で時間がかかります。
ただし、多くの場合、アルゴリズムにかかる時間は、この最悪のケースの分析が示すよりもさらに短くなる可能性があります。たとえば、疎な二部ランダム グラフの平均的なケースでは、Bast ら (2006) (Motwani 1994 の以前の結果を改善) は、すべての非最適マッチングが対数長の増加パスを持つ確率が高いことを示しました。結果として、これらのグラフでは、Hopcroft–Karp アルゴリズムはフェーズと合計時間がかかります。
他の二部マッチングアルゴリズムとの比較
疎グラフの場合、ホップクロフト-カープアルゴリズムは、引き続き最悪ケースのパフォーマンスが最も優れていることが知られていますが、密グラフ ( ) の場合、Alt ら (1991) による最近のアルゴリズムでは、わずかに優れた時間制限 が達成されています。彼らのアルゴリズムは、プッシュ再ラベル最大フローアルゴリズムを使用し、このアルゴリズムによって作成されたマッチングが最適に近づくと、ホップクロフト-カープ法に切り替えることに基づいています。
数人の研究者が二部マッチングアルゴリズムの実験的比較を行っています。その結果は、ホップクロフト-カープ法は理論ほど実用的ではないことを示しています。ホップクロフト-カープ法は、拡張パスを見つけるためのより単純な幅優先および深さ優先戦略や、プッシュ再ラベル技術よりも優れています。[7]
非二部グラフ
最短増加経路の最大集合を見つけるという同じアイデアは、非二部グラフで最大濃度マッチングを見つける場合にも機能し、同じ理由で、このアイデアに基づくアルゴリズムはフェーズをとります。ただし、非二部グラフの場合、各フェーズ内で増加経路を見つける作業はより困難です。Micali と Vazirani (1980) は、いくつかのより遅い先駆者たちの研究を基に、線形時間でフェーズを実装する方法を示し、二部グラフの Hopcroft-Karp アルゴリズムと同じ時間制限を持つ非二部マッチング アルゴリズムを生み出しました。Micali-Vazirani の手法は複雑で、その著者たちは結果の完全な証明を提供しませんでした。その後、Peterson と Loui (1988) によって「明確な説明」が発表され、他の著者によって代替方法が説明されました。[8] 2012 年に、Vazirani は Micali-Vazirani アルゴリズムの新しい簡略化された証明を提供しました。[9]
擬似コード
/*
G = U ∪ V ∪ {NIL}
ここで、UとVは二部グラフの左側と右側であり、NILは特別なヌル頂点である。
*/
関数BFS()は
U内の各uに対して、 Pair_U[u] = NILの場合に
分布[u] := 0
エンキュー(Q, u)
それ以外
分布[u] := ∞
分布[NIL] := ∞
Empty(Q) = falseの場合
u := デキュー(Q)
Dist[u] < Dist[NIL]の場合、
Adj[u]の各vに対して、 Dist[Pair_V[v]] = ∞の場合、
分布[ペアV[v]] := 分布[u] + 1
エンキュー(Q, Pair_V[v])
Dist[NIL] ≠ ∞を返す
関数DFS(u)は
、 u ≠ NILの場合、
Adj[u]の各vに対して、 Dist[Pair_V[v]] = Dist[u] + 1の場合、 DFS(Pair_V[v]) = trueの場合、
ペア_V[v] := u
ペア_U[u] := v
真を返す
分布[u] := ∞
偽を
返す真を返す
関数ホップクロフト・カープは
U内の各uに対して
ペア_U[u] := NIL
V内の各vに対して
ペア_V[v] := NIL
一致:= 0
BFS() = trueの場合、U
内の各uに対してPair_U[u] = NILの場合、 DFS(u) = trueの場合、
マッチング := マッチング + 1
リターンマッチング

説明
グラフの頂点を U と V に分割し、Pair_U テーブルと Pair_V テーブルで示される部分一致について考えます。これらのテーブルには、U と V の各頂点が一致する 1 つの頂点、または一致しない頂点の場合は NIL が含まれます。重要なアイデアは、グラフの両側にダミー頂点を 2 つ追加することです。uDummy は U のすべての一致しない頂点に接続され、vDummy は V のすべての一致しない頂点に接続されます。ここで、 uDummy から vDummy に幅優先探索(BFS) を実行すると、U の現在一致しない頂点を V の現在一致しない頂点に接続する最短の長さのパスを取得できます。グラフは二部グラフであるため、これらのパスは常に U の頂点と V の頂点の間で交互になり、BFS では V から U に移動するときに常に一致するエッジを選択する必要があることに注意してください。 V の一致しない頂点に到達した場合、vDummy で終了し、BFS のパスの検索は終了します。要約すると、BFS は U の一致しない頂点から開始し、V のすべての隣接頂点に進みます。すべてが一致している場合は、これらすべての頂点が一致する (かつ、以前に訪問されていない) U の頂点に戻り、次にこれらの頂点のすべての隣接頂点に進みます。これを、V で到達した頂点の 1 つが一致しなくなるまで繰り返します。
特に、BFS は U の一致しないノードを距離 0 でマークし、U に戻るたびに距離を増分することに注意してください。これにより、BFS で考慮されるパスが、現在マッチングの一部であるエッジで常に V から U に戻りながら、U の一致しない頂点を V の一致しない頂点に接続するための最小限の長さであることが保証されます。特に、vDummy に対応する特別な NIL 頂点には有限の距離が割り当てられるため、BFS 関数は、何らかのパスが見つかった場合にのみ true を返します。パスが見つからない場合は、増加パスは残っておらず、マッチングは最大です。
BFS が true を返す場合、U から V までの最短パス上の頂点のペアリングを更新できます。これは、深さ優先探索(DFS) を使用して行います。最後の頂点を除き、そのようなパス上の V の各頂点は現在一致していることに注意してください。したがって、DFS を使用して探索し、たどるパスが BFS で計算された距離に対応していることを確認できます。現在マッチングしているパスのすべてのエッジをマッチングから削除し、現在マッチングしていないパスのすべてのエッジをマッチングに追加することで、そのようなパスすべてを更新します。これは拡張パスであるため (パスの最初と最後のエッジはマッチングの一部ではなく、パスは一致するエッジと一致しないエッジの間で交互に繰り返される)、これによりマッチングのエッジの数が増加します。これは、現在のマッチングを、現在のマッチングとパス全体の対称差で置き換えることと同じです。
コードにより、考慮するすべての増加パスが頂点分離であることが保証されることに注意してください。実際、パスの対称差を実行した後、そのパスの頂点はいずれも DFS で再度考慮されることはありません。これは、Dist[Pair_V[v]] が Dist[u] + 1 と等しくならないためです (正確には Dist[u] になります)。
また、DFS が同じ頂点を複数回訪問しないことにも注目してください。これは次の行のおかげです。
分布[u] = ∞ 偽を返す
頂点 u からの最短増加パスが見つからなかった場合は、DFS は Dist[u] を無限大に設定して頂点 u をマークし、これらの頂点が再度訪問されないようにします。
最後にもう 1 つ注意すべき点は、実際には uDummy は必要ないということです。その役割は、BFS を開始するときに、U の一致しない頂点をすべてキューに入れることです。vDummy については、上記の疑似コードでは NIL として示されています。
参照
- 最大濃度マッチング、アルゴリズムによって解決される問題、および非二部グラフへの一般化
- 割り当て問題、重み付きグラフ上のこの問題の一般化、例えばハンガリーアルゴリズムによって解決される
- 最大フローを求めるエドモンズ・カープアルゴリズム、ホップクロフト・カープアルゴリズムの一般化
注記
- ^ ガボウ (2017);アンナマライ (2018)
- ^ Bast et al. (2006).
- ^ ディニッツ(2006年)。
- ^ ピーターソン&ルイ(1988年)。
- ^ タージャン(1983)、102ページ。
- ^ Ahuja、Magnanti、Orlin(1993)、セクション12.3、二部基数マッチング問題、pp.469-470。
- ^ チャンとマコーミック (1990);ダービー・ダウマン (1980);セトゥーバル (1993);セツバル (1996)。
- ^ ガボウ&タージャン(1991年)。
- ^ ヴァジラニ(2012)
参考文献
- Ahuja, Ravindra K. ; Magnanti, Thomas L. ; Orlin, James B. (1993)、ネットワークフロー: 理論、アルゴリズム、アプリケーション、Prentice-Hall。
- Alt, H.; Blum, N.; Mehlhorn, K .; Paul, M. (1991)、「二部グラフにおける最大濃度マッチングの計算」、Information Processing Letters、37 (4): 237–240、doi :10.1016/0020-0190(91)90195-N。
- アンナマライ、チダンバラム (2018)、「二部ハイパーグラフにおける完全マッチングの検出」、コンビナトリカ、38 (6): 1285–1307、arXiv : 1509.07007、doi :10.1007/s00493-017-3567-2、MR 3910876、S2CID 1997334
- Bast, Holger; Mehlhorn, Kurt; Schäfer, Guido; Tamaki, Hisao (2006)、「マッチングアルゴリズムはスパースランダムグラフでは高速」、Theory of Computing Systems、39 (1): 3–14、CiteSeerX 10.1.1.395.6643、doi :10.1007/s00224-005-1254-y、MR 2189556、S2CID 9321036
- Chang, S. Frank; McCormick, S. Thomas (1990)、「二部基数マッチングアルゴリズムの高速実装」、Tech. Rep. 90-MSC-005、ブリティッシュコロンビア大学商学部および経営学部Setubal (1996) より引用。
- ダービー・ダウマン、ケネス(1980)、大規模線形計画問題におけるスパース性の活用 - データ構造と再構築アルゴリズム、博士論文、ブルネル大学Setubal (1996) より引用。
- ディニッツ、イェフィム (2006)、「ディニッツのアルゴリズム: オリジナル版とエヴェン版」、ゴールドライヒ、オデッド、ローゼンバーグ、アーノルド L.、セルマン、アラン L. (編)、理論計算機科学: シモン・エヴェンを偲んでのエッセイ(PDF)、計算機科学講義ノート、第 3895 巻、ベルリンおよびハイデルベルク: シュプリンガー、pp. 218–240、doi :10.1007/11685654_10、ISBN 978-3-540-32880-3。
- エドモンズ、ジャック(1965)、「道、木、花」、カナダ数学ジャーナル、17 : 449–467、doi : 10.4153/CJM-1965-045-4、MR 0177907、S2CID 18909734。
- ガボウ、ハロルド N. (2017)、「最大カーディナリティマッチングへの加重マッチングアプローチ」、Fundamenta Informaticae、154 (1–4): 109–130、arXiv : 1703.03998、doi :10.3233/FI-2017-1555、MR 3690573、S2CID 386509
- ガボウ、ハロルド N. ;タージャン、ロバート E. (1991)、「一般的なグラフマッチング問題に対する高速スケーリングアルゴリズム」、Journal of the ACM、38 (4): 815–853、doi : 10.1145/115234.115366、S2CID 18350108。
- ホップクロフト、ジョン E. ;カープ、リチャード M. (1973)、「二部グラフの最大マッチングのためのn 5/2アルゴリズム」、 SIAM Journal on Computing、2 (4): 225–231、doi :10.1137/02020191971 年の第 12 回スイッチングおよびオートマトン理論シンポジウムで以前に発表されました。
- カルザノフ、AV(1973)、「代表値問題に適用された最大フローを見つけるためのアルゴリズムの正確な推定」、サイバネティクスの問題、5:66-70組合せ数学セミナー(モスクワ、1971年)で以前に発表されました。
- Micali, S. ; Vazirani, VV (1980)、「一般グラフで最大マッチングを見つけるアルゴリズム」、Proc. 21st IEEE Symp. Foundations of Computer Science、pp. 17–27、doi :10.1109/SFCS.1980.12、S2CID 27467816。
- ピーターソン、ポール A. Loui、Michael C. (1988 年 11 月)、「Micali と Vazirani の一般的な最大マッチング アルゴリズム」、Algorithmica、3 (1–4): 511–533、CiteSeerX 10.1.1.228.9625、doi :10.1007/BF01762129、ISSN 1432 -0541、S2CID 16820。
- モトワニ、ラジーブ(1994)、「マッチングおよび関連問題のためのアルゴリズムの平均ケース分析」、Journal of the ACM、41 (6): 1329–1356、doi : 10.1145/195613.195663、S2CID 2968208。
- Setubal、João C. (1993)、「二部マッチングの新しい実験結果」、Proc. Netflow93 , 大学情報学部ピサの、211–216 ページSetubal (1996) より引用。
- Setubal, João C. (1996)、二部マッチングアルゴリズムによる逐次および並列実験結果、Tech. Rep. IC-96-09、Inst. of Computing、CiteSeerX 10.1.1.48.3539。
- Tarjan, Robert Endre (1983)。データ構造とネットワークアルゴリズム。CBMS-NSF 応用数学地域会議シリーズ。工業応用数学協会。doi : 10.1137 /1.9781611970265。ISBN 978-0-89871-187-5。
- Vazirani, Vijay (2012)、「Blossoms の改良された定義と MV マッチング アルゴリズムのより簡単な証明」、CoRR abs/1210.4594、arXiv : 1210.4594、Bibcode :2012arXiv1210.4594V。
