Flüsse, Schnitte, bipartite Graphen. Martin Oettinger
|
|
- Tristan Schneider
- vor 7 Jahren
- Abrufe
Transkript
1 Flüsse, Schnitte, bipartite Graphen Martin Oettinger
2 Übersicht Einführung Algorithmen für maximalen Fluss Preflow-Push Ford-Fulkerson Spezialfall: Maximaler Fluss bei minimalen Kosten Reduktionen Bipartites Matching Minimaler Schnitt Zusammenfassung 2
3 Einführung
4 Graphennetzwerke Ein Netzwerk besteht aus einem gerichteten Graph G und einer Kapazitätsfunktion c, die jeder Kante (u,v) einen Wert c(u,v) 0 zuordnet Zwei besondere Knoten: Quelle s und Senke t, Material soll von s nach t transportiert werden Beispiele aus der Realität: Rohrleitungssysteme, Warentransportnetze, etc 4
5 Flüsse in Netzwerken Ein Fluss ist eine weitere Funktion, die in einem Netzwerk jeder Kante eine Zahl f(u,v) Є R zuordnet Beispiele aus der Realität: Tatsächliche Auslastung des Rohrleitungssystems, des Warentransportnetzes, etc. an jedem Teilstück 5
6 Eigenschaften von Flüssen Kapazitätsbeschränkung: u,v Є V: f(u,v) c(u,v) (Der Fluss einer Kante darf nicht größer als die Kapazität sein) Flusserhaltung: u Є V \ {s,t}: f(u,v) = 0 (Für alle Knoten außer Quelle und Senke gilt: Summe der eingehenden Flüsse ist genau so groß wie Summe der ausgehenden Flüsse) Flusssymmetrie: u,v Є V: f(u,v) = - f(v,u) (Der Fluss einer Kante ist genau der negative Fluss der Kante der entgegengesetzten Richtung) Der Betrag eines Flusses entspricht dem Wert der Summe der Einzelflüsse, die von der Quelle aus weg- bzw. zur Senke hinführen Ein maximaler Fluss ist ein Fluss mit maximalem Betrag 6
7 Residualgraph Der Residualgraph zu einem Fluss in einem Netzwerk gibt für jede Kante an, um welchen der Wert der Fluss der Kante maximal verändert werden kann, so dass die Kapazitätsbedingung f(u,v) c(u,v) nicht verletzt wird 7
8 Erweiternder Pfad Ein Pfad in einem Residualgraphen, der von der Quelle zur Senke führt, wird erweiternder Pfad genannt Durch diese Pfade kann der Fluss in einem Netzwerk erhöht werden, und zwar um das minimale Gewicht aller Kanten Unser Beispielgraph mit Fluss: Dazu Residualgraph, mit erweiterndem Pfad: Minimales Gewicht der Kanten des Pfades: 2 8
9 Algorithmen für den maximalen Fluss
10 Algorithmus von Ford-Fulkerson Aufgabenstellung: Ermittle zu einem Graphen G eine maximale Flussbelegung Grundsätzliche Algorithmusidee: 1 initialisiere Residualgraph G mit leerem Fluss f 2 solange erweiternder Pfad p von s nach t in G verfügbar 3 wähle erweiternden Pfad p aus 4 erhöhe f um den Flusswert von p 5 aktualisiere Residualgraph G 6 return f; Noch kein richtiger Algorithmus, da Auswahl des erweiternden Pfades nicht festgelegt ist, mehr dazu später 10
11 Ford-Fulkerson-Idee am Beispiel, Initialisierung Anfangs: Leerer Fluss und Graph, welcher bereits dem Residualgraphen entspricht 11
12 Ford-Fulkerson-Idee am Beispiel, 1. Schritt Auswahl eines erweiternden Pfades Aktualisieren des Residualgraphen Minimales Gewicht der Kanten des Pfades: 4 Aktualisieren der Flussfunktion 12
13 Ford-Fulkerson-Idee am Beispiel, 2. Schritt Auswahl eines erweiternden Pfades Aktualisieren des Residualgraphen Minimales Gewicht der Kanten des Pfades: 6 Aktualisieren der Flussfunktion 13
14 Ford-Fulkerson-Idee am Beispiel, 3. Schritt Auswahl eines erweiternden Pfades Aktualisieren des Residualgraphen Minimales Gewicht der Kanten des Pfades: 1 Aktualisieren der Flussfunktion 14
15 Ford-Fulkerson-Idee am Beispiel, Abschluss Nun lässt sich kein erweiternder Pfad mehr finden: Damit hat man einen maximalen Fluss gefunden: Der Betrag des Flusses ist 11, (Abzulesen an Quelle bzw. Senke) 15
16 Ford-Fulkerson-Idee: Auswahltechnik des Pfades Laufzeit des Algorithmus ist abhängig von der Art, wie man den erweiternden Pfad auswählt Überlegung: Tiefensuche Problem hierbei: Im Worst-case-Szenario werden stets Pfade mit niedriger Kapazität ausgewählt: Befindet sich hier z.b. immer die Kante mit dem Gewicht 1 im erweiternden Pfad, benötigt der Algorithmus 200 Durchläufe, bis es keinen Pfad mehr gibt und somit der maximale Fluss gefunden ist Daraus ergibt sich eine Laufzeit von O(E* maximalerfluss ) Angepasste Breitensuche (Edmonds-Karp-Strategie) Es wird immer der erweiternde Pfad mit der niedrigsten Anzahl an Kanten ausgewählt; damit ist der maximale Fluss im Beispiel in 2 Schritten gefunden Laufzeit: O(V*E²) (Beweis siehe Cormen) Implementierung siehe Wiki 16
17 Preflow-push-Algorithmen Arbeiten auch auf Residualgraphen Im Gegensatz zu Ford-Fulkerson werden keine erweiternden Pfade von der Quelle zur Senke gesucht, sondern der Fluss der einzelnen Kanten wird schrittweise lokal erhöht, ausgehend von der Quelle Jeder Knoten wird als Reservoir angesehen, das temporär unendlich viel Fluss aufnehmen kann, bis er in einem nächsten Schritt zu einem anderen Knoten geleitet wird, möglicher Weise auch zurück Richtung Quelle Knoten haben unterschiedliche Höhen Ist bei einem Knoten der Zufluss ungleich dem Abfluss, so ist dieser aktiv Zwei wesentliche Operationen auf aktiven Knoten Push: Fluss zu einem neuen Knoten ableiten, welcher genau um eine Höheneinheit niedriger sein muss Relabel: Das Niveau des aktuellen Knotens erhöhen, um dann evtl. push anwenden zu können 17
18 Preflow-push-Algorithmen Zwei Varianten Goldbergs generischer Push-relabel-Algorithmus Verwaltung der Knoten mit Überfluss in einer Warteschlange Grundidee: Solange bei einem Knoten angestauter Fluss existiert, gibt es eine Pushoder Relabel-Möglichkeit Genaue Abfolge von Push und Relabel nicht näher spezifiziert Relabel-to-front Weiterentwicklung von Push-relabel Verwaltung einer Liste aller Knoten, auch derer ohne angestauten Fluss 18
19 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 19
20 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 20
21 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 21
22 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 22
23 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 23
24 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 24
25 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 25
26 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 26
27 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 27
28 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 28
29 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 29
30 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 30
31 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 31
32 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 32
33 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 33
34 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 34
35 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 35
36 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 36
37 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 37
38 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 38
39 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 39
40 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 40
41 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 41
42 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 42
43 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 43
44 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 44
45 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 45
46 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 46
47 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 47
48 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 48
49 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 49
50 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 50
51 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 51
52 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 52
53 Push-relabel-Algorithmus am Beispiel Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 53
54 Push-relabel-Algorithmus am Beispiel Der Betrag des Flusses ist 11, (Abzulesen an Quelle bzw. Senke) Rot umrandete Knoten: Aktive Knoten Rosa gefärbter Knoten: Ausgewählter Knoten, dessen gestauter Fluss abgeleitet werden soll Beschriftung der Knoten: <Gestauter Fluss> <aktuelle Höhe> 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere leere Warteschlange w 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 nimm den vordersten Knoten k aus w 8 solange für k Zufluss ungleich Abfluss 9 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 11 erhöhe f um den Flusswert von (k,u) 12 aktualisiere Residualgraph G 13 setze u an das Ende von w, falls nicht schon enthalten 14 ansonsten 15 steigere die Höhe von k, bis es Kante(k,u) mit h(k) = h(u) + 1 gibt 16 gib f zurück 54
55 Relabel-to-front-Algorithmus Unterschiede zu Push-relabel rot dargestellt: 1 initialisiere Residualgraph G mit leerem Fluss f 2 setze Höhenfunktion h für alle Knoten auf 0 3 setze h(s) = V, h(t) = 0 4 initialisiere Warteschlange w Liste aller Knoten L 5 leite Fluss von s ab, unabhängig von h 6 solange w nicht leer ist 7 solange L Knoten mit angestautem Fluss enthält 8 nimm den vordersten Knoten k aus w 9 nimm den vordersten Knoten mit angestautem Fluss k 10 speichere die Höhe von k zwischen 11 solange für k Zufluss ungleich Abfluss 12 wenn es Kante (k,u) gibt mit h(k) = h(u) leite überzähligen Fluss über (k,u) an u ab 14 erhöhe f um den Flusswert von (k,u) 15 aktualisiere Residualgraph G 16 setze u an das Ende von w, falls nicht schon enthalten 17 ansonsten 18 steigere die Höhe von k, bis es Kante (k,u) mit h(k) = h(u) + 1 gibt 19 falls sich die Höhe von k gegenüber Zeile 10 geändert hat, setze k an den 20 Anfang von L 21 gib f zurück Implementierung siehe Wiki 55
56 Algorithmen für den maximalen Fluss, Laufzeitvergleich Algorithmus Ford-Fulkerson Ford-Fulkerson mit Preflow-Push, Preflow-Push, mit Tiefensuche Edmonds-Karp- Strategie Goldbergs generischer Push- Relabel-to-front- Weiterentwicklung relabel-algorithmus Laufzeit O(E* f ) O(V*E²) O(V²*E) O(V³), bei dicht f = maximaler Fluss besetzten Graphen asymptotisch mindestens so gut wie Push-relabel Bemerkung In der Praxis Geeignet für dünn Geeignet für dicht irrelevant besetzte besetzte Netzwerke Netzwerke V: Anzahl der Knoten, E: Anzahl der Kanten 56
57 Maximaler Fluss bei minimalen Kosten (1) Erweiterung des Graphennetzwerks um eine Kostenfunktion, die jeder Kante eine natürliche Zahl zuordnet Gesucht ist nun nach dem maximalen Fluss bei minimalen Kosten Beschriftung der Kanten: <Fluss>/<Kapazität>/<Kosten pro Flusseinheit> Durch diese Kante verursachte Kosten: 3 * 20 = 60 Zugehöriger Residualgraph; Beschriftung: <Fluss>/<Kosten pro Flusseinheit> 57
58 Maximaler Fluss bei minimalen Kosten (2) Beispiel: Maximaler Fluss, jedoch noch nicht minimale Kosten Kosten des Flusses: 7*2 + 6*20 + 5*3 + 6*1 + 4*1 + 4*2 + 1*5 + 1*3 + 2*2 = 179 Zugehöriger Residualgraph 58
59 Maximaler Fluss bei minimalen Kosten (3) Ein negativer Kostenzyklus im Residualgraphen ist ein Kreis, bei dem die Summe aller Produkte aus Fluss und zugehörigen Kosten der beteiligten Kanten negativ ist Beispiel: Kosten des Zyklus: 6 * * * (-20) = -60 Durch das gleichmäßige Verändern des Flusses aller an einem Zyklus beteiligten Kanten verändert sich der globale Betrag des Flusses nicht, die Kosten oft jedoch schon 59
60 Maximaler Fluss bei minimalen Kosten (4) Beispiel Maximal mögliche Flussveränderung: 6 Veränderung des Flusses um den Wert 6: 60
61 Maximaler Fluss bei minimalen Kosten (5) Zum Residualgraphen gehörige <Fluss>/<Kapazität>/<Kosten>-Funktionen: Kosten des neuen Flusses: 7*2 + 0*20 + 5*3 + 6*1 + 4*1 + 4*2 + 7*5 + 7*3 + 2*2 = 107 Um 72 Einheiten billiger als der ursprüngliche 61
62 Maximaler Fluss bei minimalen Kosten (6) Naheliegender Algorithmus (Negative Zyklen lassen sich mit den Algorithmen von Bellman-Ford oder Floyd finden) 1 berechne maximalen Fluss 2 solange es im Residualgraphen G einen negativen Kostenzyklus mit 3 minimalem Kantengewicht w gibt 4 erhöhe f um den Flusswert von w 5 aktualisiere Residualgraph G 6 return f; Weitere Algorithmen zur Bestimmung des maximalen Flusses bei minimalen Kosten:
63 Reduktionen
64 Reduktionen Problem: Ford-Fulkerson und Preflow-Push lassen sich nur auf Netzwerke mit bestimmten Eigenschaften anwenden Knoten dürfen keine Kapazitätsbeschränkung haben Kanten müssen gerichtet sein Es darf nur eine Quelle und eine Senke geben Einführung Algorithmen für den maximalen Fluss Reduktionen Minimaler Schnitt Maximaler Schnitt bei minimalen Kosten 64
65 Reduktionen, Beispiel Was macht man nun in folgendem Fall, um den maximalen Fluss zu berechnen? 65
66 Reduktionen, Beispiel Was macht man nun in folgendem Fall, um den maximalen Fluss zu berechnen? Knoten, Quellen und Senken mit Kapazitätsbeschränkung: Zwischenknoten mit Kante einführen, welche die Kapazität begrenzt 66
67 Reduktionen, Beispiel Was macht man nun in folgendem Fall, um den maximalen Fluss zu berechnen? Knoten, Quellen und Senken mit Kapazitätsbeschränkung: Zwischenknoten mit Kante einführen, welche die Kapazität begrenzt Ungerichtete Kanten durch zwei Kanten in beide Richtungen ersetzen, Kapazität übernehmen 67
68 Reduktionen, Beispiel Was macht man nun in folgendem Fall, um den maximalen Fluss zu berechnen? Knoten, Quellen und Senken mit Kapazitätsbeschränkung: Zwischenknoten mit Kante einführen, welche die Kapazität begrenzt Ungerichtete Kanten durch zwei Kanten in beide Richtungen ersetzen, Kapazität übernehmen Mehreren Quellen/Senken: Masterquelle bzw. Senke einführen, die die bisherigen Quellen bzw. Senken mit unendlicher Kapazität versorgt 68
69 Bipartites Matching
70 Bipartite Graphen Ein Graph heißt bipartit, falls sich die Knoten in zwei disjunkte Mengen A und B aufteilen lassen, so dass es keine Kanten zwischen Knoten aus A und Knoten aus B gibt 70
71 Maximales bipartites Matching (1) Ein Matching ist eine Untermenge der Kanten M Є E, so dass für alle Knoten vє V höchstens eine Kante aus M mit v verbunden ist Bei einem maximalen Matching ist M, also die Menge der aktiven Kanten, maximal 71
72 Maximales bipartites Matching (2) Anwendbar auf vielfältige Problemstellungen: Tanzpaarbildung, Arbeitsverteilung von Maschinen etc. Lösung: Umformung des bipartiten Graphen in ein Flussnetzwerk, anschließend Suche nach dem maximalen Fluss Hinzufügen von Quelle und Senke Verbinden der ersten Knotenmenge mit der Quelle, der zweiten mit der Senke Ersetzen der ungerichteten Kanten durch gerichtete mit der Kapazität 1, welche von der ersten Knotenmenge in die zweite zeigen 72
73 Maximales bipartites Matching (3) Darstellung des entstandenen Flussnetzes: 73
74 Maximales bipartites Matching, Beispielaufgabe (1) Aufgabenstellung Gegeben ist ein Schachbrett, bei dem jedoch manche Felder ausgespart sind Aggressive, unbewegliche Monster können auf den Feldern platziert werden Ein Monster kann nur auf andere Monster, welche sich in der selben Reihe oder Spalte befinden, Schüsse abgeben Ausgesparte Felder können nicht mit Monstern besetzt werden, stellen aber für den Angriff kein Hindernis dar Gesucht ist eine maximal mögliche Besetzung des Schachbretts mit Monstern, ohne dass es zu Schusswechseln kommt 74
75 Maximales bipartites Matching, Beispielaufgabe (2) Wie findet man nun algorithmisch eine maximale Belegung? Überlegung: Jede Zeile bzw. Spalte muss genau einmal besetzt werden, sofern sie nicht nur Löcher enthält 75
76 Maximales bipartites Matching, Beispielaufgabe (2) Wie findet man nun algorithmisch eine maximale Belegung? Überlegung: Jede Zeile bzw. Spalte muss genau einmal besetzt werden, sofern sie nicht nur Löcher enthält Lösung: Darstellung des Schachbretts als bipartiten Graphen Zwei disjunkte Knotenmengen: Zeilen und Spalten Eine Kante zwischen dem Knoten i und j steht für ein potentiell besetzbares Feld (i,j) auf dem Schachbrett 76
77 Maximales bipartites Matching, Beispielaufgabe (3) Berechnung eines maximalen Matchings mittels des maximalen Flusses (alle Kanten haben die Kapazität 1) Anhand der Kanten, die Teil eines maximalen Matchings sind, lassen sich nun die Positionen der Monster ablesen 77
78 Minimaler Schnitt
79 Schnitte Ein S-T-Schnitt ist eine Aufteilung der Knoten in zwei Mengen S und T, so dass gilt: s Є S, t Є T Auf dem Weg zwischen zwei Knoten einer der Mengen dürfen nur Knoten der selben Menge liegen (Die Mengen müssen zusammenhängend sein) Die Kapazität eines Schnittes ist definiert als die Summe der Kapazitäten der Kanten, welche Knoten aus S mit Knoten aus T verbinden Der Fluss eines Schnittes ist die Summe der Flüsse von S nach T, abzüglich derer von T nach S Kapazität des Schnittes: = 50 Fluss des Schnittes: = 5 Ein minimaler S-T-Schnitt ist ein Schnitt mit minimaler Kapazität Einführung Algorithmen für den maximalen Fluss Reduktionen Bipartites Matching Minimaler Schnitt Zusammenfassung 79
80 Max-Flow Min-Cut Theorem Die Kapazität eines minimalen S-T-Schnitts ist gleich dem maximalen Fluss in einem Netzwerk Der maximale Durchfluss wird also genau durch die Flaschenhalskanten im Netzwerk limitiert, diese sind natürlich bei maximaler Flussbelegung voll ausgelastet, daher entspricht deren Kapazität dem maximalen Fluss Kapazität des minimalen Schnittes: 11 Einführung Algorithmen für den maximalen Fluss Reduktionen Bipartites Matching Minimaler Schnitt Zusammenfassung 80
81 Minimaler Schnitt Der Betrag eines minimalen Schnittes lässt sich einfach über den maximalen Fluss ermitteln Wie findet man jedoch die Kanten, durch die der Schnitt verläuft? Eine Zerlegung der Menge der Knoten in vor und nach dem Schnitt lässt sich finden, indem man im Residualgraphen nachdem der maximale Fluss ermittelt wurde - alle von s aus noch erreichbaren Knoten auswählt Einführung Algorithmen für den maximalen Fluss Reduktionen Bipartites Matching Minimaler Schnitt Zusammenfassung 81
82 Zusammenfassung Durch Graphennetzwerke kann man verschiedene Flussprobleme aus der Realität darstellen Algorithmen zur Ermittlung des maximalen Flusses Ford-Fulkerson-Varianten Preflow-push-Varianten Berechnung des maximalen Flusses bei minimalen Kosten Mittels einfacher Reduktionen kann man auch Graphennetzwerke mit mehreren Quellen, Senken oder Knotenkapazitäten algorithmisch handhaben Maximales bipartites Matching lässt sich in ein Flussproblem verwandeln Ein minimaler Schnitt lässt sich leicht ermitteln, sobald ein maximaler Fluss bekannt ist 82
83 Quellen Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms Saake, Sattler: Algorithmen und Datenstrukturen Seminarvortrag Flüsse, Schnitte, bipartite Abbildungen 2007, Thomas Fersch Seminarvortrag Flüsse, Schnitte, bipartite Abbildungen 2006, Adrian Merkel Topcoder Tutorials:
84 Noch Fragen? 84
Flüsse, Schnitte, bipartite Graphen
Flüsse, Schnitte, bipartite Graphen Thomas Fersch mail@t-fersch.de 11.06.2010 Seminar "Hallo Welt!" für Fortgeschrittene 1 Übersicht Maximale Flüsse in Netzwerken Worum geht s? Lösung nach Ford-Fulkerson
MehrFlüsse, Schnitte, bipartite Graphen
Flüsse, chnitte, bipartite Graphen Matthias Hoffmann 5.5.009 Matthias Hoffmann Flüsse, chnitte, bipartite Graphen 5.5.009 / 48 Übersicht Einführung Beispiel Definitionen Ford-Fulkerson-Methode Beispiel
MehrFlüsse, Schnitte, Bipartite Graphen
Flüsse, Schnitte, Bipartite Graphen Sebastian Hahn 4. Juni 2013 Sebastian Hahn Flüsse, Schnitte, Bipartite Graphen 4. Juni 2013 1 / 48 Überblick Flussnetzwerke Ford-Fulkerson-Methode Edmonds-Karp-Strategie
MehrFlüsse in Netzwerken. Seminar über Algorithmen SoSe 2005. Mike Rohland & Julia Schenk
Flüsse in Netzwerken Seminar über Algorithmen SoSe 2005 Mike Rohland & Julia Schenk Inhalt Einführung Definition Maximale Flüsse Schnitte Restgraphen Zunehmende Wege Max-Fluss Min-Schnitt Theorem Ford-Fulkerson
MehrADS: Algorithmen und Datenstrukturen 2
ADS: Algorithmen und Datenstrukturen 2 Teil 7 Prof. Dr. Gerhard Heyer Institut für Informatik Abteilung Automatische Sprachverarbeitung Universität Leipzig 2. Mai 2018 [Letzte Aktualisierung: 2/05/2018,
MehrFlüsse in Netzwerken
Proseminar Theoretische Informatik, Prof. Wolfgang Mulzer, SS 17 Flüsse in Netzwerken Zusammenfassung Gesa Behrends 24.06.2017 1 Einleitung Unterschiedliche technische Phänomene wie der Flüssigkeitsdurchfluss
MehrKlausurvorbereitung. 1 Zentrale Begriffe. 2 Bipartite Graphen. 2.1 Begriffe. Vorlesung Graphen und Optimierung Sommersemester 2011 Prof. S.
Vorlesung Graphen und Optimierung Sommersemester 2011 Prof. S. Lange Klausurvorbereitung Hier finden Sie alle Begriffe, Zusammenhänge und Algorithmen, die mit Blick auf die Klausur relevant sind. Um es
MehrWiederholung zu Flüssen
Universität Konstanz Methoden der Netzwerkanalyse Fachbereich Informatik & Informationswissenschaft SS 2008 Prof. Dr. Ulrik Brandes / Melanie Badent Wiederholung zu Flüssen Wir untersuchen Flüsse in Netzwerken:
MehrAlgorithmentechnik - U bung 3 4. Sitzung Tanja Hartmann 03. Dezember 2009
Algorithmentechnik - U bung 3 4. Sitzung Tanja Hartmann 03. Dezember 2009 I NSTITUT F U R T HEORETISCHE I NFORMATIK, P ROF. D R. D OROTHEA WAGNER KIT Universita t des Landes Baden-Wu rttemberg und nationales
MehrAlgorithmen und Datenstrukturen Kapitel 10
Algorithmen und Datenstrukturen Kapitel 10 Flüsse Frank Heitmann heitmann@informatik.uni-hamburg.de 6. Januar 2016 Frank Heitmann heitmann@informatik.uni-hamburg.de 1/8 Flüsse Graphen Grundlagen Definition
MehrEffiziente Algorithmen I
9. Präsenzaufgabenblatt, WiSe 2013/14 Übungstunden am 13.01. & 15.01.2014 Aufgabe Q Gegeben sei ein Fluss-Netzwerk mit Digraph D = (V, A), Knotenkapazitäten c(u, v) 0, Quelle s und Senke t. Kann sich der
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen 2 Sommersemester 2006 5. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Wdhlg.: Dijkstra-Algorithmus I Bestimmung der
MehrFlüsse und Schnitte von Graphen
Flüsse und Schnitte von Graphen Christian Koch Friedrich-Alexander-Universität Erlangen-Nürnberg 2. Juni 27 Christian Koch Flüsse und Schnitte 2. Juni 27 / 29 Gliederung Flüsse Allgemeines Maximaler Fluss
MehrKapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung
Gliederung der Vorlesung 1. Grundbegriffe. Elementare Graphalgorithmen und Anwendungen 3. Kürzeste Wege 4. Minimale spannende Bäume 5. Färbungen und Cliquen 6. Traveling Salesman Problem 7. Flüsse in Netzwerken
MehrBipartite Graphen. Beispiele
Bipartite Graphen Ein Graph G = (V, E) heiÿt bipartit (oder paar), wenn die Knotenmenge in zwei disjunkte Teilmengen zerfällt (V = S T mit S T = ), sodass jede Kante einen Knoten aus S mit einem Knoten
MehrAnwendungen von Netzwerkfluss. Wojciech Polcwiartek Institut für Informatik FU Berlin
Anwendungen von Netzwerkfluss Wojciech Polcwiartek Institut für Informatik FU Berlin 13. 01. 2009 Gliederung Einführung Netzwerk, Fluss und Schnitt Max-Flow-Min-Cut Theorem Algorithmen zum Bestimmen vom
MehrAlgorithmik WS 07/ Vorlesung, Andreas Jakoby Universität zu Lübeck. 10 Matching-Probleme
10 Matching-Probleme 10.1 Definition von Matching-Probleme Definition 21 [2-dimensionales Matching] Sei G = (V, E) ein ungerichteter Graph und E E. E ist ein Matching, wenn für alle Kantenpaare e 1, e
Mehr1.Aufgabe: Minimal aufspannender Baum
1.Aufgabe: Minimal aufspannender Baum 11+4+8 Punkte v 1 v 2 1 3 4 9 v 3 v 4 v 5 v 7 7 4 3 5 8 1 4 v 7 v 8 v 9 3 2 7 v 10 Abbildung 1: Der Graph G mit Kantengewichten (a) Bestimme mit Hilfe des Algorithmus
MehrKapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung
Gliederung der Vorlesung. Fallstudie Bipartite Graphen. Grundbegriffe. Elementare Graphalgorithmen und Anwendungen. Minimal spannende Bäume. Kürzeste Pfade. Traveling Salesman Problem. Flüsse in Netzwerken
MehrSatz 324 Sei M wie oben. Dann gibt es für ein geeignetes k Konstanten c i > 0 und Permutationsmatrizen P i, i = 1,...
Satz 324 Sei M wie oben. Dann gibt es für ein geeignetes k Konstanten c i > 0 und Permutationsmatrizen P i, i = 1,..., k, so dass gilt M = k c i P i i=1 k c i = r. i=1 Diskrete Strukturen 7.1 Matchings
MehrInhalt. 1. Flußprobleme. 2. Matching. 3. Lineares Programmieren. 4. Ganzzahliges Programmieren. 5. NP-Vollständigkeit. 6. Approximationsalgorithmen
Effiziente Algorithmen Einführung 1 Inhalt 1. Flußprobleme 2. Matching. Lineares Programmieren 4. Ganzzahliges Programmieren 5. NP-Vollständigkeit 6. Approximationsalgorithmen 7. Backtracking und Branch-and-Bound
Mehrij. , d (k 1) + d (k 1)
Dabei war ja die Idee, dass wir unser k Schritt für Schritt erhöhen bis wir bei n angekommen sind, denn dann haben wir das Problem gelöst. Dies ist im Grunde unser Algorithmus. Wir müssen diesen nur noch
MehrKapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung
Gliederung der Vorlesung. Fallstudie Bipartite Graphen. Grundbegriffe 3. Elementare Graphalgorithmen und Anwendungen 4. Minimal spannende Bäume 5. Kürzeste Pfade 6. Traveling Salesman Problem 7. Flüsse
MehrKlausur zum Modul Einführung in die Diskrete Mathematik
Klausur zum Modul Einführung in die Diskrete Mathematik 11.2.2014 Aufgabe 1 [10 Punkte] Sei G ein ungerichteter Graph, k N und x, y, z V (G). Zeigen Sie: Gibt es k paarweise kantendisjunkte x-y-wege und
MehrDatenstrukturen & Algorithmen
Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Graphenalgorithmen Maximaler Fluss Einleitung Flussnetzwerke Ford-Fulkerson Fulkerson Methode Maximales bipartites Matching
MehrKapitel 1: Flussalgorithmen
Netzwerke und Flüsse Ein Flussnetzwerk ist ein gerichteter Graph G = (V, E, c) mit zwei ausgewählten Knoten q, s V und einer Kapazitätsfunktion c : E N 0. Die Quelle q hat Eingangsgrad 0 und die Senke
MehrAnwendungen von Netzwerkfluss
Anwendungen von Netzwerkfluss Berlin, 13. 01. 2009 Wojciech Polcwiartek Institut für Informatik FU Berlin 1. Einführung/ Definitionen Modellieren der Probleme mit Hilfe von Netzwerken und Flüssen in den
MehrFerienkurs zur algorithmischen diskreten Mathematik Kapitel 4: Flüsse
Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4: Flüsse Dipl-Math. Wolfgang Kinzner 3.4.2012 Kapitel 4: Flüsse Flüsse Netzwerk, Fluss, s,t-schnitt, Kapazität MaxFlow-MinCut-Theorem Restnetzwerk
MehrBipartites Matching. Gegeben: Ein bipartiter, ungerichteter Graph (V 1, V 2, E). Gesucht: Ein Matching (Paarung) maximaler Kardinalität.
Netzwerkalgorithmen Bipartites Matching (Folie 90, Seite 80 im Skript) Gegeben: Ein bipartiter, ungerichteter Graph (V, V, E). Gesucht: Ein Matching (Paarung) maximaler Kardinalität. Ein Matching ist eine
MehrGraphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47
Graphalgorithmen Dominik Paulus.0.01 Dominik Paulus Graphalgorithmen.0.01 1 / 7 1 Spannbäume Kruskal Prim Edmonds/Chu-Liu Datenstrukturen Fibonacci-Heap Union/Find Kürzeste Pfade Dijkstra Bellman-Ford
MehrAlgorithmische Graphentheorie
Algorithmische Graphentheorie Vorlesung 13: Flüsse und Zuordnungen Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca csacarea@cs.ubbcluj.ro 9. Juni 2017 DURCHSATZ D(e) ist die maximale Flussmenge,
Mehr12. Graphen Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013
12. Graphen Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen Graphen Graphenalgorithmen 2
MehrSeminar über aktuelle Forschungsthemen in der Algorithmik, Dozent Prof. Dr. Alt;
Seminar über aktuelle Forschungsthemen in der Algorithmik, Dozent Prof. Dr. Alt Referent Matthias Rost 1 Einleitung Definitionen Maximaler Dynamischer Fluss Algorithmus von Ford-Fulkerson Techniken zur
MehrName:... Vorname:... Matr.-Nr.:... Studiengang:...
Technische Universität Braunschweig Sommersemester 2013 IBR - Abteilung Algorithmik Prof. Dr. Sándor P. Fekete Dr. Christiane Schmidt Stephan Friedrichs Klausur Netzwerkalgorithmen 16.07.2013 Name:.....................................
MehrKapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung
Gliederung der Vorlesung. Grundbegriffe. Elementare Graphalgorithmen und Anwendungen 3. Kürzeste Wege 4. Minimale spannende Bäume 5. Färbungen und Cliquen 6. Traveling Salesman Problem 7. Flüsse in Netzwerken
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Graphen (2) Spannbäume Kürzeste Wege Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 455 Wiederholung Traversierung eines Graphen via Tiefendurchlaufs
MehrVery simple methods for all pairs network flow analysis
Very simple methods for all pairs network flow analysis obias Ludes 0.0.0. Einführung Um den maximalen Flusswert zwischen allen Knoten eines ungerichteten Graphen zu berechnen sind nach Gomory und Hu nur
MehrZählen perfekter Matchings in planaren Graphen
Zählen perfekter Matchings in planaren Graphen Kathlén Kohn Institut für Mathematik Universität Paderborn 25. Mai 2012 Inhaltsverzeichnis Motivation Einführung in Graphentheorie Zählen perfekter Matchings
MehrFLÜSSE, SCHNITTE UND - TEIL 2 - BIPARTITE GRAPHEN. Vortrag im Seminar Hallo Welt Für Fortgeschrittene Dozenten: Werth, T. & Brinkers, D.
FLÜSSE, SCHNITTE UND BIPARTITE GRAPHEN - TEIL 2 - Vortrag im Seminar Hallo Welt Für Fortgeschrittene Dozenten: Werth, T. & Brinkers, D. Lukas Dresel 17. Juni 215 Inhalt Problemstellung Lösungsmethode 1
Mehr8.4 Digraphen mit negativen Kantengewichten Grundsätzliches Betrachte Startknoten s und einen Kreis C mit Gesamtlänge < 0.
8.4 Digraphen mit negativen Kantengewichten 8.4.1 Grundsätzliches Betrachte Startknoten s und einen Kreis C mit Gesamtlänge < 0. k 4 5 1 s 1 3 2 C k 0 k 3 1 1 1 k 1 k 2 v Sollte ein Pfad von s nach C und
MehrGraphdurchmusterung, Breiten- und Tiefensuche
Prof. Thomas Richter 18. Mai 2017 Institut für Analysis und Numerik Otto-von-Guericke-Universität Magdeburg thomas.richter@ovgu.de Material zur Vorlesung Algorithmische Mathematik II am 18.05.2017 Graphdurchmusterung,
Mehr11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME
Algorithmen und Datenstrukturen 11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME Algorithmen und Datenstrukturen - Ma5hias Thimm (thimm@uni-koblenz.de) 1 Algorithmen und Datenstrukturen 11.1. BERECHNUNG MAXIMALER FLÜSSE
MehrFortgeschrittene Netzwerk- und Graph-Algorithmen
Fortgeschrittene Netzwerk- und Graph-Algorithmen Dr. Hanjo Täubig Lehrstuhl für Eziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Wintersemester 2007/08
MehrEinführung in die Mathematik des Operations Research
Universität zu Köln Mathematisches Institut Prof. Dr. F. Vallentin Einführung in die Mathematik des Operations Research Sommersemester 3 en zur Klausur (7. Oktober 3) Aufgabe ( + 3 + 5 = Punkte). Es sei
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Teil 10 Suche in Graphen Version vom 13. Dezember 2016 1 / 2 Vorlesung 2016 / 2017 2 /
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Graphen 9/1 Begriffsdefinitionen Ein Graph besteht aus Knoten und Kanten. Ein Knoten(Ecke) ist ein benanntes Objekt. Eine Kante verbindet zwei Knoten. Kanten haben ein Gewicht
MehrTechnische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen
Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 Übungsblatt 4 für die Übung
MehrAlgorithmen & Komplexität
Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik steger@inf.ethz.ch Kürzeste Pfade Problem Gegeben Netzwerk: Graph G = (V, E), Gewichtsfunktion w: E N Zwei Knoten: s, t Kantenzug/Weg
Mehr4.7 Der Algorithmus von Dinic für maximalen Fluss
4.7 Der Algorithmus von Dinic für maximalen Fluss Wir kennen bereits den Algorithmus von Ford Fulkerson zur Suche nach einem maximalen Fluss in einem Graphen. Wir lernen nun einen Algorithmus für maximalen
MehrFlüsse, Schnitte, bipartite Graphen
Flüsse, Schnitte, bipartite Graphen Vlad Popa 08.06.2010 Inhaltsverzeihnis 1. Flussnetzwerke und Flüsse 1.1 Ford- Fulkerson 1.2 Edmond Karp 1.3 Dinic 2. Schnitte 3. Maximaler Fluss bei minimalen Kosten
MehrDatenstrukturen und Algorithmen (SS 2013)
Datenstrukturen und Algorithmen (SS 2013) Übungsblatt 10 Abgabe: Montag, 08.07.2013, 14:00 Uhr Die Übungen sollen in Gruppen von zwei bis drei Personen bearbeitet werden. Schreiben Sie die Namen jedes
MehrFlüsse und Zuordnungen. Kapitel 6. Peter Becker (H-BRS) Graphentheorie Wintersemester 2018/ / 296
Kapitel 6 Peter Becker (H-BRS) Graphentheorie Wintersemester 2018/19 227 / 296 Inhalt Inhalt 6 Flussnetzwerke Berechnung maximaler Flüsse Max-Flow-Min-Cut Matchings Peter Becker (H-BRS) Graphentheorie
MehrSCHNITTERHALTUNG (SPEKTRALE APPROXIMATION)
Vorlesung 12 AUSDÜNNUNG VON GRAPHEN SCHNITTERHALTUNG (SPEKTRALE APPROXIMATION) 387 Wiederholung: Approximative Schnitterhaltung Ziel: Approximationsalgorithmus: A(S(G)) Ziele bei Eingabe eines dichten
MehrLaufzeit. Finden eines Matchings maximaler Kardinalität dauert nur O( E min{ V 1, V 2 }) mit der Ford Fulkerson Methode.
Effiziente Algorithmen Flußprobleme 81 Laufzeit Finden eines Matchings maximaler Kardinalität dauert nur O( E min{ V 1, V 2 }) mit der Ford Fulkerson Methode. Der Fluß ist höchstens f = min{ V 1, V 2 }.
MehrLösungshinweise 3 Vorlesung Algorithmentechnik im WS 08/09
Institut für Theoretische Informatik Lehrstuhl Prof. Dr. D. Wagner Lösungshinweise Vorlesung Algorithmentechnik im WS 08/09 Problem : Kreuzende Schnitte Zwei Schnitte (S, V \ S) und (T, V \ T ) in einem
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen Lerneinheit : Kürzeste Pfade in Graphen Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester 016.6.01 Einleitung Diese Lerneinheit beschäftigt
MehrAlgorithmische Graphentheorie
Algorithmische Graphentheorie Sommersemester 204 4. Vorlesung Matchings / Paarungen Kombinatorische Anwendungen des Max-Flow-Min-Cut-Theorems Prof. Dr. Alexander Wolff 2 Paarungen (Matchings) Def. Sei
Mehrmaximaler Fluss & minimaler Schnitt
maximaler Fluss & minimaler Schnitt Referat in angewandte Logistik Marcus Pottendorfer HTBLuVA Sankt Pölten Inhalt Maximaler Fluss minimaler Schnitt... 2 Grundbegriffe... 2 Erklärung... 2 Minimaler Schnitt...
Mehrlässt sich auch ableiten, dass es einen augmentierenden Pfad der Länge höchstens
Praktikum Algorithmen-Entwurf (Teil 5)..5 Matchings in Graphen Es sei ein ungerichteter Graph G = (V, E) gegeben. Ein Matching in G ist eine Teilmenge M E, so dass keine zwei Kanten aus M einen Endpunkt
MehrKAPITEL 3 MATCHINGS IN BIPARTITEN GRAPHEN
KAPITEL 3 MATCHINGS IN BIPARTITEN GRAPHEN F. VALLENTIN, A. GUNDERT 1. Definitionen Notation 1.1. Ähnlich wie im vorangegangenen Kapitel zunächst etwas Notation. Wir beschäftigen uns jetzt mit ungerichteten
MehrKombinatorische Optimierung
Juniorprof. Dr. Henning Meyerhenke 1 Henning Meyerhenke: KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Vorlesung 9 Programm: Übungsblatt
MehrTrennender Schnitt. Wie groß kann der Fluss in dem folgenden Flussnetzwerk höchstens sein?
6. Flüsse und Zuordnungen max-flow min-cut Trennender Schnitt Wie groß kann der Fluss in dem folgenden Flussnetzwerk höchstens sein? a e s c d t b f Der Fluss kann nicht größer als die Kapazität der der
MehrKapitel 8: Bipartite Graphen Gliederung der Vorlesung
Gliederung der Vorlesung 1. Grundbegriffe. Elementare Graphalgorithmen und Anwendungen 3. Kürzeste Wege 4. Minimale spannende Bäume 5. Färbungen und Cliquen 6. Traveling Salesman Problem 7. Flüsse in Netzwerken
MehrGliederung. Kapitel 4. Lokale Suchverfahren. Meta-Heuristiken. Simulated Annealing. Lokale Suchverfahren. Optimierungsalgorithmen
Kapitel Optimierungsalgorithmen Gunnar Klau Institut für Computergraphik und Algorithmen Gliederung Kombinatorische vs. Ganzzahlige Optimierung Exakte Verfahren Branch-and-Bound Schnittebenenverfahren
MehrFortgeschrittene Netzwerk- und Graph-Algorithmen
Fortgeschrittene Netzwerk- und Graph-Algorithmen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Wintersemester
MehrEin Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist.
Graphen Definition: Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist. Begriffe: Gerichteter Graph: Alle Kanten haben eine Richtung vom Anfangsknoten
MehrWie wird ein Graph dargestellt?
Wie wird ein Graph dargestellt? Für einen Graphen G = (V, E), ob gerichtet oder ungerichtet, verwende eine Adjazenzliste A G : A G [i] zeigt auf eine Liste aller Nachbarn von Knoten i, wenn G ungerichtet
MehrEffiziente Algorithmen und Datenstrukturen II
Effiziente Algorithmen und Datenstrukturen II Prof. Dr. Christian Scheideler Technische Universität München, 25. April 2006 1 Algorithmen für maximale Flüsse 1.1 Flüsse Ein Flussnetzwerk G = (V, E) ist
MehrVery simple methods for all pairs network flow analysis
Very simple methods for all pairs network flow analysis Tobias Ludes 02.07.07 Inhalt Einführung Algorithmen Modifikation der Gomory-Hu Methode Einführung Nach Gomory-Hu nur n-1 Netzwerk-Fluss- Berechnungen
MehrHelmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich. Graphen (2)
Graphen (2) 1 Topologisches Sortieren (1) Die Kanten eines gerichteten zyklenfreien Graphen bilden eine Halbordnung (die Ordnungsrelation ist nur für solche Knoten definiert die am gleichen Pfad liegen).
MehrMatching. Organisatorisches. VL-18: Matching. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger. Tanzabend
Organisatorisches VL-18: Matching (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Sprechstunde: Mittwoch 11:15 12:00 Übungen: Tim Hartmann,
Mehr6. Flüsse in Netzwerken Berechnung maximaler Flüsse. dann berechnet der Markierungsalgorithmus für beliebige Kapazitätsfunktionen
6. Flüsse in Netzwerken Berechnung maximaler Flüsse Satz 6.4. Ersetzt man in Algorithmus 6.1 den Schritt 2 durch 2a. Wähle den Knoten, der zuerst in eingefügt wurde. Setze. dann berechnet der arkierungsalgorithmus
MehrGrundlagen Datenstrukturen Transitive Hülle Traversierung Kürzeste Wege Spannender Baum Max. Fluss Zuordnungen. 6. Graphen
. Graphen viele praktische (Optimierungs-)Probleme sind als graphentheoretische Probleme formulierbar z.b. in Produktionsplanung, Personaleinsatzplanung,.... Grundlagen gerichteter, ungerichteter und gewichteter
MehrFlüsse, Schnitte, Bipartite Graphen II
Flüsse, Schnitte, Bipartite Graphen II Jonathan Hacker 06.06.2016 Jonathan Hacker Flüsse, Schnitte, Bipartite Graphen II 06.06.2016 1 / 42 Gliederung Einführung Jonathan Hacker Flüsse, Schnitte, Bipartite
MehrProseminar Online Algorithmen, Prof. Dr. Rolf Klein
Proseminar Online Algorithmen, Prof. Dr. Rolf Klein Vortrag von Michael Daumen am 13.12.2000 Thema : Minimum Spanning Tree und 2-Approximation der TSP-Tour Inhalt des Vortrags : 1. genaue Vorstellung des
Mehr7. Der Entwurf von Algorithmen (Fortsetzung)
Prof. Dr. Norbert Blum M.Sc. Adrian Schmitz Informatik V BA-INF 041 - Algorithmen und Berechnungskomplexität II SS 2015 Mögliche Klausuraufgaben Stand 1. Juli 2015 Bitte beachten Sie, dass die tatsächlichen
MehrEffiziente Algorithmen I 11. Übungsblatt, Wintersemester 2015/16 Abgabetermin:
11 11. Übungsblatt, Wintersemester 2015/16 Abgabetermin: 19.01.2016 Aufgabe 29 Bestimmen Sie mit der Stepping-Stone-ethode einen Transportplan mit minimalen Kosten für das klassische Transportproblem mit
MehrVU Algorithmen auf Graphen Übungsblatt 2 - Aufgabe 2 Transformation einer MaxFlow- in eine MinCost Circulation Instanz
VU Algorithmen auf Graphen Übungsblatt 2 - Aufgabe 2 Transformation einer MaxFlow- in eine MinCost Circulation Instanz Gruppe A: Bernhard Stader, Georg Ziegler, Andreas Zugaj 10. November 2004 Inhaltsverzeichnis
MehrDiskrete Mathematik Graphentheorie (Übersicht)
Diskrete Mathematik Graphentheorie (Übersicht) Dr. C. Löh 2. Februar 2010 0 Graphentheorie Grundlagen Definition (Graph, gerichteter Graph). Ein Graph ist ein Paar G = (V, E), wobei V eine Menge ist (die
MehrÜbung 5 Algorithmen II
Michael Axtmann michael.axtmann@kit.edu http://algo.iti.kit.edu/algorithmenii_ws6.php - 0 Axtmann: KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft
MehrFortgeschrittene Netzwerk- und Graph-Algorithmen
Fortgeschrittene Netzwerk- und Graph-Algorithmen Dr. Hanjo Täubig Lehrstuhl für Eziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Wintersemester 2007/08
Mehr3. Übungsblatt zu Algorithmen II im WS 2016/2017
Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Peter Sanders Dr. Christian Schulz, Dr. Simon Gog Michael Axtmann 3. Übungsblatt zu Algorithmen II im WS 2016/2017 Aufgabe
Mehr9 Minimum Spanning Trees
Im Folgenden wollen wir uns genauer mit dem Minimum Spanning Tree -Problem auseinandersetzen. 9.1 MST-Problem Gegeben ein ungerichteter Graph G = (V,E) und eine Gewichtsfunktion w w : E R Man berechne
MehrEDM, Algorithmen und Graphenspeicherung
EDM, Algorithmen und Graphenspeicherung 1 Graphenspeicherung Gespeichert werden soll ein Graph G = (V, E) bzw. Digraph D = (V, A). Man beachte: E ( ) V 2 bzw. E V 2 1.1 Adjazenzmatrix Graph G: A = (a vw
Mehr7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle
In Anwendungen ist es oft interessant zu wissen, ob man überhaupt von einem Knoten v zu einem Knoten w gelangen kann, ganz gleich wie lang der Weg auch ist. Gegeben sei dabei ein gerichteter Graph G =
MehrProgrammierkurs Python II
Programmierkurs Python II Stefan Thater & Michaela Regneri Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Übersicht Topologische Sortierung (einfach) Kürzeste Wege finden
Mehr6 Flüsse und Matchings
6. Flüsse in Netzwerken Flußnetzwerke 6 Flüsse und Matchings In diesem Kapitel werden Bewertungen von Kanten als maximale Kapazitäten interpretiert, die über diese Kante pro Zeiteinheit transportiert werden
Mehr7. Übungsblatt zu Algorithmen II im WS 2016/2017
Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Peter Sanders Dr. Christian Schulz, Dr. Simon Gog Michael Axtmann 7. Übungsblatt zu Algorithmen II im WS 216/217 Aufgabe
MehrFormale Grundlagen der Informatik
Formale Grundlagen der Informatik / 2015 1 Die Elemente einer (endlichen) Menge sollen den Elementen einer zweiten, gleichmächtigen Menge zugeordnet werden Problemstellung Bipartite Graphen Zuordnungsprobleme
MehrTeil 2: Graphenalgorithmen
Teil : Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege Minimal aufspannende Bäume Problemstellung Algorithmus von Prim
MehrAlgorithmen und Datenstrukturen Kapitel 9. und
Algorithmen und Datenstrukturen Kapitel 9 und Kürzeste Pfade Frank Heitmann heitmann@informatik.uni-hamburg.de 9. Dezember 0 Frank Heitmann heitmann@informatik.uni-hamburg.de / Problemstellung Definition
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Kapitel 16: Erste Algorithmen in Graphen Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für
MehrStrukturelle Modelle in der Bildverarbeitung Binäre MinSum Probleme
Strukturelle Modelle in der Bildverarbeitung Binäre MinSum Probleme TUD/INF/KI/IS Äquivalente Transformationen (Reparametrisierung) Binäre MinSum Probleme kanonische Form MinCut Binäre MinSum Probleme
Mehr1 Kürzeste Pfade in Graphen
Praktikum Algorithmen-Entwurf (Teil 3) 03.11.2011 1 1 Kürzeste Pfade in Graphen Es sei ein gerichteter Graph G = (V, E) mit V = n Knoten, E = m Kanten und Kantengewichten c : E R gegeben. Ein Pfad in G
MehrDatenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14
Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 14. Mai
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Kürzeste Wege Maike Buchin 4. und 6.7.2017 Einführung Motivation: Bestimmung von kürzesten Wegen ist in vielen Anwendungen, z.b. Routenplanung, ein wichtiges Problem. Allgemeine
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 11: Graphen Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2010/2011 1/59 Graphische Darstellung von Zusammenhängen schon
MehrKürzeste (billigste) Wege
Kürzeste (billigste) Wege 1. Kürzeste (billigste) Wege Gerichteter Graph G = (V, E) Kostenfunktion c : E R 1 2 1 3 3 2 4 4 2 6 6 5 3 2 Entfernung zwischen zwei Knoten Kosten eines Wegs P = v 0, v 1,...,
MehrEinheit 11 - Graphen
Einheit - Graphen Bevor wir in medias res (eigentlich heißt es medias in res) gehen, eine Zusammenfassung der wichtigsten Definitionen und Notationen für Graphen. Graphen bestehen aus Knoten (vertex, vertices)
MehrAlgorithmische Mathematik I
Algorithmische Mathematik I Wintersemester 2011 / 2012 Prof. Dr. Sven Beuchler Peter Zaspel Übungsblatt zur Wiederholung Teil 1. Abgabe am -. Aufgabe 1. a) Was ist eine B-adische Darstellung mit fixer
Mehr