ハンガリー語アルゴリズムの一般的な無向グラフへの一般化?


14

ハンガリーのアルゴリズムは、多項式時間で最大重みの二部マッチング問題を解決する組み合わせ最適化アルゴリズムであり、重要な主双対法の今後の開発が予想されます。このアルゴリズムは、1955年にHarold Kuhnによって開発および公開されました。このアルゴリズムは、2人のハンガリーの数学者であるDénesK andnigとJenőEgerváryの初期の作品に基づいているため、「Hungarian algorithm」と名付けられました。Munkresは1957年にアルゴリズムをレビューし、実際にポリタイムであることを観察しました。それ以来、このアルゴリズムはKuhn-Munkresアルゴリズムとしても知られています。

ハンガリー語には基本双対法の基本概念が含まれていますが、線形プログラミング(LP)機構を使用せずに、最大重量の2部マッチング問題を直接解決します。したがって、次の質問に答えて、ユッカ・スオメラはコメントしました

もちろん、汎用LPソルバーを使用して任意のLPを解くことができますが、通常、特殊なアルゴリズムははるかに優れたパフォーマンスを発揮します。[...]正確な有理数と浮動小数点数の使用などの問題を回避することもできます。すべては整数で簡単に行えます。

言い換えれば、LPソルバーから有理数/浮動小数点の解を丸めて、特定の2部グラフの最大重み完全一致を取得する方法を心配する必要はありません。

私の質問は次のとおりです。

元のハンガリーのアルゴリズムの精神と同様に、LP機械を使用せずに一般的な無向グラフで機能するハンガリーのアルゴリズムの一般化はありますか?

オリジナルの複雑な紙ではなく、現代的で読みやすい説明を好むでしょう。しかし、どんなポインターでも大歓迎です!

事前に感謝し、メリークリスマス!!!


更新:この質問には、以下のArmanが適切に回答しています。Edmondsのブロッサムアルゴリズム(重み付きの場合)を研究するためのもう1つの優れた情報源は、KorteとVygenによるCombinatorial Optimizationの第11章 です。Googleブックには、アルゴリズムを理解するために必要なほぼすべての部分が実際に示されています。


2
エドモンズのマッチングアルゴリズムはどうですか?en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm
アーマン

1
@アーマン-それも私が考えていたことです。リンクのおかげで、ウィキペディアにはエドモンドの花のアルゴリズムの驚くほど詳細な説明があります。
アブラハムフラックスマン

2
ところで、エドモンズのマッチングアルゴリズムは、Primal-Dual法にも基づいています。
アーマン

1
ありがとう、アーマン。ウィキペディアのリンクは、エドモンズのアルゴリズムの加重バージョンについての本「Lovász、László; Plummer、Michael(1986)。Matching Theory」も指し示しています。私は本当にその本をチェックアウトする必要があります。コメントありがとうございました!アルゴリズムがハンガリーのアルゴリズムを一般化する方法を高レベルで説明できれば、間違いなく答えにすることができます。
大ル

1
私はそれがそうであるようにかなり良い答えだと思う:)。アルマンは、次のようなことを追加する必要があります
スレシュヴェンカト

回答:


16

エドモンズのマッチングアルゴリズム(ブロッサムアルゴリズムとも呼ばれます)は、一般的なグラフの最大マッチングを解決します。実際には、交互経路法の一般化です。:(私は確信してメソッドの名前ではないですが、それはケーニッヒ・ホール方法であることshoud)それは基本的に増強パスが(ウィキペディアページを参照してください見つけhttp://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithmを拡張するために)現在のマッチングが行われ、追加パスがなくなると停止します。一般的なグラフでは、奇数サイクルで唯一の問題が発生します。エドモンズのマッチングアルゴリズムでは、奇数サイクルが縮小(ブロッサム)され、解決のために費やされます。

Blossom AlgorithmとPrimal Dualメソッドの間にも対応があります。奇数サイクルは、端数の端数を発生させます。したがって、奇数サイクルごとにいわゆる花の不等式を追加します。

最小重み付き完全一致および最大重み一致の問題もこのアプローチで処理できます。

アルゴリズムの詳細については、http//en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm http://www.cs.berkeley.edu/~karp/greatalgo/lecture05.pdfを参照して ください

数学的定式化と対応する原初双対法については、http: //webdocs.cs.ualberta.ca/~mreza/courses/CombOpt09/lecture4.pdfを参照して ください


9

2年前、(重みなし)ブロッサムアルゴリズムを調べたときに、タージャンとズウィックの2つの素晴らしいノートセットが見つかりました。彼らは重みのないケースを非常に単純に見せ、再帰を使用してMathematicaで実装することができました。それは非常にうまく機能します。

私が便利だと思ったメモは

http://www.cs.tau.ac.il/~zwick/grad-algo-06/match.pdf および http://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handouts/ tarjan-blossom.pdf

彼らはそれをすべて再帰的に考え、それから、前述のようにプログラムを再帰的に考えることができる非常に単純な用語に要約します。

私はそれがすべて私が今実装しようとしている重みのあるケースで動作するはずだと思います。


そして、私はフリーソフトで誰でも見ることができデモを持っている:最初のショーはうまく開花.... < demonstrations.wolfram.com/... > < demonstrations.wolfram.com/TheHungarianMaximumMatchingAlgorithm > < demonstrations.wolfram.com/ PlacingDominoesOnACheckerboard >
スタンワゴン

そして、Korte / Vygenで与えられているように、重みのない花をプログラムしました。私は彼のコードにいくつかの高速化が可能だと思います(たとえば、何もないのではなく、最大限の一致から始めます)が、良い点は、彼の手続きコードが、作業コードに簡単に変換できる形式で提供されることです。次:重みのある花、これははるかに難しい。
スタンワゴン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.