Institut für Programmierung Konzepte der Informatik Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 12.10.2016 Technische Universität Braunschweig, IPS
Inhaltsverzeichnis Schilda-Rallye Was steckt dahinter? Darstellung von Graphen Zusammenfassung Datenstrukturen 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 2 Institut für Programmierung
Überblick Schilda-Rallye Was steckt dahinter? Darstellung von Graphen Zusammenfassung Datenstrukturen 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 3 Institut für Programmierung
Schilda-Rallye Stadtplan Der Stadtrat hat vor kurzem beschlossen, alle Straßen zu Einbahnstraßen zu machen. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 4 Institut für Programmierung
Schilda-Rallye Problemstellung Die Fahrzeuge von Schilda-Taxi warten auf den Hotels Adler und Gozo sowie auf dem Parkplatz der Pension Kapitol: Aufgrund der neuen Verkehrsführung benötigen die Fahrer einen Plan, wie sie auf dem kürzesten Weg von ihrem Standort zu allen anderen Hotels kommen. Eine Entfernungstabelle ist auch zur Berechnung der neuen Tarife notwendig. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 5 Institut für Programmierung
Schilda-Rallye Markierung der Kreuzungen
Schilda-Rallye Abstrakte Stadtplan
Schilda-Rallye Erste Schritt
Schilda-Rallye Fortsetzung (1)
Schilda-Rallye Fortsetzung (2)
Schilda-Rallye Fortsetzung (3)
Schilda-Rallye Fortsetzung (4)
Schilda-Rallye Fortsetzung (5)
Schilda-Rallye Fortsetzung (6)
Schilda-Rallye Fortsetzung (7)
Schilda-Rallye Fortsetzung (8)
Schilda-Rallye Fortsetzung (9)
Schilda-Rallye Fortsetzung (10)
Schilda-Rallye Fortsetzung (11)
Schilda-Rallye Fortsetzung (12)
Schilda-Rallye Fortsetzung (13)
Schilda-Rallye Fortsetzung (14)
Schilda-Rallye Fortsetzung (16)
Schilda-Rallye Fortsetzung (17)
Schilda-Rallye Fortsetzung (18)
Schilda-Rallye Fortsetzung (19)
Schilda-Rallye Fortsetzung (20)
Schilda-Rallye Fortsetzung (21)
Schilda-Rallye Fortsetzung (22)
Schilda-Rallye Ende
Schilda-Rallye Entfernungstabelle Hotel Entfernung (km) Adler 0,0 Bogart 11,5 Club 9,7 Doge 8,1 Emilio 3,7 Fromm 6,5 Gozo 6,2 Holunder 7,6 Iliona 11,4 Jorge 9,8 Kapitol 10,7 Lundt 7,9 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 31 Institut für Programmierung
Überblick Schilda-Rallye Was steckt dahinter? Darstellung von Graphen Zusammenfassung Datenstrukturen 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 32 Institut für Programmierung
Was steckt dahinter? Einleitung Die besprochenen Probleme gehören in das Umfeld der so genannten Graphenalgorithmen. Ein Graph besteht hierbei aus einer Menge von Knoten und einer Menge von Kanten, die zwischen den Knoten verlaufen. Die Knoten (Vertices) werden oft als Kreise und die Kanten (Edges) als Linien oder Pfeile dazwischen dargestellt. Man unterscheidet ungerichtete Graphen (ohne Pfeil), bei denen die Verbindung zweier Konten in beide Richtungen geht und gerichtete Graphen (mit Pfeil). Wozu ist aber ein Graph gut? Wie andere Modelle in der Informatik kann er ein Ausschnitt der Wirklichkeit modellieren, um diese einfacher zu verstehen und zu analysieren. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 33 Institut für Programmierung
Was steckt dahinter? Anforderungen Aufgrund der vielfältigen Anwendungen gibt es auch eine Menge von Algorithmen auf Graphen. Der Dijkstra-Algorithmus ist hier ein sehr bekannter Vertreter. Was zeichnet einen guten Algorithmus aus? Er muss zuerst einmal die gestellte Aufgabe lösen. Wichtiges Kriterium ist außerdem, dass dieser die Aufgabe möglichst schnell löst und auch bei großen Problemen nicht in die Knie geht. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 34 Institut für Programmierung
Was steckt dahinter? Zeitbedarfs Wir betrachten wie stark der Zeitbedarf mit der Problemgröße ansteigt. Am Beispiel der Landkarte kann dies sehr gut demonstriert werden. Eine Problemgröße ist zum Beispiel die Anzahl der Städte auf der Landkarte. Betrachten wir jetzt noch einmal den Brute-Force-Ansatz zur Bestimmung des kürzesten Weges: Bestimme alle möglichen Wege vom Start zum Ziel und suche davon den kürzesten. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 35 Institut für Programmierung
Was steckt dahinter? Brute-Force-Methode Im schlechtesten Fall müssen also alle von einem Punkt ausgehenden Wege bestimmt werden. Außerdem sind im schlechtesten Fall alle Knoten mit allen anderen Knoten verbunden (vollständiger Graph). Für drei Knoten ist es noch kein Problem, die Anzahl möglicher Wege vom Startpunkt S aus zu bestimmen. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 36 Institut für Programmierung
Was steckt dahinter? Brute-Force-Methode Mit jedem zusätzlichen Knoten steigt die Anzahl der möglichen Wege stark an. Zeichnerisch die Lösung zu bestimmen ist dann nicht mehr praktikabel. Man kann die Anzahl der Knoten auch rechnerisch bestimmen. Für den Graphen mit vier Knoten gilt, dass man ihn aus zwei Komponenten zusammensetzen kann: ein einzelner Knoten S plus ein Graph mit drei Knoten. Da der bekannte Graph drei Knoten besitzt, kann vom neuen Knoten S auf drei Arten ein Weg zum bekannten Graphen begonnen werden. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 37 Institut für Programmierung
Was steckt dahinter? Brute-Force-Methode Im 3er-Graphen wird dann auf die bereits ermittelte Weise ein Weg gesucht. Daher ist die Anzahl möglicher Wege im 4er-Graphen 3 2 = 6. Für einen 5er-Graphen gibt es vier Möglichkeiten, Wege vom neuen Knoten zum 4er-Graphen zu beginnen. Die Anzahl der Wege beträgt daher 4 6 = 24. Auf diese Weise kann man ableiten, dass in einem vollständigen Graphen mit n Knoten (n 1)! verschiedene Wege von einem gesetzten Startpunkt ausgehen. Da für jeden der Wege n 1 Streckenabschnitte eingerechnet werden müssen, bedarf es für die Brute-Force-Methode ungefähr (n 1)(n 1)! Berechnungen, um den kürzesten Weg zu finden. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 38 Institut für Programmierung
Was steckt dahinter? Brute-Force-Methode # Knoten Schritte 3 4 4 18 5 96 6 600 7 4.320 8 35.280 9 322.560 10 3.265.920 15 1.220.496.076.800 20 2.311.256.907.767.808.000 50 29805811337679110482740356002743473467490088737581301760000000000 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 39 Institut für Programmierung
Was steckt dahinter? Brute-Force-Methode Für 100 Knoten sind im schlimmsten Fall bereits 92392953289504711154882246467704033485808808581737805 25390703425626542399329761645528520493363949531033911 60941618951520668673358807695360000000000000000000000 Berechnungen nötig. Wenn auch nur alle 12.903 Gemeinden Deutschlands als Knoten in die Suche einbezogen werden, sind 9, 88 10 47438 Berechnungen nötig. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 40 Institut für Programmierung
Überblick Schilda-Rallye Was steckt dahinter? Darstellung von Graphen Zusammenfassung Datenstrukturen 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 41 Institut für Programmierung
Darstellung von Graphen Überlegung Computer kennt keine graphische Darstellung Insbesondere keine Kanten und Knoten Abstraktion notwendig Überführung der graphischen Darstellung in eine Datenstruktur 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 42 Institut für Programmierung
Darstellung von Graphen Adjazenzmatrix Idee für ungerichtete Graphen: Sei n die Anzahl der Knoten. Benutze eine n n Matrix. Wenn eine Kante zwischen Knoten a und b existiert, dann trage in Zeile a und Spalte b eine 1 ein, andernfalls eine 0. Verfahre ebenso mit Zeile b und Spalte a. 0 1 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 1 1 0 1 1 0 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 43 Institut für Programmierung
Darstellung von Graphen Adjazenzmatrix Beispiel für ungerichteten Graphen mit Gewichten: Symmetrie bleibt erhalten. Anstelle von einer 1 trage das Kantengewicht ein. 0 7 8 0 5 7 0 0 1 0 8 0 0 2 6 0 1 2 0 9 5 0 6 9 0 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 44 Institut für Programmierung
Darstellung von Graphen Adjazenzmatrix Beispiel für gerichteten Graphen mit Gewichten: Keine Symmetrie mehr. 0 7 8 0 5 0 0 0 0 0 0 0 0 2 0 0 1 0 0 9 0 0 6 0 0 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 45 Institut für Programmierung
Darstellung von Graphen Adjazenzmatrix Anstatt einer Matrix wird eine verkettete Liste benutzt. Besonders geeignet für gerichtete Graphen Die Basisstruktur bildet die Liste aller Knoten. Für jeden Knoten wird eine Liste der Nachfolger entlang gerichteter Kanten abgespeichert. 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 46 Institut für Programmierung
Darstellung von Graphen Inzidenzmatrix Anstatt Verbindungen von Knoten zu Knoten darzustellen, wird hier die Nachbarschaft der Kanten zu den Knoten dargestellt. Jede Spalte enthält 2 von Null verschiedene Einträge e1 e2 e3 e4 e5 e6 e7 1 1 1 0 0 0 0 1-1 0 0 0-1 0 0 2 0-1 0 1 0 0-1 3 0 0 0-1 1 1 0 4 0 0-1 0 0-1 1 5 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 47 Institut für Programmierung
Überblick Schilda-Rallye Was steckt dahinter? Darstellung von Graphen Zusammenfassung Datenstrukturen 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 48 Institut für Programmierung
Zusammenfassung Datenstrukturen Listen Array s (zusammenhängender Speicher) (doppelt) Verkettete Listen Stapel 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 49 Institut für Programmierung
Zusammenfassung Datenstrukturen Graphen Bäume 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 50 Institut für Programmierung
Zusammenfassung Graphentheorie Brute-Force-Methode vs. Greedy-Algorithmen Darstellung von Graphen Datenstrukturen (Zusammenfassung) Morgen: Codierungen 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 51 Institut für Programmierung
Danke Vielen Dank für Ihre Aufmerksamkeit! 12.10.2016 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe Seite 52 Institut für Programmierung