Flüsse, Schnitte, bipartite Graphen. Martin Oettinger

Größe: px
Ab Seite anzeigen:

Download "Flüsse, Schnitte, bipartite Graphen. Martin Oettinger"

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 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

Mehr

Flüsse, Schnitte, bipartite Graphen

Flü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

Mehr

Flüsse, Schnitte, Bipartite Graphen

Flü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

Mehr

Flü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 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

Mehr

ADS: Algorithmen und Datenstrukturen 2

ADS: 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,

Mehr

Flüsse in Netzwerken

Flü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

Mehr

Klausurvorbereitung. 1 Zentrale Begriffe. 2 Bipartite Graphen. 2.1 Begriffe. Vorlesung Graphen und Optimierung Sommersemester 2011 Prof. S.

Klausurvorbereitung. 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

Mehr

Wiederholung zu Flüssen

Wiederholung 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:

Mehr

Algorithmentechnik - U bung 3 4. Sitzung Tanja Hartmann 03. Dezember 2009

Algorithmentechnik - 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

Mehr

Algorithmen und Datenstrukturen Kapitel 10

Algorithmen 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

Mehr

Effiziente Algorithmen I

Effiziente 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

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen 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

Mehr

Flüsse und Schnitte von Graphen

Flü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

Mehr

Kapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung

Kapitel 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

Mehr

Bipartite Graphen. Beispiele

Bipartite 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

Mehr

Anwendungen von Netzwerkfluss. Wojciech Polcwiartek Institut für Informatik FU Berlin

Anwendungen 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

Mehr

Algorithmik WS 07/ Vorlesung, Andreas Jakoby Universität zu Lübeck. 10 Matching-Probleme

Algorithmik 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

Mehr

1.Aufgabe: Minimal aufspannender Baum

1.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

Mehr

Kapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung

Kapitel 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

Mehr

Satz 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,... 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

Mehr

Inhalt. 1. Flußprobleme. 2. Matching. 3. Lineares Programmieren. 4. Ganzzahliges Programmieren. 5. NP-Vollständigkeit. 6. Approximationsalgorithmen

Inhalt. 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

Mehr

ij. , d (k 1) + d (k 1)

ij. , 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

Mehr

Kapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung

Kapitel 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

Mehr

Klausur zum Modul Einführung in die Diskrete Mathematik

Klausur 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

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Graphenalgorithmen Maximaler Fluss Einleitung Flussnetzwerke Ford-Fulkerson Fulkerson Methode Maximales bipartites Matching

Mehr

Kapitel 1: Flussalgorithmen

Kapitel 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

Mehr

Anwendungen von Netzwerkfluss

Anwendungen 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

Mehr

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 4: Flüsse

Ferienkurs 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

Mehr

Bipartites Matching. Gegeben: Ein bipartiter, ungerichteter Graph (V 1, V 2, E). Gesucht: Ein Matching (Paarung) maximaler Kardinalität.

Bipartites 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

Mehr

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Graphalgorithmen 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

Mehr

Algorithmische Graphentheorie

Algorithmische 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,

Mehr

12. 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 12. Graphen Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen Graphen Graphenalgorithmen 2

Mehr

Seminar über aktuelle Forschungsthemen in der Algorithmik, Dozent Prof. Dr. Alt;

Seminar ü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

Mehr

Name:... Vorname:... Matr.-Nr.:... Studiengang:...

Name:... 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:.....................................

Mehr

Kapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung

Kapitel 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

Mehr

Vorlesung Datenstrukturen

Vorlesung 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

Mehr

Very simple methods for all pairs network flow analysis

Very 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

Mehr

Zählen perfekter Matchings in planaren Graphen

Zä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

Mehr

FLÜSSE, SCHNITTE UND - TEIL 2 - BIPARTITE GRAPHEN. Vortrag im Seminar Hallo Welt Für Fortgeschrittene Dozenten: Werth, T. & Brinkers, D.

FLÜ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

Mehr

8.4 Digraphen mit negativen Kantengewichten Grundsätzliches Betrachte Startknoten s und einen Kreis C mit Gesamtlänge < 0.

8.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

Mehr

Graphdurchmusterung, Breiten- und Tiefensuche

Graphdurchmusterung, 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,

Mehr

11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME

11. 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

Mehr

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Fortgeschrittene 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

Mehr

Einführung in die Mathematik des Operations Research

Einfü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

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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 /

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Technische 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 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

Mehr

Algorithmen & Komplexität

Algorithmen & 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

Mehr

4.7 Der Algorithmus von Dinic für maximalen Fluss

4.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

Mehr

Flüsse, Schnitte, bipartite Graphen

Flü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

Mehr

Datenstrukturen und Algorithmen (SS 2013)

Datenstrukturen 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

Mehr

Flüsse und Zuordnungen. Kapitel 6. Peter Becker (H-BRS) Graphentheorie Wintersemester 2018/ / 296

Flü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

Mehr

SCHNITTERHALTUNG (SPEKTRALE APPROXIMATION)

SCHNITTERHALTUNG (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

Mehr

Laufzeit. Finden eines Matchings maximaler Kardinalität dauert nur O( E min{ V 1, V 2 }) mit der Ford Fulkerson Methode.

Laufzeit. 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 }.

Mehr

Lösungshinweise 3 Vorlesung Algorithmentechnik im WS 08/09

Lö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

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen 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

Mehr

Algorithmische Graphentheorie

Algorithmische 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

Mehr

maximaler Fluss & minimaler Schnitt

maximaler 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...

Mehr

lässt sich auch ableiten, dass es einen augmentierenden Pfad der Länge höchstens

lä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

Mehr

KAPITEL 3 MATCHINGS IN BIPARTITEN GRAPHEN

KAPITEL 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

Mehr

Kombinatorische Optimierung

Kombinatorische 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

Mehr

Trennender Schnitt. Wie groß kann der Fluss in dem folgenden Flussnetzwerk höchstens sein?

Trennender 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

Mehr

Kapitel 8: Bipartite Graphen Gliederung der Vorlesung

Kapitel 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

Mehr

Gliederung. Kapitel 4. Lokale Suchverfahren. Meta-Heuristiken. Simulated Annealing. Lokale Suchverfahren. Optimierungsalgorithmen

Gliederung. 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

Mehr

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Fortgeschrittene 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

Mehr

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.

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

Mehr

Wie wird ein Graph dargestellt?

Wie 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

Mehr

Effiziente Algorithmen und Datenstrukturen II

Effiziente 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

Mehr

Very simple methods for all pairs network flow analysis

Very 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

Mehr

Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich. Graphen (2)

Helmut 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).

Mehr

Matching. Organisatorisches. VL-18: Matching. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger. Tanzabend

Matching. 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,

Mehr

6. 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. 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

Mehr

Grundlagen Datenstrukturen Transitive Hülle Traversierung Kürzeste Wege Spannender Baum Max. Fluss Zuordnungen. 6. Graphen

Grundlagen 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

Mehr

Flüsse, Schnitte, Bipartite Graphen II

Flü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

Mehr

Proseminar Online Algorithmen, Prof. Dr. Rolf Klein

Proseminar 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

Mehr

7. Der Entwurf von Algorithmen (Fortsetzung)

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

Mehr

Effiziente Algorithmen I 11. Übungsblatt, Wintersemester 2015/16 Abgabetermin:

Effiziente 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

Mehr

VU 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 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

Mehr

Diskrete Mathematik Graphentheorie (Übersicht)

Diskrete 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

Ü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

Mehr

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Fortgeschrittene 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

Mehr

3. Übungsblatt zu Algorithmen II im WS 2016/2017

3. Ü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

Mehr

9 Minimum Spanning Trees

9 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

Mehr

EDM, Algorithmen und Graphenspeicherung

EDM, 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

Mehr

7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle

7. 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 =

Mehr

Programmierkurs Python II

Programmierkurs 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

Mehr

6 Flüsse und Matchings

6 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

Mehr

7. Übungsblatt zu Algorithmen II im WS 2016/2017

7. Ü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

Mehr

Formale Grundlagen der Informatik

Formale 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

Mehr

Teil 2: Graphenalgorithmen

Teil 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

Mehr

Algorithmen und Datenstrukturen Kapitel 9. und

Algorithmen 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

Mehr

Grundbegriffe der Informatik

Grundbegriffe 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

Mehr

Strukturelle Modelle in der Bildverarbeitung Binäre MinSum Probleme

Strukturelle 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

Mehr

1 Kürzeste Pfade in Graphen

1 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

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Datenstrukturen & 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

Mehr

Vorlesung Datenstrukturen

Vorlesung 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

Mehr

Grundbegriffe der Informatik

Grundbegriffe 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

Mehr

Kürzeste (billigste) Wege

Kü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,...,

Mehr

Einheit 11 - Graphen

Einheit 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)

Mehr

Algorithmische Mathematik I

Algorithmische 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