Flüsse, Schnitte und bipartite Abbildungen

Werbung
Im Seminar
Hallo Welt! für Fortgeschrittene
FAU Erlangen-Nürnberg
SS 2005
10.05.2005
von Tarek Besold
[email protected]
Flüsse, Schnitte, bipartite Abbildungen
Die nächsten 60 Minuten
Ouvertüre: Motivation
Warum ?
oder: Die ewige Frage nach dem
1. Akt: Fast 300 Jahre Waldarbeiten oder: 25 Minuten diskrete
Theorie, von der Heirat bis zur einschneidenden Trennung
2. Akt: Welcome to the real world oder: Praxis!
Maximaler Fluss (1): Ford-Fulkerson -Algorithmus
Maximaler Fluss (2): Maximaler Fluss mit minimalen
Kosten
Bipartite Abbildungen: Maximales Matching
Reduzierung von Graphen
Minimaler Schnitt (1): Max Flow-Min Cut
Minimaler Schnitt (2): Karger-Algorithmus
Finale: Das Angebot-Nachfrage-Problem
Flüsse, Schnitte, bipartite Abbildungen
Also, warum
?!
Wichtiges Hilfsmittel zur Modellierung von
Realwelt-Strukturen:
Logistik
Netzwerke:
Energie- & Ressourcennetzwerke
Informations- und Datenübertragungsnetzwerke
Verkehrsplanung
Modellbildung im Wirtschaftssektor (AngebotNachfrage etc.)
u. v. a.
Flüsse, Schnitte, bipartite
Abbildungen
1. Akt: Der Blick hinter die Kulissen
oder:
Jetzt mal ganz diskret: Eigentlich ist
Informatik doch nur Mathematik f ür
Eklektiker
Flüsse, Schnitte, bipartite Abbildungen
Von Mathematikgottheiten und anderen Förstern
1736: Anfänge der Graphentheorie: Königsberger (Kaliningrader)
Brückenproblem , Leonhard Euler; er kann jedoch nur eine
notwendige Bedingung angeben und die Existenz damit verneinen;
1873: Hierholzer findet eine hinreichende Bedingung für den im
Problem geforderten Rundgang und entwickelt den ersten
effizienten Algorithmus der Graphentheorie;
1878: Sylvester benutzt in der Literatur erstmals den Begriff Graph
(abgeleitet von der graphischen Notation chemischer Strukturen
Cayley: Isomerie der Kohlenwasserstoffstrukturen)
Weitere bedeutende Graphentheoretiker:
William Rowan Hamilton
Edsger W. Dijkstra
Lester Ford
Flüsse, Schnitte, bipartite Abbildungen
Das richtige Grundvokabular ist
Ein Graph G = (V, E) besteht aus einer endlichen Knotenmenge V
V
und einer Menge E
von Paaren {u , v}, u v, genannt
2
Kanten.
Ist
V
V
, so sprechen wir vom vollständigen
2
n und E
Graphen Kn.
Ein Graph G = (S+T, E) ist bipartit, falls V aus zwei disjunkten
Teilmengen S und T besteht, und jede Kante einen Knoten in S und
den anderen in T hat.
Sind alle Kanten zwischen S und T vorhanden, wird der Graph als
vollständig bipartiter Graph bezeichnet. Schreibweise: KS,T oder
Km,n, falls S
m, T n ist.
Für Km,n gilt somit:
V
m n, E
mn
Flüsse, Schnitte, bipartite Abbildungen
auch in der diskreten Mathematik
Vollständig bipartiter Graph
(Bipartiter) Hyperwürfel Q3
Flüsse, Schnitte, bipartite Abbildungen
oft schon einer der
Ein Weg/Pfad Pn in einem Graphen besteht aus
einer Folge u1, u2, ,un von verschiedenen Knoten
mit uiui+1 E für alle i.
Die Länge des Weges ist die Anzahl n-1 der
Kanten uiui+1.
Ein Kreis Cn ist eine Folge von verschiedenen
Knoten u1, u2, , un mit uiui+1 E (i = 1, ,n-1) und
unu1 E.
Die Länge von Cn ist die Anzahl n der Knoten bzw.
Kanten.
Flüsse, Schnitte, bipartite Abbildungen
entscheidenden Schritte zur
Ist uv E, so nennt man u und v benachbart oder adjazent
(vgl. Adjazenzmatrix).
Falls u V, k E mit u k, so sagt man, u und v sind
inzident, und u ist Endknoten von k.
Ebenso nennt man zwei Kanten k und l inzident, falls sie
einen gemeinsamen Endknoten haben, also k l
gilt
(vgl. Inzidenzmatrix).
Die Menge der Nachbarn von u V bezeichnet man mit
N(u), und nennt d(u) = |N(u)| den Grad von u.
Ein Graph H = (V , E ) heißt ein Untergraph von G = (V,E),
falls V
V ist und E
E.
H heißt ein induzierter Untergraph, falls E ' E
d.h. H enthält alle Kanten zwischen den Knoten
in V , die auch in G vorhanden sind.
V'
2
gilt,
Flüsse, Schnitte, bipartite Abbildungen
Lösung des Problems!
Man sagt, v ist erreichbar von u (u, v V), falls es einen
Weg P mit Anfangsknoten u und Endknoten v gibt, also
einen u,v-Weg.
Erreichbarkeit ist also eine Äquivalenzrelation, die auf den
einzelnen Äquivalenzklassen induzierten Untergraphen
nennt man die (zusammenhängenden) Komponenten von
G.
Ein Graph heißt zusammenhängend, falls er nur eine
Komponente hat.
Man nennt eine Kante K des Graphen G = (V, E) eine
Brücke, falls die Entfernung von K die Anzahl der
Komponenten erhöht.
Der Abstand d(u,v) zweier Knoten u und v ist die Länge des
kürzesten Weges von u nach v, mit d(u,u) = 0.
Flüsse, Schnitte, bipartite Abbildungen
Dann bringen wir noch etwas Orientierung in die
Sache
Ein gerichteter/orientierter Graph ( Digraph ) G ( E , K )
besteht aus einer Knotenmenge E und einer Menge K E ²
von geordneten Paaren, die man gerichtete oder orientierte
Kanten nennt.
Jede gerichtete Kante (u,v) kommt höchstens einmal vor,
und wir verlangen u ungleich v. Andernfalls spricht man von
einem gerichteten Multigraphen.
In G (V , E ) ist d (u )
der In-Grad und
d (u ) k E : k
u der Aus-Grad; d+(u) bezeichnet also
die Anzahl der Pfeile, die nach u hineinführen, d-(u) die
Anzahl jener, die von u wegführen.
d (u )
d (u )
E
Offenbar gilt:
u V
u V
Ein Digraph heißt zusammenhängend, falls der zugrunde
liegende Graph zusammenhängend ist.
Er heißt stark zusammenhängend, falls von jedem Knoten u
zu jedem anderen Knoten v ein gerichteter Weg existiert.
k
E:k
u
Flüsse, Schnitte, bipartite Abbildungen
und schon stehen wir im Wald!
Ein Graph heißt ein Baum, falls er
zusammenhängend ist und keine Kreise enthält.
Ein Graph, dessen Komponenten jeweils Bäume
sind, heißt ein Wald.
Sei G = (V, E) ein zusammenhängender Graph. Ein
Untergraph T, der ein Baum der Ordnung n = |V| ist,
heißt ein aufspannender Baum.
Jeder zusammenhängende Graph besitzt
aufspannende Bäume.
Sei Kn der vollständige Graph auf {1,2, ,n}, die
Anzahl der aufspannenden Bäume sei t(n).
Es gilt: t(n) = nn-2.
Flüsse, Schnitte, bipartite Abbildungen
Manchmal sieht man den Wald vor lauter Bäumen
kaum!
Gegeben ein bipartiter Graph G = (S+T, E). Ein Matching
M ist eine Menge von paarweise nicht-inzidenten
Kanten.
Wir interessieren uns meistens v. a. für ein maximal
großes Matching M von G = (S+T, E), und insbesondere
für die Matching-Zahl m(G), welche die Anzahl der
Kanten eines maximal großen Matchings bezeichnet.
Ein Matching M heißt Maximum Matching, falls |M| =
m(G) ist.
Flüsse, Schnitte, bipartite Abbildungen
Graphentheorie minimiert Liebeskummer!
(die roten Kanten kennzeichnen ein Maximum Matching)
Flüsse, Schnitte, bipartite Abbildungen
Der Heiratssatz
oder: Kampf der Bigamie!
Sei der bipartite Graph G = (S+T, E) gegeben. Sei A eine
Teilmenge von S, N(A) die Menge der Nachbarn von A:
N ( A) {v T : uv
E für ein u
A}
Dann ist m(G) = |S| (d. h. alle Knoten aus S können
gematcht werden) genau dann, wenn |A| |N(A)| für alle A
in S gilt.
Dieser Satz wird auch Heiratssatz genannt:
Amüsante Interpretation: S = Menge der Damen, T =
Menge der Herren mit uivi E, wenn ui, vj einer Heirat nicht
abgeneigt sind. Der Satz gibt die genaue Bedingung an,
wann alle Damen einen geeigneten Heiratspartner (=match)
finden, ohne Bigamie zu betreiben. (M. Aigner, Diskrete
Mathematik )
Flüsse, Schnitte, bipartite Abbildungen
Zuviel Abwechslung ist nicht immer optimal!
Sei M ein Matching in G = (V, E).
Ist die Ecke u in einer Kante von M, so nennen wir u
M-saturiert, ansonsten M-unsaturiert.
Ein M-alternierender Weg P ist ein Weg in G, der
abwechselnd Kanten von M und K \ M verwendet,
wobei die beiden Endecken von P jeweils
unsaturiert sind (er enthält also genau eine Kante
aus K \ M mehr als aus M).
Ein Matching M in G = (V, E) ist genau dann ein
Maximum Matching, wenn es keinen M-alternierenden Weg gibt.
Flüsse, Schnitte, bipartite Abbildungen
Nicht nur der BUND beschäftigt sich mit
Fließgewässern
Ein Netzwerk über N0 von u nach v besteht aus einem
gerichteten Graphen G (V , E ) , u v V zusammen mit einer
N 0. Der Knoten u heißt die Quelle, v
Gewichtsfunktion c : E
die Senke des Netzwerks, und c die Kapazität.
N 0 heißt ein Fluss im Netzwerk G (V , E ).
Eine Funktion f : E
Der Netto-Fluss in dem Knoten x V ist
( f )( x)
f (k )
f (k ) , d. h. ( f )( x) misst den Einfluss
k x
k x
minus den Ausfluss in x.
Gegeben das Netzwerk G (V , E ) mit Quelle u, Senke v und
Kapazität c. f heißt ein zulässiger Fluss von u nach v, falls
a) 0 f (k ) c(k ) k E
b) ( f )( x ) 0 x u , v
Flüsse, Schnitte, bipartite Abbildungen
auch Mathematiker bekommen das ein oder
andere Mal
Ein zulässiger Fluss transportiert also eine
gewisse Menge von der Quelle zur Senke, so
dass die Kapazität der Ecken nicht überschritten
wird (a) und nichts an den Zwischenstationen
übrig bleibt (b).
Der Wert w(f) eines zulässigen Flusses ist w(f) =
( f )( x), also der Netto-Fluss in die Senke (bzw.
der Netto-Fluss aus der Quelle heraus).
Flüsse, Schnitte, bipartite Abbildungen
ganz schön nasse Füße!
Gegeben das Netzwerk G (V , E ) mit Quelle u, Senke v und
Kapazität c.
Ein Schnitt des Netzwerkes ist eine Partition V = X + Y mit
u X, v Y.
Die Kapazität des Schnittes (X,Y) ist c( X , Y )
c(k ) ,wobei
über alle Kanten k mit k X , k Y summiert wird.
Für jeden zulässigen Fluss f und jeden Schnitt (X,Y) gilt:
w( f ) c( X , Y )
Ein zulässiger Fluss f0 mit w(f0) = max w(f) heißt ein
Maximum Fluss, und analog ein Schnitt (X0,Y0) mit c(X0,Y0)
= min c(X,Y) ein Minimum Schnitt.
Flüsse, Schnitte, bipartite Abbildungen
Gleich ist s vollbracht
Sei G (V , E ) ein Netzwerk über N0 mit Quelle u, Senke v
und Kapazität c. Die folgenden Bedingungen sind für einen
zulässigen Fluss f äquivalent:
f ist Maximum Fluss.
Das Restnetzwerk Gf enthält keinen Erweiterungspfad.
(Xf,Yf) ist Schnitt.
Für einen Maximum Fluss f gilt w(f) = c(Xf,Yf).
Sei G
(V , E ) ein Netzwerk mit ganzzahligen Kapazitäten
c:E
N 0 . Dann gibt es einen ganzzahligen Maximum
N 0 ,und es gilt somit max w(f) = min c(X,Y).
Fluss f : E
Der Wert eines Maximum Flusses kann nicht größer als die
Kapazität eines beliebigen (somit auch eines minimalen)
Schnittes sein (Max Flow-Min Cut-Theorem).
Flüsse, Schnitte, bipartite Abbildungen
was bleibt ist noch ein kleiner Rest
Das Restnetzwerk (auch Residualgraph) bezüglich
eines zulässigen Flusses ist ein Netzwerk, das alle
Kanten des ursprünglichen Netzwerks enthält, mit um
den jeweiligen Flusswert verminderten
Kantenkapazitäten.
Zusätzlich hat das Restnetzwerk noch genau dem
Fluss entgegenlaufende Kanten.
Definition: Gegeben ein Netzwerk G mit Kapazität c und
ein zulässiger Fluss f.
Das zugeordnete Restnetzwerk Gf mit einer
zugeordneten Restkapazität cf(u,v) = c(u,v,) f(u,v) ist
gegeben durch Gf = (V,Ef), wobei Ef = {(u,v)|cf(u,v) > 0}.
Flüsse, Schnitte, bipartite Abbildungen
und fertig ist die Theorie!
Ein Erweiterungspfad ist ein einfacher (zyklenfreier) Pfad p in Gf von
s nach t. Nach Definition von Gf muss für alle Kanten (u,v) auf p
gelten cf(u,v) > 0. Die Restkapazität von p ist cf(p) = min{cf(u,v) | (u,v)
liegt auf p}. Wir bemerken:
g (u , v)
c f ( p ), (u , v) liegt auf p
c f ( p ), (v, u ) liegt auf p
0, sonst
ist ein zulässiger Fluss in Gf.
Sei G ein Netzwerk, c eine Kapazität, und f ein zulässiger Fluss. Sei
Gf das zugehörige Restnetzwerk und cf die zugehörige Restkapazität.
Sei ferner g ein zulässiger Fluss auf Gf.
Dann gilt: (f+g) ist ein zulässiger Fluss auf G mit |(f+g)| = |f| + |g|.
Flüsse, Schnitte, bipartite Abbildungen
Ein Bild sagt oftmals mehr als 1000 Worte!
Links oben: Schnitt mit Kapazität 4.
Links unten: Möglicher Fluss, die
Belegung steht zusammen mit der
Kapazität an den einzelnen Kanten.
Der Wert des Flusses ist 2.
Flüsse, Schnitte, bipartite Abbildungen
Sagen zwei Bilder dann eigentlich mehr als 2000
Worte (n
n+1)?
Aus dem gegebenen Fluss ergibt
sich das in Grau dargestellte
Restnetzwerk.
Auf dem Pfad s, a, b, t lässt sich
der Fluss um den Wert 2 erhöhen.
Flüsse, Schnitte, bipartite
Abbildungen
2. Akt: Der Schritt ins pralle Leben
oder:
Grau, teurer Freund, ist alle Theorie,
Und grün des Lebens goldner Baum.
(J. W. v. Goethe)
Flüsse, Schnitte, bipartite Abbildungen
Der beste Freund jedes Netzwerk-FlussTheoretikers
Gegeben sei ein gerichteter Graph mit Quelle s und
Senke t. Den Kanten des Graphs seien positive, ganze
Zahlen (Kapazitäten) zugeordnet (derartige Graphen
können interpretiert werden als Netzwerke von Röhren,
Straßen, Leitungen, mit einer jeweiligen Transportbzw. Durchlaufkapazität). Aus der Quelle strömt nun
Flüssigkeit in die Röhren (o.ä.). Diese durchläuft die
Kanten und endet schließlich in der Senke (es entsteht
also ein Fluss).
Die Aufgabe besteht nun darin, den Kanten konkrete
Flusswerte zuzuordnen, die die jeweilige Kapazität
nicht überschreiten, so dass der Gesamtfluss von der
Quelle zur Senke maximiert wird (wobei natürlich als
Bedingung gilt, dass aus einem Knoten nicht mehr
oder weniger heraus als hinein fließen kann).
Flüsse, Schnitte, bipartite Abbildungen
kommt aus dem Hause Ford und Fulkerson!
Algorithmus von Ford und Fulkerson:
Setze f (u , v ) 0 (u , v ) V V
REPEAT
Berechne Gf
Bestimme einen Erweiterungspfad p in Gf
f := f + g
UNTIL es gibt keinen Pfad in Gf von s nach t
Gib f als maximalen Fluss aus
Flüsse, Schnitte, bipartite Abbildungen
Einschub: Nur als kleine Erinnerung
(1)
Ein Erweiterungspfad ist ein einfacher (zyklenfreier) Pfad p in Gf von
s nach t. Nach Definition von Gf muss für alle Kanten (u,v) auf p
gelten cf(u,v) > 0. Die Restkapazität von p ist cf(p) = min{cf(u,v) | (u,v)
liegt auf p}. Wir bemerken:
g (u , v)
c f ( p ), (u , v) liegt auf p
c f ( p ), (v, u ) liegt auf p
0, sonst
ist ein zulässiger Fluss in Gf.
Sei G ein Netzwerk, c eine Kapazität, und f ein zulässiger Fluss. Sei
Gf das zugehörige Restnetzwerk und cf die zugehörige Restkapazität.
Sei ferner g ein zulässiger Fluss auf Gf.
Dann gilt: (f+g) ist ein zulässiger Fluss auf G mit |(f+g)| = |f| + |g|.
Flüsse, Schnitte, bipartite Abbildungen
kommt aus dem Hause Ford und Fulkerson!
Algorithmus von Ford und Fulkerson:
Setze f (u , v ) 0 (u , v ) V V
REPEAT
Berechne Gf
Bestimme einen Erweiterungspfad p in Gf
f := f + g
UNTIL es gibt keinen Pfad in Gf von s nach t
Gib f als maximalen Fluss aus
Flüsse, Schnitte, bipartite Abbildungen
Anders ausgedrückt
Ford-Fulkerson über (G, s, t):
FOR each edge (u,v)
DO f [u , v] 0
f [v, u ]
E[G]
0
WHILE there exists a path p from s to t in
the residual network Gf
min{c f (u , v) : (u , v) is in p}
DO c f ( p )
FOR each edge (u,v) in p
f [u , v] c f ( p )
DO f (u , v)
f (v, u )
f [u , v]
mit Graph G, Quelle s und Senke t;
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (1)
Einige kommentierte Auszüge eines C-Implementierungsbeispiels des Ford-Fulkerson augmenting path algorithm
(komplettes Programm siehe z. B.
http://www.cs.sunysb.edu/~skiena/392/programs/netflow.c):
Anlegen einer edge -structure:
typedef struct {
int v;
int capacity;
int flow;
int residual;
} edge;
/* neighboring vertex */
/* capacity of edge */
/* flow through edge */
/* residual capacity of edge */
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (2)
Wir suchen jeden Pfad von der Quelle zur Senke der den
Gesamtfluss erhöht. Der Algorithmus soll mit dem optimalen
Fluss terminieren, wenn kein Erweiterungspfad mehr existiert:
netflow(flow_graph *g, int source, int sink) {
int volume;
/* weight of the augmenting path */
add_residual_edges(g);
initialize_search(g);
bfs(g,source);
volume = path_volume(g, source, sink, parent);
while (volume > 0) {
augment_path(g,source,sink,parent,volume);
initialize_search(g);
bfs(g,source);
volume = path_volume(g, source, sink, parent);
}
}
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (3)
Jeder Erweiterungspfad von der Quelle zur Senke
erhöht den Fluss, also können wir bfs anwenden,
um einen derartigen Pfad zu finden. Dabei darf nur
entlang Kanten fortgefahren werden, welche eine
positive Restkapazität (bzw. einen positiven
Restfluss) aufweisen. Anhand dieser Eigenschaft
kann bfs zwischen saturierten und unsaturierten
Kanten unterscheiden:
bool valid_edge(edge e) {
if (e.residual > 0) return (TRUE);
else return(FALSE);
}
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (4)
Zugehörige bfs:
bfs(flow_graph *g, int start) {
queue q;
/* queue of vertices to visit */
int v;
/* current vertex */
int i;
/* counter */
init_queue(&q);
enqueue(&q,start);
discovered[start] = TRUE;
while (empty(&q) == FALSE) {
v = dequeue(&q);
process_vertex(v);
processed[v] = TRUE;
for (i=0; i<g->degree[v]; i++)
if (valid_edge(g->edges[v][i]) == TRUE) {
if (discovered[g->edges[v][i].v] == FALSE) {
enqueue(&q,g->edges[v][i].v);
discovered[g->edges[v][i].v] = TRUE;
parent[g->edges[v][i].v] = v;
}
if (processed[g->edges[v][i].v] == FALSE)
process_edge(v,g->edges[v][i].v);
}
}
}
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (5)
Das Erweitern eines Pfades verwandelt das
maximal mögliche Volumen an Restkapazität in
positiven Fluss. Der übertragbare Betrag wird durch
den Knoten mit der kleinsten Restkapazität auf dem
jeweiligen Pfad begrenzt.
int path_volume(flow_graph *g, int start, int end, int parents[]){
edge *e;
/* edge in question */
edge *find_edge();
/* see next sheet */
if (parents[end] == -1) return(0);
e = find_edge(g,parents[end],end);
if (start == parents[end]) return(e->residual);
else return( min(path_volume(g,start,parents[end],parents),
e->residual) );
}
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (6)
edge *find_edge(flow_graph *g, int x, int y) {
int i;
/* counter */
for (i=0; i<g->degree[x]; i++)
if (g->edges[x][i].v == y)
return( &g->edges[x][i] );
return(NULL);
}
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (7)
Einen zusätzlichen Anteil des Flusses
entlang der gerichteten Kante (i,j) zu
schicken, reduziert die Restkapazität der
Kante (i,j), erhöht jedoch die Restkapazität
der Kante (j,i) (Symmetrieeigenschaft). Somit
erfordert das Erweitern eines Pfades, dass
sowohl vorwärts als auch rückwärts entlang
jeder Kante des Pfades gesucht wird.
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (8)
augment_path(flow_graph *g, int start, int end, int
parents[], int volume) {
edge *e;
/* edge in question */
edge *find_edge();
if (start == end) return;
e = find_edge(g,parents[end],end);
e->flow += volume;
e->residual -= volume;
e = find_edge(g,end,parents[end]);
e->residual += volume;
augment_path(g,start,parents[end],parents,volume);
}
Flüsse, Schnitte, bipartite Abbildungen
Ja, gibt s den denn nicht auf g scheit?! (9)
Den Fluss-Graphen zu initialisieren, erfordert
die Schaffung gerichteter Flusskanten (i,j)
und (j,i) für jede Netzwerkkante e = (i,j). Die
Anfangsflüsse werden alle auf 0 gesetzt. Der
Anfangsrestfluss von (i,j) wird auf die
Kapazität von e gesetzt, während der
Anfangsrestfluss von (j,i) ebenfalls auf 0
gesetzt wird.
Flüsse, Schnitte, bipartite Abbildungen
Nichts ist perfekt
Die Formulierung des Ford-Fulkerson Algorithmus
ist an einer Stelle unterspezifiziert: es wird nämlich
nicht gesagt, welcher Erweiterungspfad gewählt
werden soll, sofern es mehrere gibt. Durch
ungeschickte Wahl des Erweiterungspfades kann
Ford-Fulkerson somit eine relativ lange Laufzeit
haben.
Der Aufwand des originalen Algorithmus lässt sich
allgemein lediglich mit O(|f*| * |E|) abschätzen,
wobei f* der maximale Fluss ist, denn im
schlechtesten Fall benötigt der Algorithmus |f*|
Schleifendurchläufe.
Flüsse, Schnitte, bipartite Abbildungen
aber wir arbeiten daran!
Edmonds-Karp-Strategie : Als Erweiterungspfad
wird immer der kürzestmögliche ausgewählt, d. h.
derjenige mit der geringsten Kantenzahl (wird z. B.
mittels Breitensuche (= Dijkstra-Algorithmus)
gefunden).
Es kann gezeigt werden, dass mit dieser Strategie
nie mehr als |V|*|E| Schleifendurchläufe nötig
werden, womit die Gesamtkomplexität auf
|V|*|E|*O(|E|) = O(|V|*|E|²) eingegrenzt werden kann.
Flüsse, Schnitte, bipartite Abbildungen
Studentisches Grundwissen: das Min-MaxPrinzip
Maximaler Fluss mit minimalen Kosten: Gegeben sei ein
gerichteter Graph mit Quelle s und Senke t; zusätzlich
zur Kantenkapazität seien an jeder Kante ganzzahlige
Kosten gegeben (z. B. über Gewichtungsfunktion).
Frage: Wie findet man einen maximalen Fluss mit
minimalen Kosten?
Direkte Methode:
Erzeuge Pseudo-Kante von Quelle zu Ziel mit maximalen
Kosten und unendlich großem Fluss (oder Fluss = |V|*|E|)
Entferne alle negativen Zyklen aus dem Graphen ( cycle
cancelling , z. B. über kürzeste Wege Algorithmen von
Bellman-Ford oder Floyd-Warshall)
Entferne Pseudo-Kante
Flüsse, Schnitte, bipartite Abbildungen
Zurück zu unseren Singles im Endstadium
Erinnerung: Maximales Matching
(die roten Kanten kennzeichnen ein Maximum Matching)
Flüsse, Schnitte, bipartite Abbildungen
Es gibt auch ein Leben danach
(1)
6 Studenten suchen (selbstverständlich erst nach ihrem Diplom) einen
Arbeitsplatz
6 Firmen suchen potentielle zukünftige Großverdiener und Führungskräfte,
allerdings nach unterschiedlichen Kriterien
Tarek: Adoba, Pear, Microsaft
Tobias: Adoba, Pear, Yahaa
Christian: Microsaft, ABM, Moon
Daniel: Adoba, Pear
Raimund: ABM, Moon, Yahaa
Stephan: Microsaft, Moon, Yahaa
Adoba: Tarek, Tobias, Daniel
Pear: Tarek, Tobias, Daniel
Microsaft: Tarek, Christian, Stephan
ABM: Christian, Raimund
Moon: Christian, Raimund, Stephan
Yahaa: Tobias, Raimund, Stephan
Frage: Wie viele Studenten können maximal einen Arbeitsplatz bekommen?
Flüsse, Schnitte, bipartite Abbildungen
Es gibt auch ein Leben danach
1
2
3
4
5
6
Tarek: Adoba, Pear, Microsaft
Tobias: Adoba, Pear, Yahaa
Christian: Microsaft, ABM, Moon
Daniel: Adoba, Pear
Raimund: ABM, Moon, Yahaa
Stephan: Microsaft, Moon, Yahaa
(2)
a Adoba: Tarek, Tobias, Daniel
b Pear: Tarek, Tobias, Daniel
c Microsaft: Tarek, Christian, Stephan
d ABM: Christian, Raimund
e Moon: Christian, Raimund, Stephan
f Yahaa: Tobias, Raimund, Stephan
Eine Kante wird nur dann eingetragen, wenn beide Seiten (Student und Firma)
einverstanden sind.
Flüsse, Schnitte, bipartite Abbildungen
Es gibt auch ein Leben danach
(3)
Quelle (s) und Ziel (t) einfügen (vgl. Abbildung)
Allen Kanten die Kapazität 1 zuweisen
Maximalen Fluss berechnen
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(1)
Wie kann man den maximalen Fluss in Graphen mit
maximaler Quellen- und Zielkapazität berechnen?
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
Einfügen von Quelle s und Ziel t
(2)
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(3)
Wie kann man maximalen Fluss in Graphen mit
mehreren Quellen und Zielen berechnen?
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(4)
Einfügen einer globalen Quelle und eines globalen Ziels
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(5)
Graphen mit Knotenkapazitätsbeschränkung: Durch
einen Knoten mit Kapazität x darf kein Fluss größer x
fließen
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(6)
Einführen von Pseudokanten mit der jeweiligen
Knotenkapazität als Kantenkapazität
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
Graphen mit ungerichteten Kanten
(7)
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(8)
Ersetze alle ungerichteten Kanten durch zwei gerichtete
Kanten in beide Richtungen mit gleicher Kapazität
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
Berechne den maximalen Fluss
(9)
Flüsse, Schnitte, bipartite Abbildungen
Aus weniger mach mehr und sowieso
(10)
Falls die Kante uv den Fluss f und die Kante vu den
Fluss g besitzen, wird bei f > g die Kante uv mit dem
Fluss f - g und bei g > f die Kante vu mit den Fluss g - f
in den ursprünglichen Graphen eingesetzt
Flüsse, Schnitte, bipartite Abbildungen
Einschub: Nur als kleine Erinnerung
(2)
Gegeben das Netzwerk G (V , E ) mit Quelle u, Senke v und
Kapazität c.
Ein Schnitt des Netzwerkes ist eine Partition V = X + Y mit
u X, v Y.
Die Kapazität des Schnittes (X,Y) ist c( X , Y )
c(k ) ,wobei
über alle Kanten k mit k X , k Y summiert wird.
Für jeden zulässigen Fluss f und jeden Schnitt (X,Y) gilt:
w( f ) c( X , Y )
Ein zulässiger Fluss f0 mit w(f0) = max w(f) heißt ein
Maximum Fluss, und analog ein Schnitt (X0,Y0) mit c(X0,Y0)
= min c(X,Y) ein Minimum Schnitt.
Flüsse, Schnitte, bipartite Abbildungen
Der Traum jedes modernen Chirurgen
Minimaler Schnitt: Max Flow-Min Cut
Ein st-Schnitt ist ein Schnitt in einem st-Graphen, der die
Quelle s in der einen Teilmenge, das Ziel t in der anderen
platziert.
Ein minimaler st-Schnitt ist ein st-Schnitt, dessen Kanten
die minimal mögliche Kapazität besitzen.
Der Fluss durch einen st-Schnitt entspricht dem Fluss von
der Quelle zum Ziel.
Der maximale Fluss durch einen st-Graphen entspricht der
minimalen Kapazität aller st-Schnitte (vgl. Min-Cut-MaxFlow-Theorem).
Man findet einen minimalen Schnitt, indem man den
maximalen Fluss durch den Graphen berechnet und
danach einen Schnitt durch alle Kanten zieht, deren
Fluss maximal ist.
Flüsse, Schnitte, bipartite Abbildungen
Ein wirklich schnittiges Beispiel
(1)
Dazu betrachtet man von der Quelle aus alle Pfade zum
Ziel und markiert immer die erste Kante mit Fluss =
Kapazität.
Alle markierten Kanten sind Teil eines minimalen
Schnitts.
1.)
Flüsse, Schnitte, bipartite Abbildungen
Ein wirklich schnittiges Beispiel
2.)
3.)
(2)
Flüsse, Schnitte, bipartite Abbildungen
Ein wirklich schnittiges Beispiel
4.)
5.)
(3)
Flüsse, Schnitte, bipartite Abbildungen
Ein wirklich schnittiges Beispiel
(4)
Zum Vergleich:
Typischer Algorithmus:
Stoer and Wagner
Komplexität: O( |V|*|E| + |V|²*log(|V|) )
Flüsse, Schnitte, bipartite Abbildungen
Kuriositäten und kein Ende
Wir betrachten einen ungerichteten,
zusammenhängenden Graphen, der auch
Mehrfachkanten enthalten darf.
Ein Schnitt in einem derartigen Graphen ist
eine Menge von Kanten, deren Entfernen den
Graphen in zwei (oder mehr) nichtzusammenhängende Komponenten
aufspalten würde.
Für einfache Graphen gibt es einen
probabilistischen Algorithmus, der auf D.
Karger zurückgeht.
Flüsse, Schnitte, bipartite Abbildungen
Das Erstaunliche daran: Das Ergebnis
Karger-Algorithmus:
INPUT G
WHILE der Graph G = (V,E) hat mehr als
2 Knoten
DO Wähle eine Kante {u,v} zufällig
aus;
Verschmelze die beiden Knoten u und
v in G zu einem einzigen Knoten
(dabei verschwindet die Kante
{u,v} und eventuelle weitere
Mehrfachknoten)
OUTPUT die zwischen den 2 Knoten
verbleibenden Kanten
Flüsse, Schnitte, bipartite Abbildungen
..ist sozusagen wahrscheinlich richtig!
Es besteht die Möglichkeit, dass der
Algorithmus ein falsches Ergebnis
zurückliefert.
Die Strategie besteht daher (wie bei
probabilistischen Algorithmen üblich) darin,
den Algorithmus mit unabhängigen
Zufallszahlen mehrere Male laufen zu lassen,
und am Ende eine der ausgegebenen
Kantenmengen mit minimaler Mächtigkeit
auszuwählen.
Flüsse, Schnitte, bipartite Abbildungen
Für die Statistiker (1)
Wahrscheinlichkeit w, dass der Algorithmus bei
einem einzelnen Lauf einen minimalen Schnitt
n 2
ausgibt:
2
2
w
1
i 1
n i 1
n(n 1)
Wahrscheinlichkeit, dass bei mehreren
unabhängigen Wiederholungen kein minimaler
Schnitt gefunden wird:
t
2
1
e 2t / n ( n 1)
n(n 1)
Mit k = |minimaler Schnitt|, n = Anzahl der Knoten
des Graphen, t sei die Anzahl der unabhängigen
Wiederholungen des Algorithmus.
Flüsse, Schnitte, bipartite Abbildungen
Quellen (die ohne Netzwerk
) (1)
Bilder:
Folie 3:
http://www.go2sun.com/image/Fairbanks-Pipeline.jpg
Folie 4:
http://www.totalfinaelfexploration.co.uk/Images/genz2425c%20Vesterled
%20Pipeline%20System.jpg
Folie 5:
http://www.brandeis.edu/capitalprojects/images/steam-network-200405.jpg
Folie 6:
http://www.esru.strath.ac.uk/EandE/Web_sites/0304/wind/images/she%20map_clip_image002.gif
Folie 7:
http://tram.ruz.net/maps/sh19160000.gif
Folie 12.1:
http://wwwmayr.informatik.tumuenchen.de/skripten/ead_ws9899_html/img782.gif
Folie 12.2:
http://www.pballew.net/cube.jpg
Flüsse, Schnitte, bipartite Abbildungen
Quellen (die ohne Netzwerk
) (2)
Bilder:
Folie 19:
http://www.mcs.csuhayward.edu/~simon/handouts/4245/figures/hall_fig2
_cropped.jpg
Folie 28.1:
http://upload.wikimedia.org/wikipedia/de/d/de/Fluss-in-Graph-1.png
Folie 28.2:
http://upload.wikimedia.org/wikipedia/de/0/0e/Fluss-in-Graph-2.png
Folie 29:
http://upload.wikimedia.org/wikipedia/de/d/d6/Fluss-in-Graph-3.png
Folie 48
http://www.mcs.csuhayward.edu/~simon/handouts/4245/figures/hall_fig2
_cropped.jpg
Folien 50 und 51:
Flüsse, Schnitte, bipartite Abbildungen Vortrag im Seminar Hallo
Welt! für Fortgeschrittene (SS 2004), Tobias Limmer, Folien 44 und 45
Flüsse, Schnitte, bipartite Abbildungen
Quellen (die ohne Netzwerk
) (3)
Bilder:
Folien 52 bis 61:
ebd., Folien 33 bis 42
Folien 64 bis 67:
ebd., Folien 50 bis 56
Herzlichen Dank an Tobias Limmer für die bereitgestellten Folienvorlagen!
Flüsse, Schnitte, bipartite Abbildungen
Quellen (die ohne Netzwerk
) (4)
Internet:
http://de.wikipedia.org/wiki/Portal_Graphentheorie
http://www.cs.sunysb.edu/~algorith/major_section/1.4.shtml
http://www.schmittmann-kolleg.unikoeln.de/~hartmut/pub/info/KombinMit.pdf
Literatur:
Graphentheorie Eine anwenderorientierte Einführung, Peter
Tittmann
Diskrete Mathematik, Martin Aigner
Algorithmik, Uwe Schöning
Introduction to Algorithms, T. H. Cormen, C. E. Leiserson, R. L.
Rivest, C. Stein
Programming Challenges, Steven S. Skiena, Miguel E. Revilla
Flüsse, Schnitte, bipartite Abbildungen Vortrag im Seminar Hallo
Welt! für Fortgeschrittene (FAU Erlangen, SS 2004), Tobias Limmer
Graphalgorithmen Vortrag im Seminar Hallo Welt! für
Fortgeschrittene (FAU Erlangen, SS2004), Christian Rieß
Flüsse, Schnitte, bipartite Abbildungen
Zuallerletzt
Für all jene, die bis hierher durchgehalten haben:
Implementierungsbeispiel des Ford-FulkersonAlgorithmus in Java:
Klasse für Kanten:
Flüsse, Schnitte, bipartite Abbildungen
Jetzt ist dann
Der Ford-Fulkerson-Algorithmus selbst:
Flüsse, Schnitte, bipartite Abbildungen
aber wirklich
Prioritätssuche (vgl. Dijkstra-Algorithmus):
This document was created with Win2PDF available at http://www.daneprairie.com.
The unregistered version of Win2PDF is for evaluation or non-commercial use only.
Herunterladen