Algorithmische Graphentheorie

Werbung
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.
Herunterladen