Algorithmische Graphentheorie Vorlesung 12: Flüsse und Zuordnungen Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca [email protected] 26. Mai 2017 F L ÜSSE F LUSSNETZWERK Definition Ein Flussnetzwerk N ist ein Tupel N = (G, c, s, t) bestehend aus: 1 G = (V, A), einem gerichteten Graphen, 2 c : A → R+ einer Kapazitätsfunktion auf den gerichteten Kanten mit nichtnegativen Werten und 3 s, t ∈ V, zwei ausgezeichneten Knoten, der Quelle s und der Senke t mit s 6= t. F LUSS Definition Es sei N = (G, c, s, t) ein Flussnetzwerk. Für einen Knoten v ∈ V sei Ain (v) := {(u, v) ∈ A} und Aout (v) := {(v, u) ∈ A}. Eine Abbildung f : A → R heißt Fluss auf N, wenn die folgenden Bedingungen erfüllt sind: 1 2 0 ≤ f (e) ≤ c(e) für alle e ∈ A, d.h. die Kapazität wird für keine Kante überschritten und P P e∈Ain (v) f (e) = e∈Aout (v) f (e) für alle v ∈ V {s, t}, d.h. aus jedem Knoten fließt genausoviel heraus wie hinein, mit Ausnahme der Quelle s und der Senke t. W ERT EINES F LUSSES Lemma Für einen Fluss f eines Flussnetzwerks N = (G, c, s, t) gilt X X X X Φ(f ) := f (e) − f (e) = f (e) − f (e). e∈Aout (s) e∈Ain (s) e∈Ain (t) e∈Aout (t) Definition Der Wert Φ(f ) aus dem Lemma heißt Wert des Flusses f auf N. Ein Fluss f mit Φ(f ) ≥ Φ(f 0 ) für alle Flüsse f 0 auf N heißt Maximalfluss auf N. Das Maximalflussproblem besteht darin, zu einem gegebenen Flussnetzwerk einen Maximalfluss zu bestimmen. M AXIMALFLUSSPROBLEM M AXIMALFLUSSPROBLEM Z UNEHMENDER W EG Definition Gegeben sei ein Flussnetzwerk N = (G, c, s, t) mit einem Fluss f . Eine Folge (v0 , . . . , vk ) heißt zunehmender Weg (oder Erweiterungsweg) bzgl. f gdw. für jedes i = 1, . . . keine der folgenden Bedingungen erfüllt ist: 1 (vi−1 , vi ) ∈ A und f (vi−1 , vi ) < c(vi−1 , vi ) Vorwärtskante 2 (vi , vi−1 ) ∈ A und f (vi , vi−1 ) > 0 Rückwärtskante. Z UNEHMENDER W EG Offensichtlich können wir den Fluss erhöhen, wenn wir einen zunehmenden Weg gefunden haben. Die Existenz eines zunehmenden Weges ist also hinreichend für eine Flusserhöhung. Der folgende Satz zeigt, dass dieses Kriterium auch notwendig ist. Satz Ein Fluss f in einem Flussnetzwerk N ist genau dann ein Maximalfluss, wenn kein zunehmender Weg von s nach t existiert. B EWEIS =⇒: Wenn ein zunehmender Weg W von s nach t existiert, dann kann Φ(f ) um das Minimum der Werte c(e) − f (e) für Vorwärtskanten von W bzw. f (e) für Rückwärtskanten von W erhöht werden. ⇐=: Es gebe keinen zunehmenden Weg von s nach t. Es sei S die Menge der Knoten, die von s aus mit einem zunehmenden Weg erreichbar sind, und sei T := V \ S. Für jede Kante (v, w), v ∈ S, w ∈ T gilt: f (v, w) = c(v, w). Für jede Kante (w, v), w ∈ T, v ∈ S gilt: f (w, v) = 0. Anschaulich: Die Kanten zwischen S und T bilden einen Engpass, der eine Flusserhöhung verhindert. B ERECHNUNG EINES M AXIMALFLUSSES B EISPIEL Wir betrachten das folgende Flussnetzwerk. Die Kapazität ist für alle Kanten 1. Der Fluss ist zunächst auf allen Kanten 0. B EISPIEL M ARKIERUNGSALGORITHMUS M ARKIERUNGSALGORITHMUS Gegeben sei ein Flussnetzwerk N = (G, c, s, t) und ein initialer Fluss f (e) ≡ 0. M ARKIERUNGSALGORITHMUS K ORREKTHEITSSATZ Satz Sei N = (G, c, s, t) ein Flussnetzwerk mit rationaler Kapazitätsfunktion c. Dann berechnet der obige Algorithmus einen maximalen Fluss f auf N. B EMERKUNG S ATZ Ersetzt man in Algorithmus den Schritt 2 durch 2a. Wähle den Knoten u ∈ R, der zuerst in R eingefügt wurde. Setze R := R \ {u}. dann berechnet der Markierungsalgorithmus für beliebige Kapazitätsfunktionen in O(|V||E|2 ) einen Maximalfluss. B ESTIMMUNG VON E RWEITERUNGSWEGEN Es sei G ein Netzwerk mit Kantenmenge K und einem Fluss f . ← − Dann ist: K = {(j, i) | (i, j) ∈ K}. Es sei Gf der gerichtete kantenbewertete Graph mit gleicher Eckenmenge wie G und folgenden Kanten: 1 2 k ∈ K gehört zu Gf , falls f (k) < c(k) und in diesem Fall trägt k die Bewertung c(k) − f (k); ← − ← − k ∈ K gehört zu Gf , falls f (k) > 0, und in diesem Fall trägt k die Bewertung f (k). B ESTIMMUNG VON E RWEITERUNGSWEGEN Existieren in G Kanten mit entgegengesetzten Richtungen, so kann dies dazu führen, dass es in Gf Ecken gibt, zwischen denen es zwei Kanten mit der gleichen Richtung gibt. Diese kann man zu einer Kante zusammenfassen und die Bewertungen addieren. Dadurch wird Gf ein schlichter Graph. Im folgenden wird dies nicht vorgenommen. In den dargestellten Algorithmen wird der Graph Gf nie explizit erzeugt, sondern er dient nur zum besseren Verständnis der Vorgehensweise. Im Rest der Vorlesung wird folgende Bezeichnungsweise verwendet: Ist k eine Kante eines ← − Netzwerkes G, so bezeichnet k die zu k entgegengesetzt gerichtete Kante, die nicht in G liegt. B ESTIMMEN VON E RWEITERUNGSWEGEN Die Erweiterungswege von G bezüglich f entsprechen Wegen in Gf und umgekehrt. B ESTIMMEN VON E RWEITERUNGSWEGEN Die Bestimmung der Erweiterungswege kann nun mit Hilfe von Gf durchgeführt werden. Jeder Weg in Gf von q nach s ist ein Erweiterungsweg, welcher zur Konstruktion eines Flusses mit höherem Wert verwendet werden kann. Solche Wege lassen sich mit der Tiefen- oder Breitensuche leicht finden. Gesucht wird ein Verfahren dessen Laufzeit unabhängig von den Kapazitäten der Kanten ist. B ESTIMMEN VON E RWEITERUNGSWEGEN Die Bestimmung von Wegen mit einer minimalen Anzahl von Kanten erfolgt mit Hilfe der Breitensuche. Diese wird auf den Graphen Gf mit Startecke q angewendet. Sobald die Ecke s erreicht ist, hat man einen geeigneten Erweiterungsweg gefunden. Endet die Breitensuche, bevor die Ecke s erreicht wurde, so ist der vorliegende Fluss bereits maximal. Die Anpassung der Breitensuche an die vorliegende Situation ist einfach. Für jede Ecke e, welche die Breitensuche erreicht, wird der Wert, um den der Fluss entlang des Erweiterungsweges von q nach e maximal vergrößert werden kann, abgespeichert; dazu wird das Feld F∆ verwaltet. F UNKTION erweiterungsweg Sie konstruiert für ein Netzwerk G mit einem Fluss f einen Erweiterungsweg von q nach s mit einer minimalen Anzahl von Kanten. Ihr Rückgabewert ist f∆ , falls ein Erweiterungsweg von q nach s gefunden wurde, und sonst 0. F UNKTION erweiterungsweg P ROZEDUR erhöhe Fluss Aus einem gegebenen Fluss f eines Netzwerkes G, einem Erweiterungsweg und dem Wert f∆ wird ein neuer Fluss mit dem Wert |f | + f∆ konstruiert. Das Feld kantenart wird dazu verwendet, die Richtung einer Kante im Breitensuchebaum zu vermerken: 1 bedeutet Vorwärtskante und 0 Rückwärtskante. P ROZEDUR erhöhe Fluss P ROZEDUR MaxFluss Das vollständige Verfahren läßt sich nun leicht angeben. Ausgehend von dem trivialen Fluß werden sukzessiv Flüsse mit einem höheren Wert konstruiert. Ein maximaler Fluß ist gefunden, sobald kein Erweiterungsweg mehr existiert. Dies führt zu der Prozedur maxFluss. P ROZEDUR MaxFluss A NWENDUNG VON E DMONDS -K ARP A LGORITHMUS A NWENDUNG VON E DMONDS -K ARP A LGORITHMUS A NWENDUNG VON E DMONDS -K ARP A LGORITHMUS A NWENDUNG VON E DMONDS -K ARP A LGORITHMUS A NWENDUNG VON E DMONDS -K ARP A LGORITHMUS A NWENDUNG VON E DMONDS -K ARP A LGORITHMUS A LGORITHMUS VON E DMONDS -K ARP Eine Kante k eines Netzwerkes G heißt bezüglich eines Flusses f kritisch, falls der Fluss durch k gleich 0 oder gleich der Kapazität c(k) der Kante ist. Ist der Fluss durch eine kritische Kante k gleich 0, so kann k nicht als Rückwärtskante in einem Erweiterungsweg auftreten; und ist der Fluss gleich c(k), so kann k nicht als Vorwärtskante in einem Erweiterungsweg auftreten. Zur Bestimmung der worst case Komplexität der Prozedur maxFluss ist es notwendig, die Anzahl der konstruierten Erweiterungswege abzuschätzen. Dies wird in dem folgenden Satz getan. ALGORITHMUS VON E DMONDS -K ARP Satz Der Algorithmus von Edmonds und Karp bestimmt in maximal mn/2 Schritten einen maximalen Fluss. Satz Der Algorithmus von Edmonds und Karp zur Bestimmung eines maximalen Flusses hat eine worst case Komplexität von O(nm2 ). A LGORITHMUS VON D INIC Für dichte Netzwerke hat der Algorithmus von Edmonds und Karp eine worst case Laufzeit von O(n5 ). Für solche Graphen arbeitet ein von E.A. Dinic entwickelter Algorithmus viel effizienter. Durch eine andere Art der Vergrößerung von Flüssen und durch die Betrachtung geeigneter Hilfsnetzwerke gelang es, einen Algorithmus mit einer worst case Laufzeit von O(n3 ) zu entwickeln. Die Flusserhöhungen erfolgen nicht mehr nur entlang einzelner Wege, sondern auf dem gesamten Netzwerk. Der ursprünglich von Dinic angegebene Algorithmus hatte eine Laufzeit von O(n2 m). In diesem Abschnitt wird eine Weiterentwicklung dieses Algorithmus vorgestellt, welche eine Laufzeit von O(n3 ) hat. Diese Weiterentwicklung stammt von V.M. Malhotra, M. Pramodh Kumar und S.N. Maheswari. A LGORITHMUS VON D INIC Ausgangspunkt für den Algorithmus von Dinic ist die Beobachtung, daß bei der Konstruktion eines Erweiterungsweges für ein Netzwerk G mit Fluss f viele der betrachteten Kanten nicht in Frage kommen. Die Erweiterungswege erhält man mit Hilfe der Breitensuche und dem Graphen Gf . Der Graph Gf wurde nicht explizit konstruiert, da er nur für einen Breitensuchedurchgang verwendet wurde. Im schlimmsten Fall mussten mn/2 Erweiterungswege gesucht werden. Der Algorithmus von Dinic kommt mit maximal n Durchgängen aus. Diese Reduktion wird dadurch erzielt, daß man in jedem Durchgang ein Hilfsnetzwerk aufbaut und in diesem einen Fluss bestimmt. Mit diesem wird dann der Fluss auf dem eigentlichen Netzwerk erhöht. A LGORITHMUS VON D INIC Das Hilfsnetzwerk entsteht aus Gf , indem dort überflüssige Kanten und Ecken entfernt werden. Auf dem Hilfsnetzwerk wird ein Fluss konstruiert, der zwar nicht maximal sein muss, für den es aber keinen Erweiterungsweg gibt, der nur aus Vorwärtskanten besteht. Einen solchen Fluss nennt man einen blockierenden Fluss. Der Fluss f3 aus der unteren Abbildung ist ein blockierender Fluss. A LGORITHMUS VON D INIC Dieses Beispiel zeigt auch, daß ein blockierender Fluss nicht notwendigerweise ein Fluss mit maximalem Wert ist. Umgekehrt ist natürlich jeder Fluss mit einem maximalen Wert ein blockierender Fluss. Die Grundidee des Algorithmus ist, mittels Hilfsnetzwerken eine Folge von blockierenden Flüssen zu finden, um so zu einem Fluss mit maximalem Wert zu gelangen. Im folgenden wird zunächst die Konstruktion der Hilfsnetzwerke diskutiert. A LGORITHMUS VON D INIC Im Algorithmus von Edmonds und Karp wurde ein Erweiterungsweg mittels der Breitensuche mit Startecke q auf dem Graphen Gf gefunden. Der Weg von q nach s in dem Breitensuchebaum von Gf ist ein Erweiterungsweg. Kanten, die nicht im Breitensuchebaum enthalten sind, können somit nicht in einem Erweiterungsweg vorkommen. Allerdings ist der Breitensuchebaum mit Startecke q nicht eindeutig bestimmt. In Abhängigkeit der Auswahl der Reihenfolge der Nachfolgeecken ergeben sich verschiedene Breitensuchebäume. Unabhängig von der Reihenfolge der Nachfolger ist die Einteilung der Ecken in die verschiedenen Niveaus. Ist k = (e, f ) eine Kante aus irgendeinem Breitensuchebaum, so gilt Niv(e) + 1 = Niv(f ). A LGORITHMUS VON D INIC Dies führt zur Definition des geschichteten Hilfsnetzwerkes G0f eines Netzwerkes G mit einem Fluss f . Die Eckenmenge E0 von G0f besteht neben der Senke s aus allen Ecken e von Gf mit Niv(e) < Niv(s). G0f enthält genau die Kanten k = (e, f ) von Gf , für die e, f ∈ E0 und Niv(e) + 1 = Niv(f ) gilt. Die Breitensucheniveaus bilden also die Schichten des Hilfsnetzwerkes. Somit besteht G0f aus allen kürzesten Wegen in Gf von der Quelle q zur Senke s. Die Kapazitäten der Kanten von G0f entsprechen den Bewertungen der Kanten in Gf . G0f ist somit ein Netzwerk mit gleicher Quelle und Senke wie G. Man beachte, dass es in Gf Kanten mit Endecke q oder Startecke s geben kann, in G0f aber gilt g− (q) = g+ (s) = 0. G ESCHICHTETE H ILFSNETZWERKE BZGL . f0 UND f3 G ESCHICHTETE H ILFSNETZWERKE Bezüglich f0 liegt s in Niveau 4 und bezüglich f3 in Niveau 6. Dies deutet schon die Grundidee des Verfahrens an. Man kann beweisen, dass das Niveau der Senke s in jedem der im Algorithmus von Dinic konstruierten geschichteten Hilfsnetzwerke mindestens um 1 ansteigt. Da s mindestens das Niveau 1 und höchstens das Niveau n − 1 hat, folgt daraus, dass man mit maximal n − 2 geschichteten Hilfsnetzwerken zu einem maximalen Fluss gelangt. Die Anhebung des Niveaus der Senke beruht darauf, dass zur Konstruktion der geschichteten Hilfsnetzwerke blockierende Flüsse verwendet werden. Mit ihrer Hilfe wird zunächst der Fluss auf dem eigentlichen Netzwerk vergrößert. Dies führt dann zu einem neuen geschichteten Hilfsnetzwerk. Wie kann man nun mit einem Fluss auf dem geschichteten Hilfsnetzwerk den Fluss auf dem eigentlichen Netzwerk erhöhen? Dazu das folgende Lemma: G ESCHICHTETE H ILFSNETZWERKE Lemma Es sei G ein Netzwerk mit Fluss f und G0f das zugehörige geschichtete Hilfsnetzwerk. Ist f 0 ein Fluss auf G0f , so gibt es einen Fluss f 00 auf G mit |f 00 | = |f | + |f 0 |. G ROBSTRUKTUR DES A LGORITHMUS VON D INIC B ESTIMMUNG EINES GESCHICHTETEN H ILFSNETZWERKES Im folgenden werden die beiden noch offenen Teilprobleme gelöst. Die Bestimmung eines geschichteten Hilfsnetzwerkes erfolgt ganz analog zu der Funktion erweiterungsweg. Die dort verwendete Version der Breitensuche muss allerdings leicht abgeändert werden. Eine Ecke wird besucht, falls sie noch nicht besucht wurde oder falls sie in dem im Aufbau befindlichen Niveau liegt. Eine Ecke kann also somit mehrmals besucht werden. Sie wird aber nur einmal in die Warteschlange eingefügt. Das geschichtete Hilfsnetzwerk wird schichtenweise aufgebaut. Der Algorithmus startet mit einem Hilfsnetzwerk, welches nur aus der Quelle q besteht. Im Verlauf werden dann die Ecken der einzelnen Niveaus und die Kanten zwischen ihnen eingefügt. Der Algorithmus endet, falls die Senke s in Gf nicht von q aus erreicht werden kann, oder falls das Niveau, welches die Senke enthält, bearbeitet wurde. F UNKTION hilfsnetzwerk F UNKTION hilfsnetzwerk F UNKTION hilfsnetzwerk Die Funktion hilfsnetzwerk stimmt im wesentlichen noch mit der Breitensuche überein und hat somit eine worst case Komplexität von O(n + m). Aus dem letzten Niveau werden alle Ecken bis auf die Senke entfernt. Dies wird später bei der Konstruktion von blockierenden Flüssen benötigt. Der folgende Satz zeigt, dass der Algorithmus von Dinic maximal n − 1 geschichtete Hilfsnetzwerke aufbauen muss. Im letzten ist dann die Senke nicht mehr von der Quelle aus erreichbar, und der Fluss hat somit einen maximalen Wert. A LGORITHMUS VON D INIC Satz Nach maximal n − 2 Erhöhungen durch blockierende Flüsse liegt ein maximaler Fluss vor. Um den Algorithmus von Dinic zu vervollständigen, müssen noch die blockierenden Flüsse bestimmt werden. Das ursprünglich von Dinic angegebene Verfahren hatte eine Komplexität von O(nm). Daraus ergab sich für die Bestimmung eines maximalen Flusses ein Algorithmus mit Komplexität O(n2 m). In diesem Abschnitt wird eine Konstruktion von blockierenden Flüssen mit Komplexität O(n2 ) vorgestellt. Sie stammt von Malhotra, Pramodh Kumar und Maheswari. Damit ergibt sich eine Gesamtkomplexität von O(n3 ). Das Verfahren verzichtet auf die Bestimmung von Erweiterungswegen. Zunächst wird der Durchsatz einer Ecke definiert.