Algorithmen & Datenstrukturen 2 Praktikum 3

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

Breiten- und Tiefensuche in Graphen

Graphen: Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen 2

10 Graphenalgorithmen in Java

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.

Algorithmen und Datenstrukturen 2

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

ADS: Algorithmen und Datenstrukturen 2

Datenstrukturen. Mariano Zelke. Sommersemester 2012

C++, LEDA und STL Visualisierung minimal/maximal aufspannender Bäume

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Algorithmen und Datenstrukturen 2-2. Seminar -

Kapitel 4: Minimal spannende Bäume Gliederung der Vorlesung

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

3. Musterlösung. Problem 1: Boruvka MST

1 topologisches Sortieren

Routing Algorithmen. Begriffe, Definitionen

Algorithmen und Datenstrukturen 2

Vorlesung 4 BETWEENNESS CENTRALITY

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Kürzeste Wege in Graphen. Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Projekt AGB-10 Fremdprojektanalyse

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Datenstrukturen & Algorithmen

8 Diskrete Optimierung

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Das Briefträgerproblem

4 Greedy-Algorithmen (gierige Algorithmen)

Algorithmik Funke/Bahrdt/Krumpe/Mendel/Seybold SS Übungsblatt 4

Statistische Untersuchungen zu endlichen Funktionsgraphen

Maximaler Fluß und minimaler Schnitt. Von Sebastian Thurm

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Anmerkungen zur Übergangsprüfung

Grundlagen der Künstlichen Intelligenz

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Datenstrukturen. Mariano Zelke. Sommersemester 2012

EndTermTest PROGALGO WS1516 A

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Algorithmen und Datenstrukturen Kapitel 10

Customization (Zuschneiden)

JAVA KURS COLLECTION

Grundwissen Informatik Q11/12 Fragenkatalog

Konzepte der Informatik

Kapitel 6: Graphalgorithmen Gliederung

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Verwendung der Visage Java-API

Fully dynamic algorithms for the single source shortest path problem.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Vorlesung 3 MINIMALE SPANNBÄUME

Tutoraufgabe 1 (2 3 4 Bäume):

Lehrerbildungszentrum Informatik an der Universität Göttingen

Effiziente Algorithmen I

Wissensbasierte Systeme

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Guten Morgen und Willkommen zur Saalübung!

Gliederung. Definition Wichtige Aussagen und Sätze Algorithmen zum Finden von Starken Zusammenhangskomponenten

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Institut für Mathematik Geometrie und Lineare Algebra J. Schönenberger-Deuel. Aufgabe 1. Wir geben nur zwei von sehr vielen möglichen Strategien.

Maximale s t-flüsse in Planaren Graphen

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr

Algorithmen und Datenstrukturen

8 Graphrepräsentation

Abstrakt zum Vortrag im Oberseminar. Graphdatenbanken. Gero Kraus HTWK Leipzig 14. Juli 2015

Seminarvortag zum Thema Virtual Private Network Design im Rahmen des Seminars Network Design an der Universität Paderborn

Gyarmati Michael p1/15. Softwarepraktikum. Gyarmati Michael

Flüsse, Schnitte, bipartite Graphen. Martin Oettinger

Wissensbasierte Systeme

Algorithmen für Routenplanung 11. Vorlesung, Sommersemester 2012 Daniel Delling 6. Juni 2012

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

Die k kürzesten Wege in gerichteten Graphen

14. Rot-Schwarz-Bäume

Algorithmen und Datenstrukturen Graphen - Einführung

NP-Vollständigkeit. Krautgartner Martin ( ) Markgraf Waldomir ( ) Rattensberger Martin ( ) Rieder Caroline ( )

Algorithmen und Datenstrukturen Suchbaum

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Binärbäume. Prof. Dr. E. Ehses,

Algorithmen und Datenstrukturen (WS 2007/08) 63

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48

WORKFLOW DESIGNDOKUMENT

Uninformierte Suche in Java Informierte Suchverfahren

Internet Routing. SS 2012 Grundlagen der Rechnernetze Internetworking

Klausur Datenstrukturen und Algorithmen SoSe 2012

Tutorium Algorithmen & Datenstrukturen

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Java Einführung Collections

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

SS 2005 FAU Erlangen Eine Wegeplanungs-Strategie. Jeremy Constantin, Michael Horn, Björn Gmeiner

Teil V. Generics und Kollektionen in Java

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Schulinterner Lehrplan für das Fach Informatik der Sekundarstufe II an der Bettine von Arnim Gesamtschule

Graphentheorie. Organisatorisches. Organisatorisches. Organisatorisches. Rainer Schrader. 23. Oktober 2007

Randomisierte Algorithmen

Algorithmen auf Graphen. Kapitel V. Algorithmen auf Graphen

Inhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2.

Praktikum Planare Graphen

Transkript:

Algorithmen & Datenstrukturen 2 Praktikum 3 Thema: Graphalgorithmen Sommersemester 2016 Prof. Dr. Christoph Karg Hochschule Aalen Dieses Praktikum widmet sich dem Thema Graphalgorithmen. Ziel ist die Implementierung der in der Vorlesung behandelten Algorithmen und Datenstrukturen. Auf dem Vorlesungsserver lagert wie üblich ein ZIP Archiv mit dem Java Quellcode, der im folgenden vervollständigt bzw. erweitert wird. Das Archiv enthält folgende Klassen: Name Paket Beschreibung Graph graph Interface zum Zugriff auf Graphdatenstrukturen AdjListGraph graph Implementierung des Graph Interfaces BreadthFirstSearch graph Klasse zur Durchführung einer Breitensuche DepthFirstSearch graph Klasse zur Durchführung einer Tiefensuche StronglyConnectedComponents graph Klasse zur Berechnung der Starken Zusammenhangskomponenten in einem Graphen MinimumSpanningTree graph Klasse zur Berechnung eines minimal aufspannenden Baums SingleSourceShortestPath graph Klasse zur Berechnung von kürzesten Pfaden ausgehend von einem Knoten Hinweis: Mehrere Graphalgorithmen verwenden intern eine Priority Queue. Ein Binomial Heap (siehe Praktikum 1) ist für diesen Zweck hervorragend geeignet.

Im Rahmen dieses Praktikums werden gerichtete Graphen mit gewichteten Kanten untersucht. Die Knoten selbst sind Strings. Ein Beispiel für einen solchen Graphen ist der Graph G 1 : b 31 h 16 22 28 d 27 23 15 18 a 29 g 12 k 20 35 25 f Der Einfachheit halber werden bei Graphen das Kantengewicht nicht angegeben, wenn alle Kanten das Gewicht 1 haben. Ein solcher Graph ist der Graph G 2 : a c e b d f g h i s k l

Aufgabe 1. Der Zugriff auf einen Graphen wird mit dem Interface Graph festgelegt. Studieren Sie den entsprechenden Quellkode und beantworten Sie die folgenden Fragen: a) Wie wird die Knotenmenge des Graphen festgelegt? b) Wie fügt man eine gerichtete Kante in den Graphen ein? c) Gibt es eine Methode, um eine ungerichtete Kante in den Graphen einzufügen? Was passiert in einem solchen Fall? d) Kann man eine Kante aus dem Graphen löschen? e) Kann man einen Knoten aus dem Graphen löschen? Aufgabe 2. Nach Festlegung des Interfaces wird nun eine Datenstruktur zum Speichern eines Graphen implementiert. Es handelt sich hierbei um eine (leicht) modifizierte Form der Adjazenzliste, bei der die von Java bereitgestellte TreeMap Datenstruktur eingesetzt wird. Konkret werden die Knoten und Kanten in dem Attribut TreeMap<String,TreeMap<String,Float>> adj list gespeichert. Die äußere Tabelle enthält für jeden Knoten des Graphen eine Tabelle vom Typ TreeMap<String,Float>. Diese Tabelle speichert die Nachbarn eines Knotens (d.h. die vom Knoten ausgehenden Kanten) mit zugehörigem Gewicht. a) Implementieren Sie in der Klasse AdjListGraph alle Methoden des Graph Interfaces. b) Speichern Sie die Graphen G 1 und G 2 in Instanzen der Klasse AdjListGraph. Aufgabe 3. Die Breitensuche ist ein elementarer Suchalgorithmus für Graphen. Dieser wird in der Klasse BreadthFirstSearch implementiert. a) Untersuchen Sie die in der Klasse enthaltenen Datenstrukturen. Wie wird die Knotenfärbung, die Abstandsinformation und die Vorgängerinformation gespeichert? b) Implementieren Sie in der Methode search(graph g, String s) die Breitensuche in einem Graphen G ausgehend vom Startknoten s. c) Führen Sie im Graphen G 2 ausgehend vom Knoten s eine Breitensuche durch. d) Implementieren Sie die Methode isreachable(string u), mit der man abfragen kann, ob der Knoten u vom Startknoten s aus erreichbar ist? e) Sind im Graphen G 2 die Knoten a und g von s aus erreichbar?

Aufgabe 4. Ein weiterer wichtiger Suchalgorithmus ist die Tiefensuche. Für dessen Implementierung ist die Klasse DepthFirstSearch a) Untersuchen Sie die in der Klasse enthaltenen Datenstrukturen. Wie wird die Färbung, die Entdeckungs- und Anschlusszeit und die Vorgängerinformation eines Knotens gespeichert? b) Implementieren Sie die Methode visit(graph g, String u), die ausgehend vom Knoten u eine Tiefensuche durchführt. c) Implementieren Sie die Methode search(graph g) die im Graphen G eine Tiefensuche durchführt. d) Führen Sie im Graphen G 2 eine Tiefensuche durch. Geben Sie für jeden Knoten die Entdeckungs- und Beendigungszeit sowie die Vorgängerinformation aus. Wieviele Bäume enthält der Depth-First Wald und wie sind diese aufgebaut? Aufgabe 5. Eine interessante Anwendung der Tiefensuche ist die Berechnung der starken Zusammenhangskomponenten in einem gerichteten Graphen. Dieser Algorithmus wird durch die Methoden der Klasse StronglyConnectedComponents implementiert. a) Untersuchen Sie die in der Klasse enthaltenen Datenstrukturen. Wie wird die Färbung, die Entdeckungs- und Anschlusszeit und die Vorgängerinformation eines Knotens gespeichert? b) Implementieren Sie in der Methode computetranspose(graph g) einen Algorithmus, der den transponierten Graphen G T von G berechnet. c) Implementieren Sie die Methode visit(graph g, String u), die ausgehend vom Knoten u eine Tiefensuche in G durchführt. Hinweis: Diese Methode ist identisch mit der Methode in DepthFirstSearch. d) Implementieren Sie die Methode search(graph g) zur Durchführung einer Tiefensuche in G, wobei die Knoten in absteigender Reihenfolge der Beendigungszeiten durchlaufen werden. Hinweis: Um die Knoten anhand ihrer Endzeiten zu durchlaufen, wird eine TreeMap<Integer,String> node order eingesetzt, in der alle Zeit-Knotenpaare gespeichert werden. Da die Map die Schlüssel in aufsteigender Reihenfolge speichert, durch läuft der Iterator die Elemente in der aufsteigenden und somit verkehrten Reihenfolge. Dies kann man verhindern, indem man vor dem Einfügen der Elemente die Zeiten negiert. e) Implementieren Sie die Berechnung der Starken Zusammenhangskomponenten in der Methode compute(graph g).

f) Berechnen Sie die Starken Zusammenhangskomponenten des Graphen G 2. Aufgabe 6. Der minimale Spannbaum eines Graphen wird mittels der Methoden der Klasse MinimumSpanningTree berechnet. a) Untersuchen Sie die in der Klasse enthaltenen Datenstrukturen. Wie wird die Vorgängerinformation eines Knotens gespeichert? b) Implementieren Sie in der Methode compute(graph g, String s) den Algorithmus von Prim, der ausgehend von s einen minimalen Spannbaum von G berechnet. c) Berechnen Sie mit Ihrem Algorithmus ausgehend vom Knoten a einen minimal aufspannenden Baum des Graphen G 1. Aufgabe 7. Die letzte Aufgabe des Praktikums besteht in der Implementierung von Algorithmen zur Berechnung von kürzesten Pfaden. Hierzu dient die Klasse SingleSourceShortestPath. a) Untersuchen Sie die in der Klasse enthaltenen Datenstrukturen. Wie wird die Vorgängerinformation eines Knotens gespeichert? b) Implementieren Sie die Methode initsinglesource(graph g, String s) zur Initialisierung der für die Suche benötigten Datenstrukturen. c) Implementieren Sie die Methode relax(graph g, String u, String v) zur Durchführung eines Relaxationsschritts. d) Implementieren Sie den Algorithmus von Bellman und Ford in der Methode bellmanford(graph g, String s). e) Implementieren Sie den Algorithmus von Dijkstra in der Methode dijkstra(graph g, String s). f) Berechnen Sie im Graphen G 1 alle kürzesten Pfade die vom Knoten a ausgehen. Verwenden Sie hierzu sowohl den Algorithmus von Bellman und Ford als auch den Dijkstra Algorithmus.