Datenstrukturen und Algorithmen SS07

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

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)

Graphen: Datenstrukturen und Algorithmen

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

Datenstrukturen und Algorithmen SS07

Undirected Single-Source Shortest Paths with Positive Integer Weights in Linear Time

8 Diskrete Optimierung

Anmerkungen zur Übergangsprüfung

Vorlesung 3 MINIMALE SPANNBÄUME

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Fully dynamic algorithms for the single source shortest path problem.

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

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

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

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

13. Binäre Suchbä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:

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

Algorithmen II Vorlesung am

Das Briefträgerproblem

Suchen und Sortieren Sortieren. Heaps

Algorithmen und Datenstrukturen Balancierte Suchbäume

Algorithmen und Datenstrukturen Suchbaum

Codierung, Codes (variabler Länge)

Programmiertechnik II

Steinerbäume. Seminarausarbeitung Hochschule Aalen Fakultät für Elektronik und Informatik Studiengang Informatik Schwerpunkt Software Engineering

Sortierverfahren für Felder (Listen)

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

Datenstrukturen & Algorithmen

WS 2009/10. Diskrete Strukturen

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)

Grundlagen der Programmierung 2. Bäume

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

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

2. Lernen von Entscheidungsbäumen

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

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.

Algorithmen und Datenstrukturen (WS 2007/08) 63

Kapiteltests zum Leitprogramm Binäre Suchbäume

Algorithmen und Datenstrukturen 2

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

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

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Balancierte Bäume. Martin Wirsing. in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer. SS 06

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

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

Datenstrukturen und Algorithmen

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15.

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

Punktbeschriftung in Dynamischen Karten

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

6-1 A. Schwill Grundlagen der Programmierung II SS 2005

Bäume und Wälder. Bäume und Wälder 1 / 37

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

2 Lösungen "Peptide de novo Sequencing"

15 Optimales Kodieren

Kap. 4.2: Binäre Suchbäume

Seminarausarbeitung Entwurf und Analyse von Datenstrukturen. Splay Trees. Mirco Lukas und Alexander Werthmann. Datum:

Fibonacci-Heaps und Amortisierte Analyse

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

Algorithmentheorie Maximale Flüsse

Die k kürzesten Wege in gerichteten Graphen

Abschnitt: Algorithmendesign und Laufzeitanalyse

Sortierte Folgen 250

Bäume und Wälder. Bäume und Wälder 1 / 37

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

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

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg

Algorithmen und Datenstrukturen 2

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau

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

EndTermTest PROGALGO WS1516 A

Konzepte der Informatik

Algorithmen und Datenstrukturen

Algorithmen & Datenstrukturen 1. Klausur

Die in den Suchverfahren konstruierten Graphen waren zusammenhängend und enthielten keine Kreise. Also vereinbaren wir:

Alignment-Verfahren zum Vergleich biologischer Sequenzen

Vorkurs Informatik WiSe 15/16

Binäre Bäume Darstellung und Traversierung

Algorithmen für Peer-to-Peer-Netzwerke Sommersemester Vorlesung

Kapitel 6: Graphalgorithmen Gliederung

HINWEISE ZUR ADS-KLAUSUR SS06 für BACHELOR (für beide Termine)

Lange Nacht der Wissenschaft. Ein Klassiker. Die Mathematik der Kürzesten Wege

w a is die Anzahl der Vorkommen von a in w Beispiel: abba a = 2

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

Unterscheidung: Workflowsystem vs. Informationssystem

Vorlesung : Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz

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

Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen. Große Übung vom Nils Schweer

Teil III: Routing - Inhalt I. Literatur. Geometric Routing. Voraussetzungen. Unit Disk Graph (UDG) Geometric Routing 29

1 topologisches Sortieren

16. All Pairs Shortest Path (ASPS)

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

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

Tutorium Algorithmen & Datenstrukturen

Transkript:

Datenstrukturen und Algorithmen SS0 Datum:.6.200 Michael Belfrage mbe@student.ethz.ch belfrage.net/eth

Programm von Heute Minimaler Spannbaum (MST) Challenge der Woche Fibonacci Heap

Minimaler Spannbaum Einführendes Beispiel: 1 100 Fr. 200 Fr. 00 Fr. 100 Fr. 00 Fr. 1 000 Fr. 00 Fr. - 00 Fr. 800 Fr. 00 Fr. 1 200 Fr. 500 Fr. Es hat eine Anzahl Häuser, und man möchte diese alle miteinander vernetzen. (z.b. wegen einem LAN, elektrische Leitungen, etc.) Die Möglichen Verbindungen zwischen zwei Häusern ist oben abgebildet, zusammen mit den Kosten in [Fr.]. Bestimme die Menge von direkten Verbindungen, sodass alle miteinander - direkt oder indirekt - verbunden sind, und die Kosten minimal sind.

Minimaler Spannbaum Diese Menge mit minimalen Kosten im vorherigen Beispiel kann man effizient bestimmen mithilfe Ideen aus der Graphentheorie: Insbesondere mithilfe des minimalen Spannbaums Es folgen einige Definitionen

Spannbaum Definitionen: Ein Spannbaum T eines ungerichteten und zusammenhängenden Graphen G, ist ein Baum, welcher aus allen Knoten und einigen (oder auch allen) Kanten von G besteht. Ein minimaler Spannbaum (engl. MST = Minimal Spanning Tree) ist ein Spannbaum, dessen summierte Kantengewichte kleiner oder gleich deren aller anderen Spannbäume ist.

Spannbaum Informell: Ein Spannbaum eines Graphen ensteht, wenn man einige Kanten auswählt, sodass man von jedem Knoten aus alle anderen erreichen kann. Es soll jedoch nicht möglich sein im Kreis zu laufen. Beispiel: A D B C E GC F

Spannbaum Ein Graph kann mehrere Spannbäume haben, der folgende hat z.b. 16 verschiedene:

Minimaler Spannbaum MST Ist der Graph gewichtet, kann man einen minimalen Spannbaum bestimmen. Die Summe der Kantengewichte soll dann minimal sein über alle möglichen Spannbäume Beispiel: A 1 B 10 11 E 12 F 2 D C 8 GC 5

Minimaler Spannbaum Schnellste Methoden zur Bestimmung eines minimalen Spannbaums: Randomisierter Algorithmus Karger, Klein, Tarjan [15] Erwartet lineare Laufzeit Falls Gewichte kleine natürliche Zahlen Fredman, Willard [10] lineare Laufzeit Sonst existieren bisher nur Algorithmen die fast linear sind: Chazelle [1] O( E a( E, V )) (a ist die inverse Ackermann-Funktion)

Minimaler Spannbaum Oft sind diese schnellen Algorithmen aber sehr aufwändig zu implementieren und lohnen sich erst dann, wenn die Laufzeit ein Problem wird. Die klassischen Algorithmen sind im Vergleich um einiges einfacher zu verstehen und zu implementieren. (Hinzu kommt, dass viele der modernen Algorithmen auf Ideen der klassischen beruhen)

Minimaler Spannbaum Klassische Methoden zur Bestimmung eines minimalen Spannbaums: Boruvka s Algorithmus Otakar Borůvka, 126 Prim s Algorithmus Vojtěch Jarník [126], Robert C. Prim [15] Wiederentdeckt von Edsger W. Dijkstra [15] Kruskal s Algorithmus Joseph Kruskal [156]

Minimaler Spannbaum Eine naive Methode wäre z.b. Alle Spannbäume zu bestimmen, dann würde man sicher auch den minimalen finden. Jedoch hat es meist sehr viele Spannbäume. Diese Methode ist darum wohl sehr ineffizient. 5 10 16 1 1 1 12 16 2 8 1 15 6 20 15 3 18 12 11 1

Kruskal s Algorithmus Um das Problem effizient von Hand zu lösen, eignet sich Kruskal s Algorithmus: INPUT: gewichteter Graph G=(V,E,w) OUTPUT: Minimaler Spannbaum T=(V,E ) Algorithmus (vereinfacht): T := G \ E sortiere E {aufsteigend nach Gewicht w} for all e=(u,v) in E do if {es gibt keinen Weg von u nach v} then e einfügen in T end end return T Nebenbei: Kruskal s Algorithmus ist ein Greedy Algorithmus, d.h. dass er jeweils die beste lokale Auswahl trifft in der Hoffnung das globale Optimum zu erreichen. Oft sind Greedy Algorithmen jedoch falsch, also aufpassen!!

Kruskal s Algorithmus Beispiel: A 1 B 10 11 E 12 F 2 D C 8 GC 5 Hier werden z.b. nacheinander eingefügt: (A,D),(B,D),(C,E),(F,G),(C,F),(C,D)

Kruskal s Algorithmus Wieso ist dieser Ansatz korrekt? Nehme an Kantengewichte seien versch. Lemma: Wenn wir die Menge der Knoten V in zwei disjunkte Teilmengen V 1 und V 2 aufteilen, so ist die kleinste Kante e welche V 1 und V 2 miteinander verbindet Teil des minimalen Spannbaums. Beweis: Nehme an e sei nicht Teil des Spannbaums. V 1 und V 2 müssen durch eine Kante verbunden sein. Falls dies nicht e ist, dann kann diese Kante f nur noch schwerer sein, womit der Spannbaum schwerer wird. Widerspruch. In jedem Schritt fügen wir immer die kleinste Kante hinzu welche zwei disjunkte Teilmengen V 1 und V 2 verbindet. Nach obigem Lemma sind diese Kanten also jeweils Teil des minimalen Spannbaumes. qed. Will man auch gleiche Kantengewichte zulassen, wird der Beweis einwenig mühsamer, aber die Idee bleibt dieselbe. V 1 ={A,B,D} A 1 1 B 10 11 5 E 12 V 2 ={C,E,F,G} F 2 D e C 8 GC 6

Kruskal s Algorithmus Laufzeit O( E log V ), da V 1 E V ( V +1)/2 Algorithmus: T := G \ E sortiere E {aufsteigend nach Gewicht w} for all e=(u,v) in E do if {es gibt keinen Weg von u nach v} then e einfügen in T end end return T union-find Datenstrukturen können dies meist in konstanter Zeit beantworten (naiver Ansatz würde O( V E ) benötigen) Fazit:O( E log V )

Prim s Algorithmus Prim baut den minimalen Spannbaum auf, indem er einen Knoten nach dem anderen einfügt. INPUT: gewichteter Graph G=(V,E,w) OUTPUT: Minimaler Spannbaum T=(V,E ) Algorithmus: T := ein bel. Knoten von G while {T weniger als V Knoten hat} do e := kleinste Kante welche T mit G\T verbindet e einfügen in T end return T

Prim s Algorithmus Beispiel: A 1 B 10 11 E 12 F 2 D C 8 GC 5 Hier werden z.b. nacheinander eingefügt: (A,D),(D,B),(D,C),(C,E),(C,F),(G,F)

Prim s Algorithmus Korrektheit folgt aus dem gleichen Lemma wie schon bei Kruskal. Langsamster Teil des Algorithmus ist dieser Algorithmus: T := ein bel. Knoten von G while {T weniger als V Knoten hat} do e := kleinste Kante welche T mit G\T verbindet e einfügen in T end return T Wir brauchen also eine Datenstruktur, die effizient das Minimum bestimmen/löschen kann Eine solche kennengelernte Datenstruktur ist ein Heap. Besonders effzient ist ein Fibonacci-Heap. Siehe auch http://de.wikipedia.org/wiki/algorithmus_von_prim für eine mögliche Heap-Implementation.

Prim s Algorithmus Laufzeiten (ohne Begründung): Mit Adjazenzmatrix O( V 2 ) Mit Adjazenzliste und (normalem) Heap O(( V + E )log V ) Mit Adjazenzliste und Fibonacci-Heap O( E + V log V )

Boruvkas s Algorithmus Ähnlich wie Prim, einfach ohne komplizierte Datenstruktur. Baue MST auf indem man mehrere Bäume vereinigt, bis nur noch ein grosser vorhanden ist. INPUT: gewichteter Graph G=(V,E,w) OUTPUT: Minimaler Spannbaum T=(V,E ) Algorithmus: T := {} //MST L := {} //Liste von Bäumen Teile G auf in V Teilbäume bestehend aus einem einzigen Knoten und füge diese in L hinein. while {L mehr als einen Baum hat} do for all Bäume S in L do Finde die kleinste Kante e welche S mit G\S verbindet. Füge e in T ein. end Verschmelze verbundene Bäume und aktualisiere L. end return T

Boruvka s Algorithmus Beispiel: A 1 B 10 11 E 12 F 2 D C 8 GC 5 L:={{A},{B},{C},{D},{E},{F}}

Boruvka s Algorithmus Beispiel: A 1 B 10 11 E 12 F 2 D C 8 GC 5 L:={{A,B,D},{C,E},{F,G}}

Boruvka s Algorithmus Beispiel: A 1 B 10 11 E 12 F 2 D C 8 GC 5 L:={{A,B,C,D,E,F,G}}

Boruvka s Algorithmus Korrektheit folgt wiederum aus dem gleichen Lemma wie schon bei Kruskal und Prim. Laufzeit: Begründung O( E log V ) Anzahl Durchgänge O(log V ), da Bäume immer mind. doppelt so gross werden. In jedem Durchgang jeweils alle Knoten und alle Kanten ansehen: O( V + E )=O( E ) hier, da V 1 E V ( V +1)/2

Maximalen Spannbaum Jetzt seit ihr gefragt: Wie konstruiert man einen maximalen Spannbaum? Aufgabe 10.3a Durch Modifikation von Kruskal Aufgabe 10.3c Durch Modifikation des Graphen

Uralte Challenge Zu zeigen: Wenn n die Anzahl Wände sind im Museum, dann braucht es höchstens n/3 [abgerundet] Wachen.

Alte Challenge der Woche Ein sehr beliebtes Problem... Schreibt ein Programm in Eiffel, welches seinen eigenen Quellcode ausgibt, i.e. mit io.put_string(... ) Dabei ist nicht eine Datei schon irgendwo abgespeichert auf der man zugreifen kann Brauchen kann man (ohne zu modifizieren) alle Klassen der Eiffel-Base Der Quellcode kann irgendetwas sein, Hauptsache das Programm gibt ihn aus Und ja... keinen leeren Quellcode ;)

The Challenge Gegeben: Einen Zeiger zu einem mittleren Knoten einer einfach verketten Liste Aufgabe: Lösche diesen Knoten a b c d e f a b d e f

Fibonacci-Heap Fredman, Tarjan [18] amort. konstante Laufzeit für praktisch alle Operationen bis auf deletemin (i.e. das Minimum löschen)

Fibonacci-Heap Ein Fibonacci-Heap ist eine Sammlung von Bäumen, wobei der Schlüssel eines Kindes immer grösser oder gleich dem Elternschlüssel ist. Somit ist das Minimum die Wurzel irgend eines dieser Bäume. 2 1 10 6 5 1 1 15

Fibonacci-Heap Der Name Fibonacci kommt daher, da die Grösse eines Teilbaums mit Wurzel vom Grad k mindestens F k+2 beträgt (wobei F k die k-te Fibonacci Zahl ist) 0, 1, 1, 2, 3, 5, 8, 13, 21, 3, 55, 8, 1, 233, 3, 610, 8, 15, 258, 181, 665, 106, 111, 2865, 6368, 5025, 12133, 1618, 31811

Fibonacci-Heap Bäume vom Grad 1 enstehen aus zwei Bäumen vom Grad 0: 2 2

Fibonacci-Heap Bäume vom Grad 2 enstehen aus zwei Bäumen vom Grad 1: 2 3 8 2 3 8

Fibonacci-Heap Bäume vom Grad 3 enstehen aus zwei Bäumen vom Grad 2: 2 3 8 8 2 11 3 8 8 11

Fibonacci-Heap Baum vom Grad 5: 2 3 5 3 12 2 23 1 1 13 1 8 8 1 13 1 28 2 28 18 1 18 11 18 1 18 2 2 21

Fibonacci-Heap Minimum bestimmen: Minimum Zeiger zeigt immer darauf. Laufzeit somit konstant 2 1 10 6 5 1 1 15

Fibonacci-Heap Einfügen: Neuen Knoten in die Wurzelliste einfügen. (Minimum Zeiger ändern falls nötig) 2 1 10 6 5 1 1 15

Fibonacci-Heap Minimum entfernen (3 Phasen) 1. die Kinder des minimalen Knotens abschneiden und zur Wurzelliste hinzufügen. Danach minimalen Knoten entfernen. 2 1 10 6 5 1 1 15

Fibonacci-Heap Minimum entfernen (3 Phasen) 2. Verbinde Wurzeln vom selben Grad. (mithilfe eines Arrays, wo wir jeweils von links nach rechts die Wurzelknoten durchgehen, und bei einem leeren k-ten Eintrag (falls der aktuelle Wurzelknoten Grad k hat) einen Zeiger machen zum aktuellen Wurzelknoten, und bei einem vorhandenen Zeiger diesem folgen und die Wurzeln verbinden.) 2 1 10 6 5 1 15

Fibonacci-Heap Minimum entfernen (3 Phasen) 3. Suche das neue Minimum unter den Wurzelknoten - maximal O(log(n)) Wurzelknoten 2 6 5 1 10 1 15

Fibonacci-Heap Einen Schlüssel verkleinern Verkleinere den Schlüssel des Knotens zuerst. Ist der neue Schlüssel grösser/gleich dem Schlüssel des Elternknoten, dann muss nichts mehr gemacht werden. 2 6 5 1 10 8 1 15

Fibonacci-Heap Einen Schlüssel verkleinern Verkleinere den Schlüssel des Knotens zuerst. Ist der neue Schlüssel hingegen kleiner als der Schlüssel des Elternknoten, dann schneidet man den Knoten ab und markiert den Elternknoten. Ist dieser auch schon markiert, schneidet man diesen auch ab. (dies geht so weiter bis man zur Wurzel kommt oder einen unmarkierten Knoten erreicht. Jeweils immer minimum Aktualiseren falls nötig) 2 6 5 1 10 3 1 15

Fibonacci-Heap Einen Schlüssel löschen Verkleinere den Schlüssel zuerst auf Lösche nun das Minimum 2 6 5 1 10-1 15

Fibonacci-Heap Frage an euch: Aufgabe 10.b Warum können nicht alle Heap-Operationen eine konstante amortisierte Laufzeit haben (wenn man nur Vergleichsbasierte Operationen zulässt)?

Fibonacci-Heap Frage an euch: Aufgabe 10.a Kann ein Fibonacci-Heap zu einer Struktur degenerieren, die genau noch einen Knoten in der Wurzelliste hat, an dem eine lineare Liste hängt? 11 13 15

Ende der Stunde. Questions?