Graphalgorithmen. Graphen

Ähnliche Dokumente
10 Graphenalgorithmen in Java

Breiten- und Tiefensuche in Graphen

Java. Wir verwenden oft Java für Datenstrukturen und Algorithmen. Die Vorlesung ist aber von der Programmiersprache unabhängig.

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

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

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Objektorientierte Programmierung

1 Polymorphie (Vielgestaltigkeit)

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Einstieg in die Informatik mit Java

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester / 32

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Java Einführung Abstrakte Klassen und Interfaces

public class SternchenRechteckGefuellt {

Java-Schulung Grundlagen

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

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

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

Gebundene Typparameter

Java Einführung Collections

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

EndTermTest PROGALGO WS1516 A

9.4.1 Wegsuche von a nach z

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

1. Grundlegende Konzepte in Java (6 Punkte)

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

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

Geordnete Binärbäume

Praktische Übung 'JUnit-Test'

Vorlesung 09: Mengen. Peter Thiemann SS 2010

Einstieg in die Informatik mit Java

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst.

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Graphen: Datenstrukturen und Algorithmen

Kapitel 6. Vererbung

Informatik II Musterlösung

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

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Programmierkurs Java

Kapitel 6. Vererbung

// Zeigt den insgesamt einbezahlten Betrag auf der Bank. // Muss 1600 GE sein. System.out.println("Current Bank balance: " + b.

Objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Musterlösungen zur Klausur Informatik 3

368 4 Algorithmen und Datenstrukturen

Java Schulung (Java 2 Java Development Kit 5 / 6)

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Kapitel 6. Vererbung

Moderne Programmierparadigmen Objekt-Orientierung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Projekt AGB-10 Fremdprojektanalyse

Vererbung. Martin Wirsing. Ziele. Vererbung

JAVA - Methoden

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Suchen und Sortieren

Java für Computerlinguisten

Einführung in die Informatik 2

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() {

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Einführung in die Programmierung für Wirtschaftsinformatik

Java Generics & Collections

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Probeklausur: Programmierung WS04/05

Algorithmische Methoden der Netzwerkanalyse

Agenda. (1) Einleitung (2) neo4j. (3) Beispiel + Demo

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

Distributed Computing Group

8 Diskrete Optimierung

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Handbuch für die Erweiterbarkeit

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Informatik ist viel mehr als Delphi-Programmierung!

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Benutzerauthentifizierung und Zugriffsschutz mit JAAS

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

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.

13. Tutorium zu Programmieren

Java Einführung Methoden. Kapitel 6

Algorithmen und Datenstrukturen Suchbaum

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Überblick. Einführung Graphentheorie

11. GUI-Programmierung mit SWING Überblick

Probeklausur: Programmierung WS04/05

Klassische Themen der Computerwissenschaft Constraint Programming: Exercises. Gruppe: 100. Inhaltsverzeichnis

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 {

5.5.8 Öffentliche und private Eigenschaften

2 Java: Bäume. 2.1 Implementierung von Bäumen. 2.2 Implementierung eines binären Suchbaums. 2.3 Traversierung von Bäumen

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Tagesprogramm

Transkript:

(Folie 270, Seite 67 im Skript) Graphen

(Folie 271, Seite 67 im Skript) Graphen Definition Ein ungerichteter Graph ist ein Paar (V, E), wobei V die Menge der Knoten und E ( V 2) die Menge der Kanten ist. Definition Ein gerichteter Graph ist ein Paar (V, E), wobei V die Menge der Knoten und E V V die Menge der Kanten ist. Oft betrachten wir Graphen mit Knoten- oder Kantengewichten. Dann gibt es zusätzlich Funktionen V R oder E R.

(Folie 272, Seite 68 im Skript) Adjazenzmatrix 1 2 3 1 1 0 0 1 1 1 0 1 1 4 5 Speicherbedarf: Θ( V 2 ) Für gerichtete Graphen wird die ganze Matrix verwendet.

(Folie 273, Seite 68 im Skript) 1 Adjazenzliste 2 3 4 5 1 2, 3 2 1, 3, 4, 5 3 1, 2, 5 4 2, 5 5 2, 3, 4 Speicherbedarf: Θ( V + E ). In O(n 2 ) Schritten kann zwischen beiden Darstellungen konvertiert werden.

(Folie 274, Seite 68 im Skript) public class Graph { int n; //number of nodes int m; //number of edges Set Node nodes; Map Node, List Node, Edge neighbors; Wir wählen die Darstellung durch eine Adjazenzliste.

(Folie 275, Seite 68 im Skript) class Node implements Comparable Node { String name; double weight; static int uniq = 0; int f ; public Node() {f = uniq; name = ":" + uniq++; weight = 0.0; public Node(double w) {this(); weight = w; public String tostring() {return name; public int hashcode() {return f ; public boolean equals(object o) { if (this o) return true; if (!(o instanceof Node)) return false; return f ((Node)o).f ; public int compareto(node n) { if(weight n.weight) return f n.f ; else if(weight < n.weight) return 1; else return 1;

(Folie 276, Seite 68 im Skript) class Edge implements Comparable Edge { Node s, t; double weight; static int uniq = 0; int f ; public Edge(Node i, Node j) {f = uniq++; s = i; t = j; weight = 0; public Edge(Node i, Node j, double w) {this(i, j); weight = w; public double weight() {return weight; public void setweight(double d) {weight = d; public int hashcode() {return f ; public boolean equals(object o) { if (this o) return true; if (!(o instanceof Edge)) return false; return f ((Edge)o).f ; public int compareto(edge e) { if(weight e.weight) return f e.f ; else if(weight < e.weight) return 1; else return 1;

(Folie 277, Seite 68 im Skript) public Node addnode() { Node newnode = new Node(); nodes.insert(newnode); neighbors.insert(newnode, new List Node, Edge ()); //n++; return newnode;

(Folie 278, Seite 68 im Skript) public void addedge(node u, Node v, Double w) { neighbors.find(u).insert(v, new Edge(u, v, w)); m++; public boolean isadjacent(node u, Node v) { return neighbors.find(u).iselement(v);

Tiefensuche Tiefensuche (Folie 279, Seite 69 im Skript) Tiefensuche ist ein sehr mächtiges Verfahren, das iterativ alle Knoten eines gerichteten oder ungerichteten Graphen besucht. Sie startet bei einem gegebenen Knoten und färbt die Knoten mit den Farben weiß, grau und schwarz. Sie berechnet einen gerichteten Tiefensuchwald, der bei einem ungerichteten Graph ein Baum ist. Sie ordnet jedem Knoten eine Anfangs- und eine Endzeit zu. Alle Zeiten sind verschieden. Die Kanten des Graphen werden als Baum-, Vorwärts-, Rückwärts- oder Querkanten klassifiziert.

Tiefensuche Tiefensuche Beispiel (Folie 280, Seite 70 im Skript) 4/9 5/8 3/10 1/2 6/7 11/12 Die Kanten des Tiefensuchwaldes sind dick dargestellt. Ein Knoten ist anfangs weiß. Ein Knoten ist grau, während er aktiv ist. Danach wird er schwarz.

Tiefensuche (Folie 281, Seite 70 im Skript) public void DFS(Map Node, Integer d, Map Node, Integer f, Map Node, Node p) { SimpleIterator Node it; Map Node, Integer color = new Hashtable Node, Integer (); for(it = nodeiterator(); it.more(); it.step()) color.insert(it.key(), WHITE); int time = 0; for(it = nodeiterator(); it.more(); it.step()) if(color.find(it.key()) WHITE) time = DFS(it.key(), time, color, d, f, p);

Tiefensuche (Folie 282, Seite 70 im Skript) public int DFS(Node u, int t, Map Node, Integer c, Map Node, Integer d, Map Node, Integer f, Map Node, Node p) { d.insert(u, ++t); c.insert(u, GRAY ); Iterator Node, Edge adj; for(adj = neighbors.find(u).iterator(); adj.more(); adj.step()) if(c.find(adj.key()) WHITE) { p.insert(adj.key(), u); t = DFS(adj.key(), t, c, d, f, p); f.insert(u, ++t); c.insert(u, BLACK); return t;