Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

Man bestimme den „minimalen aufspannenden Baum“ des Graphen.
Single-Source Shortest Paths: SSSP
Minimum Spanning Tree: MST
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.
Informatik II – Kapitel 11
Kapitel 9: Graphdurchlauf
7.2 B-Bäume / B*-Bäume als Hilfsmittel zur Indexorganisation
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Kapitel 5. Stacks und Queues
Synonyme: Stapel, Keller, LIFO-Liste usw.
Gliederung Motivation / Grundlagen Sortierverfahren
Programmieren 2 Future Car Projekt Praktikum 6 - Graphen
Programmieren 2 Future Car Projekt Praktikum 6
Programmieren 2 Future Car Projekt Praktikum 6
FB Informatik Prof. Dr. R.Nitsch Programmieren 2 Future Car Projekt Praktikum 6 - Graphen Reiner Nitsch - Speichern von Graphen -
Sortieren mit Binären Bäumen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 – Graphen)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26 - Graphen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Algorithmentheorie 12 – Spannende Bäume minimalen Gewichts
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Katja Losemann Chris Schwiegelshohn
Minimum Spanning Tree: MST
Kapitel 2: Datenstrukturen
Programmiersprachen II Integration verschiedener Datenstrukturen
Vortrag über Graphen Von Jörg Hendricks.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Effiziente Algorithmen
Effiziente Algorithmen
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Kapitel 8: Graphalgorithmen 8. 1 Grundlagen 8
Kapitel 8: Graphalgorithmen 8. 1 Grundlagen 8
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
10 Graphen gerichtete und ungerichtete, mit Marken an Ecken und/oder Kanten Anwendungsgebiete: Verkehrsnetze, Kommunikationsnetze, Netzpläne, Spiele,...
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung der Algorithmus von Floyd Foliendesign:
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Graph_Algorithmen Gewichtete Graphen - Minimum Spanning Tree und shortest path aus Implementierungssicht Prof. Dr. Reiner Güttler.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Einfache Bäume Übung 13 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.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Adiazenzmatrix des Graphen
Referenten: Moritz S., Ina B. und Sebastian R.
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
 Präsentation transkript:

Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW

-2- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen 4.1 Einführung Definitionen (Wiederholung von Huckert)  Knoten  Kanten  gerichtet  ungerichtet  Nachbar (adjacent), Vorgänger (predecessor), Nachfolger (successor)  Kantenfolge (path), Pfeilfolge (directed path)  Zyklisch, zyklenfrei  verbunden, zusammenhängend, erreichbar

-3- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen Implementierung  Adjazenzmatrix  Adjazenzlisten  stack  queue

-4- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen 4.2 Basisoperation: Suchen von Knoten Anwendung: Erreichbarkeit Finde alle von Knoten x aus erreichbaren Knoten z.B. finde in einem integrierten Schaltkreis alle mit einem gegebenen Pin elektrisch verbundenen Pins Zwei Basisalgorithmen zum Suchen von Knoten:  Depth-First-Search DFS (Tiefensuche)  Breadth-First-Search BFS (Breitensuche)

-5- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen DFS Tiefensuche Benutzt einen stack und folgende Strategie:  Start: push (x), x sei der Startknoten der Suche  Regel 1: wenn möglich wähle einen noch nicht markierten Nachbar y des Top-Elements des stacks, markiere ihn als besucht und push(y)  Regel 2: wenn Regel 1 nicht angewendet werden kann, mache ein pop  Regel 3: wenn weder Regel 1 noch Regel 2 anwendbar sind => fertig

-6- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen Anwendung am Beispielapplet! Implementierung:  Klasse vertex mit  Nutzdaten  wasVisited Besucht  Klasse stack

-7- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen  Klasse graph (gerichtet oder ungerichtet) mit  Knotenmenge (z.B. als Array vertexList[])  Kantenmenge (z.B. als Adjazenzmatrix adjMat[][]  addVertex Knoten hinzufügen  addEdge Kante hinzufügen  displayVertex Knoten ausgeben  getAdjUnvisitedVertex noch nicht besuchten Nachbar finden  dfs die Tiefensuche selbst

-8- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen getAdjUnvisitedVertex noch nicht besuchten Nachbar finden // returns an unvisited vertex adj to v public int getAdjUnvisitedVertex(int v) { for(int j=0; j<nVerts; j++) if(adjMat[v][j]==1 && vertexList[j].wasVisited==false) return j; return -1; } // end getAdjUnvisitedVert()

-9- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen DFS public void dfs() // depth-first search { // begin at vertex 0 vertexList[0].wasVisited = true; // mark it displayVertex(0); // display it theStack.push(0); // push it while( !theStack.isEmpty() ) // until stack empty, { // get an unvisited vertex adjacent to stack top int v = getAdjUnvisitedVertex( theStack.peek() );

-10- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 4: Graph Algorithmen if(v == -1) // if no such vertex, theStack.pop(); else // if it exists, { vertexList[v].wasVisited = true; // mark it displayVertex(v); // display it theStack.push(v); // push it } } // end while // stack is empty, so we're done for(int j=0; j<nVerts; j++) // reset flags vertexList[j].wasVisited = false; } // end dfs

-11- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen BFS Breitensuche Benutzt eine queue und folgende Strategie  Start: setze current auf x  Regel 1: wenn möglich wähle einen noch nicht markierten Nachbar y von current, markiere ihn als besucht und theQueue.insert(y)  Regel 2: wenn Regel 1 nicht angewendet werden kann, nimm falls möglich ein Element y aus der queue, current = y  Regel 3: wenn Regel 2 nicht anwendbar ist => fertig

-12- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Beispiel am Applet Implementierung Wie DFS,  aber Klasse queue an Stelle von stack  bfs an Stelle von dfs

-13- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen public void bfs() // breadth-first search { // begin at vertex 0 vertexList[0].wasVisited = true; // mark it displayVertex(0); // display it theQueue.insert(0); // insert at tail int v2; while( !theQueue.isEmpty() ) // until queue empty, { int v1 = theQueue.remove(); // remove vertex at head

-14- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen while( (v2=getAdjUnvisitedVertex(v1)) != -1 ) { // get one, vertexList[v2].wasVisited = true; // mark it displayVertex(v2); // display it theQueue.insert(v2); // insert it } // end while } // end while(queue not empty) // queue is empty, so we're done for(int j=0; j<nVerts; j++) // reset flags vertexList[j].wasVisited = false; } // end bfs()

-15- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen 4.3 Minimum Spanning Trees MST (Gerüste) Anwendungsbeispiel:  integrierter Schaltkreis  Eliminierung „unnötiger“ Verbindungen  Vermeidung von Hitzeproblemen  Erleichtert Layout ...

-16- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen MST für ungewichtete Graphen In Graphentheorie:  Graph mit der Minimalanzahl von Kanten, um die Knoten miteinander zu verbinden  Es gibt i.d.R. mehrere Lösungen  Kantenanzahl ?  Zusammenhang mit DFS, BFS?

-17- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen Lösung:  Wie DFS oder BFS  Die „durchlaufenen“ Kanten ausgeben  I.d.R liefern DFS und BFS unterschiedliche (aber natürlich gleichwertige) Minimum Spanning Trees

-18- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen public void mst() // minimum spanning tree (depth first) { // start at 0 vertexList[0].wasVisited = true; // mark it theStack.push(0); // push it while( !theStack.isEmpty() ) // until stack empty { // get stack top int currentVertex = theStack.peek(); // get next unvisited neighbor int v = getAdjUnvisitedVertex(currentVertex);

-19- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 3: Folge Datenstrukturen if(v == -1) // if no more neighbors theStack.pop(); // pop it away else // got a neighbor { vertexList[v].wasVisited = true; // mark it theStack.push(v); // push it // display edge displayVertex(currentVertex); // from currentV displayVertex(v); // to v System.out.print(" "); } } // end while(stack not empty) Danach noch „Saubermachen“.