Graphen (1) 1 Helmut Schauer Educational Engineering Lab

Slides:



Advertisements
Ähnliche Präsentationen
Freie Universität Berlin Institut für Informatik
Advertisements

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Kapitel 9: Graphdurchlauf
Isolation: Serializability
Graphen Ein Graph ist eine Kollektion von Knoten und Kanten. Knoten sind einfache Objekte. Sie haben Namen und können Träger von Werten, Eigenschaften.
Müll 1NaturEinkaufenMüll 2Vermischtes
Binäre Bäume Richard Göbel.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 – Graphen)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26 - Graphen) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
1 Kap. 2 Graphen Kap. 2.1 Netze Beispiele: MVV, Autobahnen, WIN, E/R, LH-Flüge, Stützgraphen, Petri-Netze, SIPs, ISA-Hierarchien, Operator-Graphen, Wartegraphen.
Diskrete Mathe II Übung
Klausur „Diskrete Mathematik II“
Schiller-Gymnasium Hof Manuel Friedrich OStR,
Objektorientierte Vererbung
VL Netzwerke, WS 2007/08 Edda Klipp 1 Max Planck Institute Molecular Genetics Humboldt University Berlin Theoretical Biophysics Networks in Metabolism.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Universität Karlsruhe (TH) © 2006 Univ,Karlsruhe, IPD, Prof. Lockemann/Prof. BöhmTAV 5 Chapter 5 Isolation: Serializability.
Kapitel 10: Graphalgorithmen
FH-Hof Sortieren mit Binären Bäumen Richard Göbel.
Vortrag über Graphen Von Jörg Hendricks.
Software(technik)praktikum Tutorial: Einführung in GEF
So, ein paar Fragen.. Wo sind mehr Bälle? Wo sind mehr Steine?
1 Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Graphen (2)
Design and analysis of GUI test-case prioritization using weight-based methods Samra Khan.
Flüsse, Schnitte, bipartite Graphen
... Unternehmens- leitung
Geoinformation I Vorlesung 8 WS 2000/2001 Graphen.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Die Zählschleife int s = 0 for (int k=1; k
Institut für Theoretische Informatik
Institut für Theoretische Informatik
Robust Branch-Cut-and-Price Algorithms for Vehicle Routing Problems Christian Gruber - Johannes Reiter.
Jan Hinzmann – – GIS Praxis II – Slide 1/10 Der Algorithmus von Dijkstra (Berechnung kürzester Wege in bewerteten Graphen) GIS Praxis II, Jan Hinzmann,
Graphen und Bäume.
1 Helmut Schauer Educational Engineering Lab Department for Informatics University of Zurich Algorithmen und Datenstrukturen FS 2008 BBäume.
1 Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dynamische Programmierung.
Informatik Datenstruktur Graph 3.1 Einfache Graphen
Brüche-Quartett Klasse 6-8 Spieler 4-6. Brüche-Quartett A1 Brüche-Quartett A2 Brüche-Quartett A3 Brüche-Quartett A4 Brüche-Quartett B1 Brüche-Quartett.
Informatik Datenstruktur Graph 3.2 Repräsentation von Graphen
Softwareengineering Graphen und Bäume Teil II
se_4_graphen_und_baeume_I.ppt1 Softwareengineering Graphen und Bäume 1 Prof. Dr.-Ing. Axel Benz, Berlin School of Economics and Law.
Programmiervorkurs WS 2014/15 Methoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Data Mining Spectral Clustering Junli Zhu SS 2005.
10 Graphen gerichtete und ungerichtete, mit Marken an Ecken und/oder Kanten Anwendungsgebiete: Verkehrsnetze, Kommunikationsnetze, Netzpläne, Spiele,...
Bipartite Graphen Der Satz von König.
Eine kurze Geschichte der Graphentheorie
1 Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Geometrische Algorithmen.
VRS Liniennetzplan der Bonner Innenstadt
Programmiersprachen II Graph_Algorithmen Gewichtete Graphen - Minimum Spanning Tree und shortest path aus Implementierungssicht Prof. Dr. Reiner Güttler.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Einführung in die Informationsverarbeitung Teil Thaller Stunde V: Wege und warum man sie geht Graphen. Köln 14. Januar 2016.
Praktische Informatik 1
Philip Schill Erik Kurrat Simon Walther
Praktische Informatik 1
Graphentheorie.
Wiederholung Verband Ungerichtete Graphen Partielle Ordnung
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
3. Die Datenstruktur Graph 3.1 Einfache Graphen
Treewidth and its characterizations
 Präsentation transkript:

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

2 Bezeichnungen V Menge der Knoten (vertices) |V| Anzahl der Knoten Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Bezeichnungen V Menge der Knoten (vertices) |V| Anzahl der Knoten E Menge der Kanten (edges) |E| Anzahl der Kanten G Graph G = (V,E) (v,w) Kante von v nach w 2

3 Eigenschaften gerichtet (directed) ungerichtet (undirected) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Eigenschaften gerichtet (directed) ungerichtet (undirected) gewichtet (weighted) ungewichtet (unweighted) zyklisch (cyclic) zyklenfrei (acyclic) vollständig (complete) bipartit (bipartite) gerichtete Graphen: schwach zusammenhängend (weakly connected) stark zusammenhängend (strongly connected) ungerichtete Graphen: zusammenhängend (connected) zweifach zusammenhängend (biconnected) 3

Beispiel: 4 ungerichtet ungewichtet vollständig Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Beispiel: ungerichtet ungewichtet vollständig zweifach zusammenhängend zyklisch nicht planar 4

Beispiel: 5 gerichtet ungewichtet schwach zusammenhängend zyklenfrei Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Beispiel: gerichtet ungewichtet schwach zusammenhängend zyklenfrei planar 5

Beispiel: 6 gerichtet gewichtet stark zusammenhängend zyklisch planar Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Beispiel: gerichtet gewichtet stark zusammenhängend zyklisch planar 6

Bsp: gerichteter und gewichteter Graph Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Adjazenzmatrix Bsp: gerichteter und gewichteter Graph 7

Bsp: ungerichteter gewichteter Graph Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Adjazenzmatrix Bsp: ungerichteter gewichteter Graph 8

Bsp: ungerichteter ungewichteter Graph Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Adjazenzmatrix Bsp: ungerichteter ungewichteter Graph 9

Bsp: gerichteter Graph Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Adjazenzlisten Bsp: gerichteter Graph a b 5 c 3 b d 2 c d 3 d e 5 e f 2 g 4 f g 3 g 10

Bsp: ungerichteter Graph Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Adjazenzlisten Bsp: ungerichteter Graph a b 5 c 3 b a 5 d 2 c a 3 d 3 d b 2 c 3 e 5 e d 5 f 2 g 4 f e 2 g 3 g e 4 f 3 11

Implementierung eines Graphen Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Implementierung eines Graphen class Graph { Vector nodes = new Vector(); void clearNodes() { for (int i=0; i<nodes.size(); i++) { Node node = (Node)nodes.elementAt(i); node.setVisited(false); } void depthFirst()... void breadthFirst()... 12

Implementierung der Knoten Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Implementierung der Knoten class Node { boolean visited = false; Vector edges = new Vector(); boolean isVisited() {return visited;} void setVisited(boolean p) {visited = p;} void depthFirst()... void breadthFirst()... } 13

Implementierung der Kanten Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Implementierung der Kanten class Edge { int weight; Node to; Edge(int weight, Node to) { this.weight = weight; this.to= to; } 14

Tiefensuche (rekursiv) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (rekursiv) class Graph { ... void depthFirst() { clearNodes(); for (int i=0; i<nodes.size(); i++) { Node node = (Node)nodes.elementAt(i); if (!node.isVisited()) node.depthFirst(); } 15

Tiefensuche (rekursiv) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (rekursiv) O(|V|+|E|) class Node { ... void depthFirst() { if (isVisited()) return; visit(this); setVisited(true); for (int i=0; i<edges.size(); i++) { Edge edge = (Edge)edges.elementAt(i); edge.to.depthFirst(); } 16

17 Tiefensuche (1) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (1) a wird markiert b wird markiert d wird markiert c wird markiert 1. Schritt: Start mit a 2. Schritt: weiter von a nach b 3. Schritt: weiter von b nach d 4. Schritt: weiter von d nach c 17

18 Tiefensuche (2) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (2) c ist fertig e wird markiert f wird markiert 5. Schritt: stop a ist markiert! Vorsicht Zyklus! 6. Schritt: zurück von c nach d (c,d) wird Baumkante 7. Schritt: weiter von d nach e 8. Schritt: weiter von e nach f 18

19 Tiefensuche (3) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (3) g wird markiert 9. Schritt: weiter von f nach g 10. Schritt: stop e ist markiert! Vorsicht Zyklus! 11. Schritt: zurück von g nach f (f,g) wird Baumkante 12. Schritt: zurück von f nach e (e,f) wird Baumkante 19

20 Tiefensuche (4) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (4) 13. Schritt: zurück von e nach d (d,e) wird Baumkante 14. Schritt: zurück von d nach b (b,d) wird Baumkante 15. Schritt: zurück von b nach a (a,b) wird Baumkante 16. Schritt: fertig als Ergebnis entsteht ein spannender Baum! 20

Tiefensuche (iterativ) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Tiefensuche (iterativ) void depthFirst() { Stack stack = new Stack(); clearNodes(); for (int i=0; i<edges.size(); i++) { Node start = (Node)nodes.elementAt(i); if (!start.isVisited()) { start.setVisited(true); stack.push(start); do { Node node = (Node)stack.pop(); visit(node); for (int j=node.edges.size()-1; j>=0; j--) { Edge edge = (Edge)node.edges.elementAt(j); if (!edge.to.isVisited()) { edge.to.setVisited(true); stack.push(edge.to); } } while (!stack.isEmpty()) 21

Breitensuche (iterativ) O(|V|+|E|) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Breitensuche (iterativ) O(|V|+|E|) void breadthFirst() { Queue queue = new Queue(); clearNodes(); for (int i=0; i<edges.size(); i++) { Node start = (Node)nodes.elementAt(i); if (!start.isVisited()) { start.setVisited(true); queue.put(start); do { Node node = (Node)queue.get(); visit(node); for (int j=0; j<node.edges.size(); j++) { Edge edge = (Edge)node.edges.elementAt(j); if (!edge.to.isVisited()) { edge.to.setVisited(true); queue.put(edge.to); } } while (!queue.isEmpty()) 22

23 Breitensuche (1) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Breitensuche (1) a wird markiert b wird markiert c wird markiert 1. Schritt: Start mit a 2. Schritt: []  (a,b) 3. Schritt: [(a,b)]  (a,c) 4. Schritt: (a,b)  [(a,c)] (a,b) wird Baumkante 23

24 Breitensuche (2) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Breitensuche (2) d wird markiert 5. Schritt: [(a,c)]  (b,d) 6. Schritt: (a,c)  [(b,d)] (a,c) wird Baumkante 7. Schritt: d ist markiert Vorsicht Zyklus! 8. Schritt: (b,d)  [] (b,d) wird Baumkante 24

25 Breitensuche (3) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Breitensuche (3) e wird markiert f wird markiert g wird markiert 9. Schritt: []  (d,e) 10. Schritt: (d,e)  [] (d,e) wird Baumkante 11. Schritt: []  (e,f) 12. Schritt: [(e,f)]  (e,g) 25

26 Breitensuche (4) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Breitensuche (4) 13. Schritt: (e,f)  [(e,g)] (e,f) wird Baumkante 14. Schritt: g ist markiert Vorsicht Zyklus! 15. Schritt: (e,g)  [] (e,g) wird Baumkante 16. Schritt: f ist markiert Vorsicht Zyklus! 26

Spannender Baum als Ergebnis der Breitensuche Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Spannender Baum als Ergebnis der Breitensuche 27

Traversieren eines ungerichteten Graphen: Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Traversieren eines ungerichteten Graphen: Kanten die zu einem bereits markierten Knoten führen kennzeichnen einen Zyklus! 28

Traversieren eines ungerichteten Graphen: Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Traversieren eines ungerichteten Graphen: Alle von einem Startknoten aus erreichbaren Knoten gehören zur gleichen Komponente! 29

Rekursive Tiefensuche in gerichteten Graphen: Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Rekursive Tiefensuche in gerichteten Graphen: Kanten die zu einem aktiven (blau) markierten Knoten führen kennzeichnen einen Zyklus! 30

Rekursive Tiefensuche in gerichteten Graphen: Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Rekursive Tiefensuche in gerichteten Graphen: Kanten die zu einem (rot) markierten Baum-Knoten führen kennzeichnen keinen Zyklus! 31

Minimum Spanning Tree (Dijkstra/Prim) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Minimum Spanning Tree (Dijkstra/Prim) Ermittlung eines minimalen spannenden Baumes eines gewichteten Graphens nach Dijkstra/Prim O(|E| log |V|) Breitensuche unter Verwendung einer PriorityQueue (geringes Gewicht hat hohe Priorität) liefert einen minimalen spannenden Baum! 32

33 Dijkstra/Prim (1) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra/Prim (1) 1. Schritt: Start mit a 2. Schritt: []  (a,b,5) 3. Schritt: [(a,b,5)]  (a,c,3) 4. Schritt: (a,c,3)  [(a,b,5)] 33

34 Dijkstra/Prim (2) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra/Prim (2) 5. Schritt: [(a,b,5)]  (c,d,3) 6. Schritt: (c,d,3)  [(a,b,5)] 7. Schritt: [(a,b,5)]  (d,b,2) (d,b,2) ersetzt (a,b,5) 8. Schritt: [(d,b,2)]  (d,e,5) 34

35 Dijkstra/Prim (3) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra/Prim (3) 9. Schritt: (d,b,2)  [(d,e,5)] 10. Schritt: (d,e,5)  [] 11. Schritt: []  (e,f,2) 12. Schritt: [(e,f,2)]  (e,g,4) 35

36 Dijkstra/Prim (4) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra/Prim (4) 13. Schritt: (e,f,2)  [(e,g,4)] 14. Schritt: [(e,g,4)]  (f,g,3) (f,g,3) ersetzt (e,g,4) 15. Schritt: (f,g,3)  [] fertig 36

Minimum Spanning Tree (Kruskal) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Minimum Spanning Tree (Kruskal) Ermittlung eines minimalen spannenden Baumes eines gewichteten Graphens nach Kruskal O(|E| log|E|) Entfernen sämtlicher Kanten (führt zu einem Graphen mit |V| isolierten Knoten). Hinzufügen jener Kanten in nach Gewichten steigend sortierter Reihenfolge die die Anzahl der Komponenten verringern. 37

38 Kruskal (1) b≠d  union(b,d) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (1) b≠d  union(b,d) Die Knoten b und d befinden sich in unterschiedlichen Komponenten. Die Kante (b,d) verbindet die beiden isolierten Knoten b und d 38

39 Kruskal (2) e≠f  union(e,f) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (2) e≠f  union(e,f) Die Knoten e und f befinden sich in unterschiedlichen Komponenten. Die Kante (e,f) verbindet die beiden isolierten Knoten e und f 39

40 Kruskal (3) a≠c  union(a,c) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (3) a≠c  union(a,c) Die Knoten a und c befinden sich in unterschiedlichen Komponenten. Die Kante (a,c) verbindet die beiden isolierten Knoten a und c 40

41 Kruskal (4) c≠d  union(c,d) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (4) c≠d  union(c,d) Die Knoten c und d befinden sich in unterschiedlichen Komponenten. Die Kante (c,d) verbindet die beiden Komponenten ac und bd 41

42 Kruskal (5) f≠g  union(f,g) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (5) f≠g  union(f,g) Die Knoten f und g befinden sich in unterschiedlichen Komponenten. Die Kante (f,g) verbindet die Komponente ef und den isolierten Knoten g 42

Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (6) e=g Die Knoten e und g befinden sich in derselben Komponente efg. Die Kante (e,g) ist nicht Bestandteil des minimalen spannenden Baumes! 43

Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (7) a=b Die Knoten a und b befinden sich in derselben Komponente abcd. Die Kante (a,b) ist nicht Bestandteil des minimalen spannenden Baumes! 44

45 Kruskal (8) d≠e  union(d,e) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kruskal (8) d≠e  union(d,e) Die Knoten d und e befinden sich in unterschiedlichen Komponenten. Die Kante (d,e) verbindet die Komponente abcd und efg 45

Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Ermittlung aller von einem Startknoten ausgehenden kürzesten Wege eines gewichteten Graphens nach Dijkstra O(|E| log|V|) Breitensuche unter Verwendung einer PriorityQueue (geringe Entfernung vom Startknoten hat hohe Priorität) ordnet jedem Knoten den kürzesten Weg vom Startknoten zu! 46

47 Dijkstra (1) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra (1) 1. Schritt: Start mit a 2. Schritt: []  (a,b,5) 3. Schritt: [(a,b,5)]  (a,c,3) 4. Schritt: (a,c,3)  [(a,b,5)] 47

48 Dijkstra (2) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra (2) 5. Schritt: [(a,b,5)]  (c,d,6) 6. Schritt: (a,b,5)  [(c,d,6)] 7. Schritt: [(c,d,6)] (b,d,7) > (c,d,6) 8. Schritt: (c,d,6)  [] 48

49 Dijkstra (3) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra (3) 9. Schritt: []  (d,e,11) 10. Schritt: (d,e,11)  [] 11. Schritt: []  (e,f,13) 12. Schritt: [(e,f,13)]  (e,g,15) 49

50 Dijkstra (4) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra (4) 13. Schritt: (e,f,13)  [(e,g,15)] 14. Schritt: [(e,g,15)] (f,g,16) > (e,g,15) 15. Schritt: (e,g,15)  [] fertig 50

Alle kürzesten Wege von a: Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Dijkstra (5) Alle kürzesten Wege von a: a-c 3 a-b 5 a-c-d 6 a-c-d-e 11 a-c-d-e-f 13 a-c-d-e-g 15 51

52 k aik akj i j Transitive Hülle Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Transitive Hülle Adjazenzmatrix a: boolean a[][] = new boolean[n][n]; Transitive Hülle: All i,j,k: 0≤i,j,k<n: a[i][k] and a[k][j]  a[i][j] k aik akj i j 52

Algorithmus von Warshall Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Transitive Hülle Algorithmus von Warshall O(|V|3) for (int k=0; k<n; k++) for (int i=0; i<n; i++) for (int j=0; j<n; j++) if (a[i][k] && a[k][j]) a[i][j] = true; oder a[i][j] = a[i][j] || (a[i][k] && a[k][j]); 53

54 Kürzeste Wege Algorithmus von Floyd O(|V|3) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Kürzeste Wege Algorithmus von Floyd O(|V|3) Adjazenzmatrix a: double a[][] = new double[n][n]; aij ... Entfernung von i nach j aij = ∞ falls kein Weg von i nach j for (int k=0; k<n; k++) for (int i=0; i<n; i++) for (int j=0; j<n; j++) a[i][j] = min(a[i][j], a[i][k] + a[k][j]); 54

55 Floyd (1) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Floyd (1) Adjazenzmatrix es führt kein Weg übera a - b -d (7) a - c -d (6)< a - b -d (7) 55

56 Floyd (2) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Floyd (2) a -c -d -e (11) b -d -e (7) c -d -e (8) a - c -d -e -f (13) 56

57 Floyd (3) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Floyd (3) a - c -d -e -g (15) b -d -e -f (9) b -d -e -g (11) c -d -e -f (10) 57

58 Floyd (4) Helmut Schauer Educational Engineering Lab Department for Information Technology University of Zurich Floyd (4) d -e -f (7) d -e -g (9) 58