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

Ähnliche Dokumente
Algorithmen und Datenstrukturen 2

Wie wird ein Graph dargestellt?

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

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

Algorithmen und Datenstrukturen 2-1. Seminar -

Lernmodul 7 Algorithmus von Dijkstra

ADS: Algorithmen und Datenstrukturen 2

15. Elementare Graphalgorithmen

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

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

Datenstrukturen und Algorithmen (SS 2013)

ADS: Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen

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

ADS: Algorithmen und Datenstrukturen 2

ADS 2: Algorithmen und Datenstrukturen

Algorithmen & Komplexität

Routing A lgorithmen Algorithmen Begriffe, Definitionen Wegewahl Verkehrslenkung

Algorithmen und Datenstrukturen Kapitel 10

Berechnung von Abständen

5. Bäume und Minimalgerüste

Routing Algorithmen. Begriffe, Definitionen

Informatik II, SS 2014

Vorlesung Datenstrukturen

4. Kreis- und Wegeprobleme Abstände in Graphen

12. AuD Tafelübung T-C3

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Effiziente Algorithmen

ADS 2: Algorithmen und Datenstrukturen

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

Informatik II, SS 2014

4.7 Der Algorithmus von Dinic für maximalen Fluss

12. Graphen. Notation, Repräsentation, Traversieren (DFS, BFS), Topologisches Sortieren, Ottman/Widmayer, Kap ,Cormen et al, Kap.

Algorithmen und Datenstrukturen

12. Graphen. Königsberg Zyklen. [Multi]Graph

Teil 2: Graphenalgorithmen

11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME

Berechnung minimaler Spannbäume. Beispiel

Effiziente Algorithmen I

6. Übung zur Linearen Optimierung SS08

Flüsse in Netzwerken. Seminar über Algorithmen SoSe Mike Rohland & Julia Schenk

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

Flüsse, Schnitte, bipartite Graphen

9 Minimum Spanning Trees

ADS: Algorithmen und Datenstrukturen 2

Kap. 5: Graphen. Carsten Gutwenger Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund. 17. VO DAP2 SS

ADS 2: Algorithmen und Datenstrukturen

Bipartite Graphen. Beispiele

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.

Aufgaben zur Klausurvorbereitung

Abgabe: (vor der Vorlesung)

Datenstrukturen. Mariano Zelke. Sommersemester 2012

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

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Graphen: Datenstrukturen und Algorithmen

ADS 2: Algorithmen und Datenstrukturen

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Rückblick: Starke Zusammenhangskomponenten

Kapitel IV Minimale Spannbäume

Kürzeste Wege in einem gewichteten Graphen. Anwendungen

2.4 Starke Zusammenhangskomponenten in Digraphen

Algorithmen II Vorlesung am

Graphalgorithmen. 9. November / 54

Informatik II, SS 2018

Lösungsvorschläge zur Hauptklausur Datenstrukturen

Statistik und Graphentheorie

Algorithmen & Datenstrukturen 2 Praktikum 3

Übersicht. Datenstrukturen und Algorithmen. Das Rechenproblem: kürzeste Pfade. Übersicht. Vorlesung 17: Kürzeste Pfade (K24) Bellman-Ford Dijkstra

23. Graphen. Königsberg Zyklen. [Multi]Graph

1.Aufgabe: Minimal aufspannender Baum

Problemlösen in grafischen Strukturen

Übung Algorithmen und Datenstrukturen

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

Traversierung 1 / 16. P.F. Stadler & S. Will (Bioinf, Uni LE) ADS 2, V3 23. April / 16

Informatik II, SS 2016

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen

\ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E.

Algorithmen II Vorlesung am

Das Heiratsproblem. Definition Matching

Algorithmische Graphentheorie

Algorithmische Mathematik I

Algorithmen und Datenstrukturen 2

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

Datenstrukturen und Algorithmen

Informatik II, SS 2016

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

Vorlesung Datenstrukturen

Aufgabe 1: Berechnen Sie für den in Abbildung 1 gegebenen Graphen den. Abbildung 1: Graph für Flussproblem in Übungsaufgabe 1

Datenstrukturen. einfach verkettete Liste

Vorlesung Datenstrukturen

Algorithmische Graphentheorie

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:

Algorithmische Graphentheorie

Kodieren Von Graphen

3.2 Generischer minimaler Spannbaum-Algorithmus

Kapitel 4: Minimal spannende Bäume Gliederung der Vorlesung

Quicksort ist ein Divide-and-Conquer-Verfahren.

Transkript:

. Graphen viele praktische (Optimierungs-)Probleme sind als graphentheoretische Probleme formulierbar z.b. in Produktionsplanung, Personaleinsatzplanung,.... Grundlagen gerichteter, ungerichteter und gewichteter Graph 58

Gerichteter Graph Definition: gerichteter Graph G = (V, E) mit: V = {,..., v n } Knotenmenge E V V Kantenmenge (im folgenden: m = E ) Graphen werden meist graphisch dargestellt Beispiel: G = ({, v, v, v }, {(, v ), (v, v ), (v, v ), (v, v )}) v v v 59

Ungerichteter Graph Definition: ungerichteter Graph G = (V, E) mit: V = {,..., v n } E {{v, v } v, v V } Knotenmenge Kantenmenge Beispiel: G = ({, v, v, v }, {{, v }, {v, v }, {v, v }}) v v v im folgenden werden gerichtete Graphen betrachtet, sofern nicht explizit anders hervorgehoben 0

Gewichteter Graph Definition: gewichteter Graph G = (V, E, β) mit: Knotenmenge V Kantenmenge E β : E IR (Kanten-)Gewichtsfunktion Beispiel: G = ({, v, v, v }, {(, v ), (v, v ), (v, v ), (v, v )}, β) mit β(, v ) =, β(v, v ) = 5, β(v, v ) =, β(v, v ) = v 5 v v

.. Adjazenzmatrix sei G = (V, E) ein Graph. Datenstrukturen für Graphen Definition: Adjazenzmatrix A G ist n n-matrix mit, falls (v i, v j ) E und 0 i, j < n (bzw. {v i, v j } E) a i,j = 0, sonst Beispiel: G : v v v A G = 0 0 0 0 0 0 0 0 0 0 0 0 Platzbedarf: O(n )

.. Adjazenzlisten Array (oder sonstige Kollektion) von Knoten für jeden Knoten: Liste mit Verweisen auf Nachfolgeknoten Beispiel: v 0 - - - G : v v Kantengewichte leicht ergänzbar Platzbedarf: O(n + m) -

.. Distanzmatrix sei G = (V, E, β) ein gewichteter Graph Definition: Distanzmatrix D G ist n n-matrix mit β(v i, v j ), falls (v i, v j ) E und 0 i, j < n (bzw. {v i, v j } E) d i,j =, sonst Beispiel: G : v 5 v v D G = 5 Platzbedarf: O(n ) 4

. Transitive Hülle gegeben: G = (V, E) gesucht: (reflexive,) transitive Hülle G = (V, E ) mit: (v, v) E v V (v, v ) E, (v, v ) E (v, v ) E v, v, v V sonst keine Kanten in E Beispiel: G = G = v v (V, E): v v (V, E ): v v 5

Transitive Hülle (Warshall-Algorithmus) gegeben: Adjazenzmatrix A G von G = (V, E) public static void huelle(byte[][] A){ int n = A.length; for(int i=0; i<n; i++) A[i][i] = ; for(int j=0; j<n; j++) for(int i=0; i<n; i++) if (A[i][j] == ) for(int k=0; k<n; k++) if (A[j][k] == ) A[i][k] = ;} // Schleifenreihenfolge // wichtig! Iteration j berücksichtigt alle Verbindungen mit Zwischenstationen j Aufwand: t rth W (n, m) O(n + E n))

.4 Traversierung von Graphen.4. Tiefensuche an jedem Knoten: zuerst die Nachfolger rekursiv betrachten dann die Geschwister Beispiel: G 4 : v v 4 v v v 5 Durchlaufreihenfolge:, v, v, v 4, v, v 5 Aufwand: t dfs W (n, m) O(n + m) (bei Adjazenzlisten) 7

.4. Breitensuche alle Knoten mit Abstand i vom Ausgangsknoten werden vor denen mit Abstand i + besucht (i = 0,,,...) hierzu: Knotenqueue (FIFO) Beispiel: G 4 : v v 4 v v v 5 Durchlaufreihenfolge:, v, v, v, v 4, v 5 Aufwand: tw bfs(n, (bei Adjazenzlisten) 8

.5 Kürzeste Wege.5. Kürzeste Wege von einem Ausgangsknoten sei G = (V, E, β) mit β : E IR + Algorithmus von Dijkstra (grober Pseudocode) drei Knotenmengen: F (fertig), R (Rand), U (unerreicht) anfangs: F = { }; R = Nachbarn( ); U = V F R bis F == V (*) bestimme v R mit d(, v) d(, v ) v R F = F {v} R = R (Nachbarn(v) F ) {v} U = U R 9

Aufwand des Algorithmus von Dijkstra abhängig von der Implementierung der Knotenauswahl (*): ) durchlaufe alle Knoten: Aufwand O(n ) (Original) ) mit Knoten-Heap: Aufwand O(m log n) ) mit Knoten-Fibonacci-Heap (s. Ottmann/Widmayer): Aufwand O(m + n log n) 70

Beispiel: Algorithmus von Dijkstra 0 v 0 v 5 5 v 4 5 v 4 v v v v 4 0 v 5 0 v 5 5 v 4 5 v 4 v v 4 7 v v 4 0 v 5 5 v 4 v v 4 7

.5. Alle Paare kürzester Wege Ansatz : n-mal Dijkstra-Algorithmus Aufwand: O(n ) bzw. O(n m log n) (mit Heap) Ansatz : Floyd-Algorithmus Variante des Warshall-Algorithmus basierend auf Distanzmatrix... A[i][k] = min(a[i][k], A[i][j]+A[j][k])... Aufwand: O(n + E n) 7

Ansatz : (+,min)-multiplikationen geg.: Distanzmatrix D M = D; for(int i=0; i <= log n; i++) M = M M; wobei : (+,min)-matrixmultiplikation, d.h. min statt +, + statt Aufwand: O(n log n) verbesserbar auf: O(n.8 log n) mit Strassen-Verfahren 7

. Minimaler Spannender Baum gegeben: ungerichteter, gewichteter Graph G = (V, E, β) gesucht: Baum B = (V, E, β ) mit E E, β = β E und β(e) minimal e E Algorithmus von Kruskal (Pseudocode) E = while B noch kein Baum do wähle e E E mit kleinstem β(e) und so dass B = (V, E {e}) kreisfrei E = E {e} Aufwand: O(m log n) mit union-find-struktur (s. z.b. Ottmann/Widmayer) 74

Beispiel: Algorithmus von Kruskal v v v 4 v 4 v v v v v v v 4 v 4 v v v v 75

Algorithmus von Jarník/Prim/Dijkstra analog zu Dijkstra-Algorithmus (s.o) jedoch wird für jeden Randknoten der Abstand zum fertigen Baum vermerkt (nicht zum Anfangsknoten) Beispiel: v v v v 4 v 4 v 4 v v v v v v v v v 4 v v v v v 4 Aufwand: O(m + n log n) (mit Fibonacci-Heap) 7

.7 Maximaler Fluss gegeben: gewichteter Graph G = (V, E, β) mit β : E IR + q V Kantenkapazität Quelle s V Senke gesucht: maximaler Fluss f : E IR + von q nach s d.h. max ( f :E IR + f (q, v) f (v, q)) mit: (q,v) E (v,q) E * f (e) β(e) e E Kapazitätsrestriktion * f (v, v) f (v, v ) = 0 v V {q, s} Flusserhaltung (v,v) E (v,v ) E 77

Beispiel: Fluss 4/ 4 / v / q / 0 / / s 4/ / v v / 5/ 4 Definition: ein zunehmender Weg w von q nach s mit Kapazität k ist eine ) E Kantenfolge (, v }{{}, v ),..., (v r, v r ) mit }{{} (für i = 0,... r ) =q =s f (v i, i+ i, i+ ), falls (v i, v i+ oder f (v i+ i ) k 0, falls (v i+, v i 78

Beispiel: Flusserhöhung 4/ 4 / v / 4/ 4 / v / q / 0 / / s q / 0 / / s 4/ / v v / 5/ 4 4/ 4 / v v / 5/ 5 Fluss f nach Addition des zunehmenden Weges w: (für i = 0,... r ) f (v i, v i+ ) := f (v i, v i+ ) + k, falls (v i, v i+ ) E und f (v i, v i+ ) + k β(v i, v i+ ) f (v i+, v i ) := f (v i+, v i ) k, sonst 79

Algorithmus von Ford/Fulkerson für alle e E: f (e) = 0; while zunehmenden Weg w von q nach s do sei k die (max.) Kapazität von w erhöhe f entlang w um k zur Implementierung: speichere f (e) für jede Kante e bei naiver Wahl von w ist weder die Termination noch die Korrektheit garantiert Aufwand im schlechtesten Fall: abhängig vom Vorgehen bei der Bestimmung des zunehmenden Weges ) wenn w mit maximaler Kapazität: O(m log β max ) ) wenn w mit minimaler Kantenanzahl: O(n m ) (Algorithmus von Edmonds/Karp (Breitensuche)) 80

Andere Maximal-Fluss-Algorithmen Algorithmus von Dinic: O(n m) verbessert Alg. v. Edmonds/Karp; alle kürzesten Wege werden gleichzeitig berücksichtigt Algorithmus von Karsanow/Tarjan: O(n ) Algorithmus von Sleator/Tarjan: O(n m log n) Details siehe Ottmann/Widmayer Bemerkungen: maximaler Fluss entspricht minimalem Schnitt ein Fluss f ist maximal, wenn es keinen zunehmenden Weg gibt 8

5.8 Zuordnungen Definition: (Zuordnung) sei G = (V, E) ein Graph; E E heißt Zuordnung (Matching), wenn (v, v ) E v V {v, v } {(v, v), (v, v ), (v, v ), (v, v )} E 8

Definition: (bipartiter Graph) Bipartite Graphen sei G = (V, E) ein Graph mit V = V V und V V = G heißt bipartit, wenn E V V V V Bestimmung einer maximalen Zuordnung die Bestimmung einer (bzgl. E ) maximalen Zuordnung in einem bipartiten Graphen lässt sich auf das Maximal-Fluss-Problem zurückführen hierzu werden Knoten q und s ergänzt und q mit allen Knoten von V und s mit allen Knoten von V verbunden das Gewicht jeder Kante ist 8

Beispiel: Bestimmung einer maximalen Zuordnung zunehmende Wege: ) q A A s ) q B C s ) q D D s Adam Anna Bernd Birgit q s Christian Chantal Dieter Doris 4) q C C B A A B q 84