無向グラフの最小カットを見つける


25

ここに私が解決しようとしている過去の試験からの質問があります:

無向グラフの 正の重みを有するW E 0、Iは、最小カットを発見しようとしています。max-flow min-cut定理を使用する以外に、それを行う他の方法は知りません。しかし、グラフは無向であるため、どのように指示すればよいですか?両端にエッジを向けることを考えましたが、どの頂点がソースになり、どの頂点がシンクになりますか?または、最小カットを見つける別の方法はありますか?Gw(e)0


1
元のグラフにソースとターゲットがない場合、複数の選択肢を試す必要があると思います。(任意およびtについて、最小カットは2つを分離しない場合があります。)st
ラファエル

特定のソースノードとシンクノードの最小カットまたはグラフの最小カットを見つけようとしていますか?
ピーター

@Peter:グラフの最小カット。
ジョゼフ

回答:


13

無向グラフの最小カットを見つけるためのアルゴリズムはたくさんあります。Kargerのアルゴリズムは、シンプルでありながら効果的なランダム化アルゴリズムです。

要するに、アルゴリズムはエッジを一様にランダムに選択し、自己ループを削除してそれらを縮小することで機能します。2つのノードが残っている場合、プロセスは停止し、2つのノードはカットを表します。成功の確率を高めるために、ランダム化アルゴリズムが数回実行されます。実行中に、これまでに見つかった最小カットを追跡します。

詳細については、Wikipediaのエントリを参照してください。おそらくより良い紹介については、Michael MitzenmacherとEli Upfalによる確率とコンピューティング:ランダム化アルゴリズムと確率分析の最初の章をご覧ください。


これは近似アルゴリズムですか?
ストリン

@Strin最小カットを高い確率で見つけるランダム化アルゴリズムです。
十宝

1
Karger'sは最小重量のカットを見つけるのに適しているとは思わない。最小カットを見つける確率の導出は、最小カーディナリティカットを見つけることに依存しています。Karger'sは、多くの軽量エッジを備えた最小カットを見つけることはほとんどありません。
スムドゥフェルナンド

8

すべての無向エッジ、2つの有向エッジu v w e i g h t およびv u w e i g h t )を作成します。あなたはvweghtあなたはvweghtvあなたはweght

...しかし、どの頂点がソースになり、どの頂点がシンクになりますか?

関係ありません。


1
なぜこれは重要ではないのですか?
コーディングウォンバット

1

Ford-Fulkersonアルゴリズムが動作するはずです。2つの偽の頂点を作成できます。ソースとシンク。

Edmonds-Karpアルゴリズムもご覧ください。次の2つのバリエーションがあります。

  1. 1つのバージョンが最短パスを選択します
  2. その他は、最大容量のパスを選択します

、任意のパスを選択するFord-Fulkersonとは対照的。

これは良いリソースです。


cs.stackexchangeへようこそ!偽の頂点が既存のグラフにどのように接続されているかをさらに説明できれば、OPに役立つ可能性があります。そして、新しいエッジのエッジの重みはどうなりますか。
Paresh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.