Algorithmen und Datenstrukturen, FS17 Prof Dr Christian Tschudin

Ähnliche Dokumente
Graphen: Datenstrukturen und Algorithmen

27. August 2013 Einleitung. Algorithmen und Datenstrukturen

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

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

4 Greedy-Algorithmen (gierige Algorithmen)

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

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

Programmiertechnik II

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

1 topologisches Sortieren

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

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

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

Codes und Informationsgehalt

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

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

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Algorithmen und Datenstrukturen 2

8 Diskrete Optimierung

Suchen und Sortieren Sortieren. Heaps

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Algorithmen und Datenstrukturen (WS 2007/08) 63

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen Suchbaum

13. Binäre Suchbäume

Algorithmen & Datenstrukturen 1. Klausur

Datenstrukturen. Mariano Zelke. Sommersemester 2012

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

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

Datenstrukturen und Algorithmen

Kapiteltests zum Leitprogramm Binäre Suchbäume

Breiten- und Tiefensuche in Graphen

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Anmerkungen zur Übergangsprüfung

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

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Programmierkurs Java

2. Lernen von Entscheidungsbäumen

368 4 Algorithmen und Datenstrukturen

Kurs 1613 Einführung in die imperative Programmierung

Programmiertechnik II

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Suchen und Sortieren

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Suchen und Sortieren (Die klassischen Algorithmen)

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Grundlagen der Programmierung 2. Bäume

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

Wirtschaftsinformatik I

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

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

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

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

Algorithmen II Vorlesung am

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

Kap. 4.2: Binäre Suchbäume

Laufzeit und Komplexität

WS 2013/14. Diskrete Strukturen

5. Tutorium zu Programmieren

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmierung in Python

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Fully dynamic algorithms for the single source shortest path problem.

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

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

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

Guten Morgen und Willkommen zur Saalübung!

Die k kürzesten Wege in gerichteten Graphen

Das Briefträgerproblem

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

4 Algorithmen und Datenstrukturen

Unterscheidung: Workflowsystem vs. Informationssystem

Einführung in die Informatik 1

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

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

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Überblick. Lineares Suchen

Aufgabe 3: Übersetzen Sie die folgenden natürlich-sprachlichen Aussagen in die Sprache der

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

Tutorium Algorithmen & Datenstrukturen

Einführung in die Java- Programmierung

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

HEUTE. Effizienzbeispiel: bekannte Version (Übung ) Mathematik: Was ist Effizienz? vollständige Induktion

Dr. Monika Meiler. Inhalt

8. Uninformierte Suche

Branch-and-Bound. Wir betrachten allgemein Probleme, deren Suchraum durch Bäume dargestellt werden kann. Innerhalb des Suchraums suchen wir

Algorithmen und Datenstrukturen

Transkript:

Departement Mathematik und Informatik Algorithmen und Datenstrukturen, FS17 Prof Dr Christian Tschudin 12. April 2017 Union-Find Datenstruktur Graphen I Robert E. Tarjan Algorithmen und Datenstrukturen, FS17 12. April 2017 2 / 30 Uebersicht 2017-04-12 Union-Find Datenstruktur (als Vorbereitung Graphen-Algorithmen) Graphen I: Definitionen Tiefen- und Breitensuche

Algorithmen und Datenstrukturen, FS17 12. April 2017 3 / 30 Union-Find Datenstruktur (1/13) In einem Graph: Miteinander verbunden sein ist eine Aequivalenzrelation. Definition a) Reflexiv: p ist mit p verbunden. b) Symmetrisch: Falls p mit q verbunden ist, dann ist auch q mit p verbunden. c) Transitiv: Falls p mit q verbunden ist und q mit r, dann ist p mit r verbunden. Eine Aequivalenzrelation partitioniert eine Objektmenge in Aequivalenzklassen: hier Graphen-Komponenten. Algorithmen und Datenstrukturen, FS17 12. April 2017 4 / 30 Union-Find Datenstruktur (2a/13) Wie viele Partitionen/Komponenten hat dieser Graph?

Algorithmen und Datenstrukturen, FS17 12. April 2017 5 / 30 Union-Find Datenstruktur (2b/13) Wie viele Partitionen/Komponenten hat dieser Graph? Algorithmen und Datenstrukturen, FS17 12. April 2017 6 / 30 Union-Find (3/13) Aufgabestellung: Datenstruktur bereitstellen, mit der effizient festgestellt werden kann, ob zwei Punkte miteinander verbunden sind Formulierung als Filter: Jedes neue Punkte-Paar nur dann ausgeben, wenn sie nicht miteinander verbunden sind.

Algorithmen und Datenstrukturen, FS17 12. April 2017 7 / 30 Union-Find (4/13) Anwendungen Bestimmung der Graphen-Komponenten in der Informatik: Netzwerke: soziale NW: sind zwei Personen verbunden? elektrisch: Leitung zwischen zwei Punkten? Internet: können zwei Knoten kommunizieren? Programmiersprachen, wo Aequivalenz von zwei Variablennamen deklariert werden kann: Nach einer Abfolgen von mehreren Deklarationen, sind zwei gegebene Namen äquivalenz? Mathematische Mengen Algorithmen und Datenstrukturen, FS17 12. April 2017 8 / 30 Union-Find (5/13) Abstrakter Datentyp (ADT) für Union-Find Datenstruktur: 1 public class UF { 2 UF(int N) // initialisiere für N Objekte 3 // mit "Namen" 0 bis N-1 4 void union(int p, int q) // füge Verbindung von p zu q hinzu 5 int find(int p) // in welcher Komponente ist p? 6 boolean connected(int p, int q) // "wahr" falls p und q in 7 // der gleichen Komponente sind 8 int count() // Anzahl gefundener Komponenten 9 } Wir bauen UF dynamisch auf: Anfänglich N Komponenten Punktepaare werden inkrementell dazugegeben, gegebenfalls zwei Komponenten vereint union() Jede Komponente hat einen Namen find()

Algorithmen und Datenstrukturen, FS17 12. April 2017 9 / 30 Union-Find (6/13) Kern der (ersten) Implementierung(en) ist int id[]: in welche Komponente fällt ein Punkt mit Namen i? Initialisierung mit id[i] = i; (anfänglich N Komponenten) union() muss dieses Feld nachführen Vier immer besser werdende union() Versionen: quick-find quick-union (Wald von Bäumen) weighted quick-union weighted quick-union mit Pfad-Kompression Algorithmen und Datenstrukturen, FS17 12. April 2017 10 / 30 Union-Find (7/13): Quick-Find 1 public int find(int p) { 2 return id[p]; 3 } 4 5 public void union(int p, int q) { 6 // versorgt p und q in selbe Komponente 7 int pid = find(p); 8 int qid = find(q); 9 // nichts zu tun fall schon in selber Komponente 10 if (pid == qid) 11 return; 12 // Die Komponente von p wird mit derjenigen von q vereint: 13 for (int i = 0; i < id.length; i++) 14 if (id[i] == pid) 15 id[i] = qid; 16 count--; // nun eine Komponente weniger 17 }

Algorithmen und Datenstrukturen, FS17 12. April 2017 11 / 30 Union-Find (8/13): Quick-Find Laufzeit von Quick-Find union() braucht zwischen N + 3 und 2N + 1 Zugriffe auf id[] falls vereint wird. Wird der UF ADT dynamisch aufgebaut (ein Punktepaar nach dem anderen einbauen), führt dies zu O(n 2 ). Wäre in der Praxis unbrauchbar für grössere N. Ziel: lineare Laufzeit...... d.h. konstante Zeit für union()! Algorithmen und Datenstrukturen, FS17 12. April 2017 12 / 30 Union-Find (9/13): Quick-Union Neuinterpretation von id[]: Eintrag zeigt auf anderen Komponentenname, oder sich selbst. 1 private int find(int p) { 2 // finde Komponenten-Name 3 while (p!= id[p]) 4 p = id[p]; 5 return p; 6 } 7 8 public void union(int p, int q) { 9 // "setze" p und q auf die gleiche Wurzel 10 int proot = find(p); 11 int qroot = find(q); 12 if (proot == qroot) 13 return; 14 id[proot] = qroot; 15 count--; // nun eine Komponente weniger 16 }

Algorithmen und Datenstrukturen, FS17 12. April 2017 13 / 30 Union-Find (10/13): Quick-Union Laufzeit von Quick-Union Wald von Bäumen Jeder Baum eine Komponente Wurzel ist Name der Komponente Mehr Aufwand in find(): Den Elternknoten folgen bis Wurzel gefunden ist Weniger Aufwand für union(): blosses Umhängen einer der Wurzeln statt Nachtragen von jedem Element der Komp. Komplexität von find(): hängt von der Baumhöhe ab! schlimmstenfalls O(n), union() bleibt quadratisch :-( Algorithmen und Datenstrukturen, FS17 12. April 2017 14 / 30 UF (11/13): Weighted Quick-Union Idee: Den leichteren Baum umhängen um Gesamtbaumhöhe möglichst klein zu halten. Braucht neu Gewicht eines Baumes (nur im Wurzelknoten nachgeführt), in sz[] 1 // während Initialisierung: 2 sz = new int[n]; 3 for (int i = 0; i < N; i++) 4 sz[i] = 1; 5 6 public void union(int p, int q) { 7 // "setze" p und q auf die gleiche Wurzel 8 int i = find(p); 9 int j = find(q); 10 if (i == j) return; 11 // hänge leichteren Baum an den schweren: 12 if (sz[i] < sz[j]) { 13 id[i] = j; 14 sz[j] += sz[i]; 15 } else { 16 id[j] = i; 17 sz[i] += sz[j]; 18 } 19 count--; // nun eine Komponente weniger 20 }

Algorithmen und Datenstrukturen, FS17 12. April 2017 15 / 30 UF (12/13): Weitghed Quick-Union Laufzeit von Weighted Quick-Union Baumhöhe wächst mit log n Damit Komplexität für dynamischen Aufbauen der Union-Find Datenstruktur: O(n log n) Geht es noch besser? Idee: Pfadkompression (gewisse) Knoten zeigen direkt auf Wurzel Implementierung in find(): zweite Schleife: Jeden besuchten Knoten nachführen (zeigt direkt auf Wurzel), allerdings wird der Baum etwas entstellt In der Praxis kaum messbarer Gewinn theoretisches Resultat, dass dies optimal ist. Algorithmen und Datenstrukturen, FS17 12. April 2017 16 / 30 Union-Find (13/13): Zusammenfassung Union-Find wird uns beim Graphen-Algorithmus von Kruskal wieder begegnen.

Algorithmen und Datenstrukturen, FS17 12. April 2017 17 / 30 Robert E. Tarjan (1948 ) Bachelor in Mathematics (California Inst. of Techn. 1969) Masters in Computer Science (Stanford 1971) Ph.D. in Computer Science (Stanford 1972) Algorithmen (und Datenstrukturen): Bestimmung aller starken Zusammenhangskompon. Median von Medianen-Selektion in linearer Zeit Planarität-Test Fibonacci-Heap, Splay-Bäume Laufzeit-Analysen (u.a. von Union-Find) Nevanlinna-Preis für herausragende Beiträge zu mathematischen Aspekten der Informationswissensch. (1982) Turing-Awards 1986 Algorithmen und Datenstrukturen, FS17 12. April 2017 18 / 30 Einführung in Graphen Uebersicht Beispiel-Fragestellung Definitionen Tiefensuche Breitensuche...

Algorithmen und Datenstrukturen, FS17 12. April 2017 19 / 30 Das Königsberger Brückenproblem Gibt es einen geschlossenen Pfad, der jede Brücke nur einmal besucht? (heute Eulerscher Weg genannt) Euler beweist 1736, dass dies unmöglich ist. Findet auch Bedingung, damit dies möglich wäre. Beginn der Graphentheorie. Algorithmen und Datenstrukturen, FS17 12. April 2017 20 / 30 Graphen Definitionen I

Algorithmen und Datenstrukturen, FS17 12. April 2017 21 / 30 Graphen Definitionen II Algorithmen und Datenstrukturen, FS17 12. April 2017 22 / 30 Graphen Definitionen III

Algorithmen und Datenstrukturen, FS17 12. April 2017 23 / 30 Graphen Definitionen (visuell) Algorithmen und Datenstrukturen, FS17 12. April 2017 24 / 30 Graphen Definitionen IV Bipartiter Graph: Graph, dessen Knoten in zwei disjunkte Mengen aufgeteilt werden können, so dass alle Kanten ausgehend von einem Knoten in der einen Menge nur zu Knoten in der anderen Menge führen.

Algorithmen und Datenstrukturen, FS17 12. April 2017 25 / 30 Graphen Traversierung Wie jeden Knoten eines Graphen (genau einmal) besuchen? Tiefensuche (depth-first) Breitensuche (breadth-first) Algorithmen und Datenstrukturen, FS17 12. April 2017 26 / 30 Graphen Tiefensuche (1/3) Rekursive Formulierung: 1 Algorithmus Tiefensuche(v): 2 3 for "jede Kante e inzident zu v" do 4 if "e ist noch nicht durchlaufen" then 5 w = anderer Endpunkt von e 6 if "Knoten w ist noch nicht erreicht" then 7 Markiere e als besucht 8 Tiefensuche(w) 9 else 10 Markiere e als Rückkante Wir vermeiden noch, die genauen Datenstrukturen zu benennen.

Algorithmen und Datenstrukturen, FS17 12. April 2017 27 / 30 Graphen Tiefensuche (2/3) Algorithmen und Datenstrukturen, FS17 12. April 2017 28 / 30 Graphen Tiefensuche (3/3)

Algorithmen und Datenstrukturen, FS17 12. April 2017 29 / 30 Graphen Breitensuche (1/x) Iterative Formulierung: 1 Algorithmus Breitensuche(v): 2 i = 0 3 Menge L[i] = {v} 4 5 while "L[i] ist nicht leer" do 6 Menge L[i+1] = {} 7 for v L[i] do 8 for "jede Kante e inzident zu v" do 9 w = anderer Endpunkt von e 10 if "Knoten w ist noch nicht erreicht" then 11 Markiere e als besucht 12 w in L[i+1] einfügen 13 else 14 Markiere e als Querkante 15 i = i+1 Eine andere Art der Wellenfortpflanzung als bei Tiefensuche. Algorithmen und Datenstrukturen, FS17 12. April 2017 30 / 30 Graphen Breitensuche (2/x)