EDM, Algorithmen und Graphenspeicherung

Ähnliche Dokumente
4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1

Minimal spannende Bäume

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

Algorithmen & Komplexität

Effiziente Algorithmen I

Richtig oder falsch? Richtig oder falsch? Richtig oder falsch? Mit dynamischer Programmierung ist das Knapsack- Problem in Polynomialzeit lösbar.

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

Optimale Lösungen mit Greedy-Strategie erfordern Optimalität der Greedy-Wahl. Beispiele für optimale Greedy-Lösungen

Kürzeste Wege in Graphen. Orte mit Straßenverbindungen. Coma I Rolf Möhring

1 Matroide. 1.1 Definitionen und Beispiele. Seminar zur ganzzahligen Optimierung Thema: Durchschnitt von Matroiden - Satz von Edmonds von Dany Sattler

Operations Research. Flüsse in Netzwerken. Flüsse in Netzwerken. Unimodularität. Rainer Schrader. 2. Juli Gliederung.

11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME

Kap. 6.6: Kürzeste Wege

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

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.

1.Aufgabe: Minimal aufspannender Baum

Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph.

Teil 2: Graphenalgorithmen

Durchschnitt von Matroiden

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

Kap. 6.6: Kürzeste Wege

Wie wird ein Graph dargestellt?

4. Kreis- und Wegeprobleme Abstände in Graphen

3.6 Branch-and-Bound-Verfahren

6 Flüsse und Matchings

2. Das single-source-shortest-path-problem

Algorithmen und Datenstrukturen Übung #4 BFS/DFS, Wachstum von Funktionen

15. Elementare Graphalgorithmen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Kürzeste Wege. Ein Startknoten, nichtnegative Gewichte

6. Flüsse und Zuordnungen

Algorithmen und Datenstrukturen 2-1. Seminar -

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

Berechnung von Abständen

Graphentheorie. Maximale Flüsse. Maximale Flüsse. Maximale Flüsse. Rainer Schrader. 31. Oktober Gliederung. sei G = (V, A) ein gerichteter Graph

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

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.

Flüsse in Netzwerken

Graphalgorithmen Netzwerkalgorithmen. Laufzeit

Technische Universität München Fakultät für Mathematik Algorithmische Diskrete Mathematik WS 2012/2013 Prof. Dr. P. Gritzmann 22.

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 1: Grundlagen der algorithmischen Graphentheorie

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

5. Bäume und Minimalgerüste

12. Graphen Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013

ADS: Algorithmen und Datenstrukturen 2

Klausur zum Modul Einführung in die Diskrete Mathematik

Algo&Komp. - Wichtige Begriffe Mattia Bergomi Woche 6 7

1 Kürzeste Pfade in Graphen

Kürzeste (billigste) Wege

Vorlesung Datenstrukturen

12. Der Algorithmus von Dijkstra. Informatik II für Verkehrsingenieure

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

6. Übung zur Linearen Optimierung SS08

Übungsblatt 2 - Lösung

Effiziente Algorithmen I

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen

Flüsse und Schnitte von Graphen

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 6: Graphentheorie

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Algorithmen und Datenstrukturen SS09. Foliensatz 16. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

6. Flüsse und Zuordnungen

Überblick. TSP Vergleich der Lösungen. Das Travelling Salesman Problem. Nearest-Neighbor Heuristik für TSP

Kap. 7.1 Heuristiken Kap. 7.2 Approximative Algorithmen und Gütegarantien

8 Diskrete Optimierung

9 Minimum Spanning Trees

Der Branching-Operator B

Kürzeste Wege in einem gewichteten Graphen. Anwendungen

Algorithmen und Datenstrukturen, FS17 Prof Dr Christian Tschudin

VU Algorithmen auf Graphen Übungsblatt 2 - Aufgabe 2 Transformation einer MaxFlow- in eine MinCost Circulation Instanz

Wiederholung zu Flüssen

1. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2008/2009

Algorithmen und Datenstrukturen 2

4.7 Der Algorithmus von Dinic für maximalen Fluss

Bipartite Graphen. Beispiele

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

Betriebswirtschaftliche Optimierung

2. Repräsentationen von Graphen in Computern

Algorithmen und Datenstrukturen SS09. Foliensatz 17. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

ADS: Algorithmen und Datenstrukturen 2

Datenstrukturen und Algorithmen (SS 2013)

Betriebliche Optimierung

Datenstrukturen. einfach verkettete Liste

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Algorithmen 1 Tutorium

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

Algorithmische Graphentheorie

Graphentheorie. Kürzeste Wege. Kürzeste Wege. Kürzeste Wege. Rainer Schrader. 25. Oktober 2007

Transkript:

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 ) v,w V mit a vw = 1 v, w} E 1 (v, w) A Digraph D: A = (a vw ) v,w V mit a vw = 1 (w, v) E 1.2 Inzidenzmatrix: Graph G: B = (b ve ) v V,e E mit b ve = 1 v e 1 a 1 = v Digraph D: B = (b va ) v V,a A mit b va = 1 a 2 = v 1.3 Adjazenzliste: Graph G: L = (L v ) v V mit L v = N G (v) = w V v, w} E} Digraph D: Vorgängerliste: L = (L v ) v V mit L v = N + G (v) = w V (w, v) E} Nachfolgerliste: L = (L v ) v V mit L v = N G (v) = w V (v, w) E} 1

2 Baumsuche Eingabe: Zusammenhängender Graph G = (V, E). Ausgabe: Maximaler kreisfreier Untergraph durch gerichtete Adjazenzliste L. Hilfsdaten: U: Menge unbearbeiteter Knoten I: Menge der Knoten in Bearbeitung v: Aktueller Knoten w: unbearbeiteter Nachbar 1. Initialisierung: Setze L v := für alle v V, wähle I ( V 1) und setze U := V \ I. 2. Solange noch Knoten in I existieren, (a) wähle v I (b) Falls N G (v) U eine Knoten enthält, wähle w N G (v) U und setze 3. Ausgabe. U := U \ w}, I := I w} und L v := L v w} Nachfolgerliste oder L w := v} Vorgängerliste Ansonsten setze I := I \ v}. 2.1 Spezialfälle und Bemerkungen BFS (Breitensuchbaum): I als Warteschlange (first in first out) realisiert. DFS (Tiefensuchbaum): I als Stapel (last in first out) realisiert. Auch auf gerichteten Graphen, findet alle vom ersten Knoten aus erreichbaren. Laufzeit: O( E ). Ist U am Ende nicht leer, so enthält L den Suchbaum einer Komponente. Man kann den Algorithmus in eine Schleife packen (Initialisierung von L bleibt draußen) und am Schleifenende V = U setzen, solange U gilt - ansonsten wird die Schleife beendet. Dann erhält man einen Algorithmus, der zu jedem Graphen einen maximalen kreisfreien Untergraphen (Gerüst) sucht. 2

3 Greedy-Algorithmen 3.1 Best-in-Greedy Eingabe: Unabhängigkeitssystem (E, F) mittels Unabhängigkeitsorakel, Gewichte c : E R +. Ausgabe: Menge F F Hilfsdaten: e i : Elemente von E 1. Initialisierung: Sortiere E = e 1,...,e n } so, dass c(e E ) c(e E 1 )... c(e 1 ) Setze F := 0. 2. Für i = 1 bis E (a) Überprüfe F e i} auf Unabhängigkeit und (b) setze gegebenenfalls F := F e i }. Löst das Maximierungsproblem für Unabhängigkeitssysteme, sofern (E, F) ein Matroid ist, exakt mit Laufzeit E Laufzeit(Orakel) + O(n log n). Beispiel: Minimum Spanning tree, c(e) := maxw e e E(G)} w e, (E, F) graphisches Matroid. 3.2 Worst-out-Greedy Eingabe: Unabhängigkeitssystem (E, F) mittels Basis-Obermengen-Orakel, Gewichte c : E R +. Ausgabe: Basis F von (E, F) Hilfsdaten: e i : Elemente von E 1. Initialisierung: Sortiere E = e 1,...,e n } so, dass c(e 1 ) c(e 2 )... c(e E ) Setze F := E. 2. Für i = 1 bis E (a) Überprüfe F \ e i} darauf, ob es eine Basis von (E, F) enthält und (b) setze gegebenenfalls F := F e i }. Löst das Minimierungsproblem für Unabhängigkeitssysteme, sofern (E, F) ein Matroid ist, exakt mit Laufzeit E Laufzeit(Orakel) + O(n log n). Beispiel: Minimum Spanning tree, c(e) := w e, (E, F) graphisches Matroid. 3

4 Edmonds Matroid-Schnitt Algorithmus Eingabe: Matroide (E, F) und (E, F 2 ) mittels Unabh.-Orakel. Ausgabe: Menge X F 1 F 2 maximaler Kardinalität. Hilfsdaten: C 1 (y), C 2 (y), A (1) y, A (2) y, S, T, P 1. Initialisierung: Setze X = 0 2. Für jedes y E \ X und jedes i 1, 2} setze C i (y) := x X y} (X y}) \ x} F i } X y} F 3. Setze S := y E \ X X y} F 1 }, T := y E \ X X y} F 2 }. Für jedes x X setze A (1) x A (2) x := (x, y) y E \ X x C 1 (X, y) \ y}}, := (y, x) y E \ X x C 2 (X, y) \ y}}. 4. Suche kürzesten Weg P in (E, A (1) x A (2) x ) von S x nach B x über BFS. (Hinweis: in Initialisierung BFS kann abweichend I = S gesetzt werden. Das entspricht der Einführung eines gemeinsamen Vorgängerknotens s aller Knoten aus S und Start mit I = s}. Abbruch bei erreichen eines Knotens aus T.) Gibt es keinen solchen Weg P: Beende Algorithmus. 5. Setze X := X V (P) = (X \ V (P)) (V (P) \ X) und gehe zu 2. Laufzeit: O( E 3 ) 4

5 Kürzeste Wege Algorithmen 5.1 Dijkstra-Algorithmus Eingabe: Digraph D = (V, A) mit c : A R +, s V (t V ) Ausgabe: Kürzester-Wege-Baum von s zu v V (bzw. (s, t)-weg) durch Vorgängerliste p : V V und entspr. Längen d : V R. Hilfsdaten für jeden Knoten v V : d(v): aktuell beste bekannte Distanz zu s, p(v): Vorgänger (predecessor) von v im aktuell kürzesten s-v-weg, b(v): besucht (wahr oder falsch) 1. Initialisierung: Für alle Knoten v V setze 0 v = s d(v) := sonst,, p(v) := 0, und b(v) := falsch (kein Knoten zählt als besucht). 2. Solange nicht alle Knoten aus v besucht sind, (a) wähle u Argmind(v) v V, b(v) = falsch} und (b) setze b(u) = wahr (u zählt nun als besucht). (c) Für alle v V mit b(v) =falsch, (u, v) A und d(u) + c(u, v) < d(v) setze Laufzeit: maxo( V 2 ), O( E log V )} d(v) := d(u) + c(u, v) und p(v) := u. 5.2 Moore-Bellman Algorithmus Eingabe: Digraph D = (V, A) mit c : A R, s V (t V ) ohne negativen Kreis Ausgabe: Kürzester-Wege-Baum von s zu v V (bzw. (s, t)-weg) durch Vorgängerliste p : V V und entspr. Längen d : V R Solange Suche nach u V und (u, v) A mit d(u)+c(u, v) < d(v) erfolgreich, setze d(v) := d(u) + c(u, v) und p(v) := u 5

5.3 Floyd-Algorithmus Eingabe: Digraph D = (V, A), V = 1,..., n} sowie Kantenlängen c : A R ohne negativen Kreis in D Ausgabe: Matrix W = (w ij ) i,j V wobei w ij Länge des kürzesten gerichteten i-j-weges (bzw. für i = j des kürzesten i enthaltenden Kreises) ist, sowie Matrix P = (p ij ) i,j V wobei p ij vorletzter Knoten eines kürzesten (i, j)-weges ist. 1. Initialisierung: Für alle i, j V setze c(i, j) (i, j) A w ij := sonst, i (i, j) A p ij := 2. Für jedes k V tue folgendes: Laufzeit: O( V 3 ) Für jedes i V tue folgendes: Für jedes j V tue folgedes: Falls w ij > w ik + w kj setze w ij := w ik + w kj und p ij := p kj. (Falls i = j und w ij < 0 Fehler: negativer Kreis!) 6

6 Flüsse in Netzwerken 6.1 Ford-Fulkerson-Algorithmus Eingabe: Digraph D = (V, A), V = 1,..., n} sowie untere Kantenkapazitäten c : A R obere Kantenkapazitäten c : A R, wobei c(a) c(a) für alle a A gelten möge. Zulässiger Fluss x : A R, wobei zulässig bedeutet: v V \ s, t} : x(u, v) = x(v, u) und Ausgabe: a A : (u,v) A Zulässiger Fluss x maximaler Kapazität (v,u) A c(a) x(a) c(a). (s,v) A x(s, v) Menge W V mit s W und t V \ W sodass x(u, v) (u,v) A (W (V \W)) minimal ist (minimaler Schnitt). Hilfsdaten wie bei Baumsuche (u,v) A ((V \W) W) (v,s) A x(u, v) U: Menge von Knoten außerhalb des bisher abgesuchten Baumes I: Menge der Knoten in Bearbeitung v: Aktueller Knoten w: unbearbeiteter Nachbar p v : Vorgängerknoten auf Verbesserungsweg x(v, s). ε v : Bestmögliche Verbesserung auf letzter Kante (negativ: letzte Kante ging von v aus) 7

Wiederhole 1. Baue gerichteten Baum für von s mit augmentierenden Wegen erreichbare Knoten auf (Baumsuche) (a) Initialisierung Baumsuche: Setze p v := 0 für alle v V, wähle I = s} und setze U := V \ I sowie ε s :=. (b) Solange noch Knoten in I existieren und t / I, i. wähle v I ii. Falls U einen Knoten w enthält mit (v, w) A und ε := c(v, w) x(v, w) > 0 (ausgehende Kante zu w mit Platz nach oben) oder (w, v) A und ε := c(w, v) x(w, v) < 0 (von w eingehende Kante mit Platz nach unten), dann wähle einen solchen Knoten w und setze U := U \ w}, I := I w}, p w := v und Ansonsten setze I := I \ v. ε w := signum(ε) min ε v, ε } 2. Ist t / U so verbessere den Fluß entlang des im Baum gefundenen s-t-weges: (a) Setze ε := ε(t) (b) Setze v := t (c) Wiederhole i. Setze u := p v ii. Falls ε v > 0 setze x(u, v) := x(u, v) + ε ansonsten setze x(v, u) := x(v, u) ε iii. Setze v = u. bis u = s. bis t U, also bis im erzeugten Baum kein Weg mehr nach t führt. Laufzeit: O( E 2 V ), wenn I als Warteschlange organisiert. 8

6.2 Erzeugung eines zulässigen Flusses Eingabe: Digraph D = (V, A), V = 1,..., n} sowie untere Kantenkapazitäten c : A R obere Kantenkapazitäten c : A R, mit c(a) c(a) für alle a A. Ausgabe: Zulässiger Fluss x : A R Hilfsdaten: Hilfsgraph (V, A ), Balance (Verbrauch) b : V R 1. Erweitere Graphen um Zusatzbogen für unbalancierte Knoten bzgl. Fluss c zu Ersatzgraph (V, A ): (a) Setze V := V s, t } und A := A (t, s)}. (b) Für jeden Knoten v V setze b(v) := c(u, v) c(v, u) (u,v) A falls b(v) 0 setze (v,u) A (v, s )} falls b(v) > 0 A := A (Senken vorwärts mit Quelle verbinden), t, v} falls b(v) < 0 (Quellen rückwärts mit Senke verbinden). 2. Führe den Ford-Fulkerson-Algorithmus für Ersatzgraph (V, A ) mit oberen Kantenkapazitäten c c(u, v) (u, v) A, (u, v) = sonst, c(u, v) (u, v) A, unteren Kantenkapazitäten c (u, v) = (u, v) = (t, s), 0 sonst, c (u, v) falls (u, v) A \ (t, s)}, b(u) falls v = s, zulässigem Fluss x(u, v) = b(v) falls u = t, 0 sonst, d.h. falls (u, v) = (t, s), Quelle s und Senke t aus. 3. Falls der Wert des gefundenen Flusses gleich 0 ist, gib ihn eingeschränkt auf G aus, ansonsten gib aus, dass kein zuläsiger Fluss existiert. 9