Algorithmen und Datenstrukturen (für ET/IT)

Ähnliche Dokumente
Algorithmen und Datenstrukturen

Datenstrukturen & Algorithmen

Programmiertechnik II

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

7. Sortieren Lernziele. 7. Sortieren

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

7. Übung zu Algorithmen I 1. Juni 2016

Algorithmen und Datenstrukturen Heapsort

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Sortieren II / HeapSort Heaps

Algorithmen und Datenstrukturen 12

Informatik II Prüfungsvorbereitungskurs

Vorlesung Datenstrukturen

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Vorlesung Datenstrukturen

Technische Universität München

Suchen und Sortieren Sortieren. Heaps

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

Übung Algorithmen und Datenstrukturen

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016

Übung Algorithmen und Datenstrukturen

Informatik II, SS 2014

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Algorithmen und Datenstrukturen (für ET/IT)

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Priority Queues and Heapsort

Prof. Dr. Margarita Esponda

Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

Übung Algorithmen und Datenstrukturen

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Dies ist gerade der konstruktive Schritt beim Aufbau von Binomialbäumen.

11. Elementare Datenstrukturen

Kapitel 8 Fortgeschrittene Sortieralgorithmen

4.2 Fibonacci-Heaps Aufbau Potenzialfunktion. Knoten v hat folgende Felder:

Fibonacci-Heaps und deren Anwendung

Algorithmen und Datenstrukturen (für ET/IT)

Informatik II Vorlesung am D-BAUG der ETH Zürich

markiert, 0: unmarkiert.)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Mergeable Heaps. C. Komusiewicz 7.1 Fibonacci-Heaps: Überblick 117

Praktikum Algorithmische Anwendungen WS 2006/07 Sortieren in linearer Laufzeit

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

(08 - Einfache Sortierverfahren)

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Übung Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Manipulation von Mengen

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

1. Übungsblatt zu Algorithmen II im WS 2011/2012

Abschnitt 19: Sortierverfahren

Algorithmen und Datenstrukturen

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Informatik II, SS 2016

Grundlagen: Algorithmen und Datenstrukturen

Programmiertechnik II

Algorithmen und Datenstrukturen

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

Vorrangswarteschlangen:Operationen

Übung Algorithmen und Datenstrukturen

Kapitel 3: Sortierverfahren Gliederung

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

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Heapsort, Quicksort, Mergesort. 8. Sortieren II

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Übungsklausur Algorithmen I

Tutoraufgabe 1 (Sortieralgorithmus):

NAME, VORNAME: Studiennummer: Matrikel:

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Informatik II Prüfungsvorbereitungskurs

Aufgabe (Schreibtischtest, lexikographische Ordnung)

Motivation Überblick

Algorithmen & Komplexität

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

Übungsklausur Algorithmen I

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?

Algo-Animation. Konstruktion der Partition: eigentliche Kunst / Arbeit bei Quicksort. Resultat: Partition A=A 1 WA 2 A 1 W A 2.

Inhaltsverzeichnis. Teil 1 Grundlagen 23

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:

Datenstrukturen & Algorithmen

Algorithms & Data Structures 2

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (25 Sortieren vorsortierter Daten)

Erinnerung VL

Bucketsort. Korrektheit. Beispiel. Eingabe: Array A mit n Elementen im Bereich [0,1) Annahme: die Elemente sind in [0,1) gleichverteilt.

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Mehrwegbäume Motivation

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Vorlesung Datenstrukturen

Lernmodul 7 Algorithmus von Dijkstra

Transkript:

Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2018 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München

Organisatorisches: Keine Vorlesung nächste Woche wegen Pfingsten Daher auch keine Zentralübung und keine Tutorübungen Also nächste Woche komplett frei (aber nur ADS) 2

Programm heute 7 Fortgeschrittene Datenstrukturen Graphen Bäume Heaps Priority Queues 3

Definition Heap Definition Heap Sei G = (V,E) ein Binärbaum mit Wurzel w V. Jeder Knoten v V sei mit einem Wert key(v) verknüpft, die Werte seien durch, geordnet. G heißt Heap, falls er folgende zwei Eigenschaften erfüllt: G ist fast vollständig, d.h. alle Ebenen sind vollständig gefüllt, ausser auf der untersten Ebene, die von links her nur bis zu einem bestimmten Punkt gefüllt sein muss. G erfüllt die Min-Heap-Eigenschaft bzw. die Max-Heap-Eigenschaft, d.h. für alle Knoten v V, v w gilt Min-Heap: key(v.vater) key(v) Max-Heap: key(v.vater) key(v) Entsprechend der Heap-Eigenschaft heißt G Min-Heap bzw. Max-Heap. 4

Bemerkungen zur Heap Definition Sei G = (V,E) Min-Heap. wir beschränken uns hier auf Min-Heaps, alle Aussagen gelten mit entsprechenden trivialen Änderungen auch für Max-Heaps typische Keys von Knoten sind Zahlen, z.b. key : V R weiteres Beispiel: Strings als Keys, lexikographisch geordnet ein Heap ist kein abstrakter Datentyp! 5

Min-Heap: Beispiel 1 3 2 5 9 8 Keys sind hier natürliche Zahlen Baum ist fast vollständiger Binärbaum Baum erfüllt Min-Heap-Eigenschaft: für alle Knoten v (ausser Wurzel) gilt key(v.vater) key(v) 6

Heap Eigenschaften Sei G = (V,E) Heap mit Wurzel w V. G als Min-Heap bzw. Max-Heap hat immer Element mit kleinstem bzw. größtem Key in Wurzel w G ist aber nicht vollständig sortiert (d.h. Traversierung liefert nicht notwendigerweise vollständig sortierte Folge) Ist V = n, so hat G Höhe von Θ(logn) typische Operation: extrahiere kleinsten (bzw. größten) Key (d.h. Wurzel), kurz: extractmin (bzw. extractmax) anschließendes Problem: Heap-Eigenschaft wiederherstellen, als Operation: minheapify (bzw. maxheapify) 7

Heap: extractmin Sei G = (V,E) Min-Heap mit Wurzel w V. Operation extractmin: entferne Wurzel w aus Heap G und liefere key(w) zurück tausche letzten Knoten von G an Stelle von Wurzel stelle Heap-Eigenschaft wieder her mit minheapify Output: minimaler Key in G extractmin(g): min = key(w); tausche Inhalt von w mit letztem Knoten in G; minheapify(g,w); return min; 5 1 3 2 9 8 8

Heap: minheapify Sei G = (V,E) Min-Heap mit Wurzel w V und V = n. Operation minheapify auf Knoten v V zur Wiederherstellung der Min-Heap-Eigenschaft Voraussetzung: nur Knoten v verletzt Min-Heap-Eigenschaft lasse v durch Heap absinken, bis Min-Heap-Eigenschaft wiederhergestellt Input: Knoten v minheapify(g,v): if (v ist Blatt) return; knoten = Minimum (bzgl. key) von v.links und v.rechts; if (key(knoten) < key(v) ) { tausche Inhalt von knoten und v; minheapify(g, knoten); } Komplexität: O(log n) 9

Beispiel extractmin / minheapify 1 3 2 3 2 5 9 8 5 9 8 extractmin minheapify 2 2 3 3 8 5 9 8 5 9 minheapify minheapify 10

Heap erzeugen: buildminheap Gegeben sei Knoten-Liste V mit V = n und Keys key(v) für v V. wie erzeugt man aus V einen Min-Heap G = (V,E)? erzeuge irgendwie fast vollständigen Binärbaum aus V wende minheapify auf alle Knoten v V an, von unten nach oben (nicht nötig für unterste Ebene des Baumes!) Input: Knoten-Liste V Output: Min-Heap G buildminheap(v): G = erzeuge beliebigen fast vollständigen Binärbaum aus V; for each Knoten v in G von unten nach oben { minheapify(g,v); } Komplexität: O(n) (nicht nur O(n log n)!)

Beispiel buildminheap 5 5 1 8 1 2 3 9 2 3 9 8 5 1 1 2 3 2 3 9 8 5 9 8 12

http://xkcd.com/835/ 13

Wiederholung: Binärbaum als sequentielle Liste I vollständiger Binärbaum Höhe k hat 2 k+1 1 Knoten speichere Knoten von oben nach unten, von links nach rechts in sequentieller Liste (Array) maximale Grösse von Array: 2 k+1 1 Beispiel fast vollständiger Binärbaum: 2 3 8 5 9 2 3 8 5 9 14

Wiederholung: Binärbaum als sequentielle Liste II Wurzel: an Position 1 Knoten an Position i: Vater-Knoten an Position i/2 linkes Kind an Position 2i; rechtes Kind an Position 2i +1 Pseudocode: vater(i): return i/2 ; links(i): return 2i; rechts(i): return 2i +1; 2 3 8 5 9 2 3 8 5 9 Index i: 1 2 3 4 5 6 7 15

HeapSort Sortieren mit Heap Idee: Heap erstellen mit buildminheap wiederhole extractmin bis Heap leer mit Heap direkt im Eingabefeld: Input: Feld A[1..n] der Länge n HeapSort(A): buildminheap(a); for i=n downto 2 { tausche A[1] mit A[i]; A.length = A.length - 1; minheapify(a, 1); } min-heap sortiert in absteigender Reihenfolge max-heap sortiert in aufsteigender Reihenfolge 16

HeapSort: Beispiel I 2 tausche minheapify 3 3 8 3 8 5 8 5 9 5 9 9 2 3 8 5 9 3 8 5 9 2 3 5 8 9 2 3 tausche 9 minheapify 5 5 8 5 8 9 8 9 3 5 8 9 2 9 5 8 3 2 5 9 8 3 2 5 tausche minheapify 8 9 8 9 8 9 5 9 8 3 2 9 8 5 3 2 8 9 5 3 2 17

HeapSort: Beispiel II 5 tausche minheapify 8 9 8 9 8 9 5 9 8 3 2 9 8 5 3 2 8 9 5 3 2 8 tausche minheapify 9 9 9 8 9 5 3 2 9 8 5 3 2 9 8 5 3 2 9 tausche minheapify 9 8 5 3 2 9 8 5 3 2 9 8 5 3 2 18

HeapSort Eigenschaften sortiert in-place Komplexität O(nlogn) besser als QuickSort im worst case! in Praxis aber erst bei grossem n nicht stabil 19

Stabilität von Sortierverfahren Stabilität Ein Sortierverfahren heißt stabil, wenn es die Reihenfolge von gleichrangigen Elementen bewahrt. Beispiel: unsortierte Liste: 5 2 3 4 3 (blau vor rot) sortierte Liste (stabil): 2 3 3 4 5 (blau vor rot) sortiere Liste (nicht stabil): 2 3 3 4 5 (rot vor blau) 20

Sortier-Algorithmen illustriert Animationen der Sortier-Algorithmen: http://www.sorting-algorithms.com 21

Sortier-Algorithmen Zusammenfassung Insertion Sort in-place, stabil Komplexität O(n 2 ), best case: O(n) Selection Sort (Übung) in-place, nicht stabil Komplexität O(n 2 ) MergeSort benötigt zusätzlichen Speicher, stabil Komplexität O(nlogn) QuickSort in-place, nicht stabil Komplexität im Mittel O(nlogn), worst case: O(n 2 ) HeapSort in-place, nicht stabil Komplexität O(nlogn) 22

Programm heute 7 Fortgeschrittene Datenstrukturen Graphen Bäume Heaps Priority Queues 23

Definition Priority Queue Definition Priority Queue Eine Priority Queue ist ein abstrakter Datentyp. Sie beschreibt einen Queue-artigen Datentyp für eine Menge von Elementen mit zugeordnetem Schlüssel und unterstützt die Operationen Einfügen von Element mit Schlüssel in die Queue, Entfernen von Element mit minimalem Schlüssel aus der Queue, Ansehen des Elementes mit minimalem Schlüssel in der Queue. 0 1 2 7 3 5 entsprechend gibt es auch eine Priority Queue mit Entfernen/Ansehen von Elememt mit maximalem Schlüssel 24

Definition Priority Queue (abstrakter) Priority Queue P ist ein abstrakter Datentyp mit Operationen insert(p, x) wobei x ein Element extractmin(p) liefert ein Element minimum(p) liefert ein Element isempty(p) liefert true or false initialize liefert eine Priority Queue Instanz und mit Bedingungen isempty(initialize()) == true isempty(insert(p, x)) == false minimum(initialize()) ist nicht erlaubt (Fehler) extractmin(initialize()) ist nicht erlaubt (Fehler) (Fortsetzung nächste Folie) 25

Definition Priority Queue (abstrakter) Fortsetzung Bedingungen Priority Queue P: minimum(insert(p, x)) liefert zurück falls P == initialize(), dann x sonst: min(x, minimum(p)) extractmin(insert(p, x)) falls x == minimum(insert(p, x)), dann liefert es x zurück und hinterlässt P im Originalzustand sonst liefert es extractmin(p) zurück und hinterlässt P im Zustand insert(extractmin(p), x) (entsprechend für die Priority Queue mit maximalem Schlüssel) 26

Priority Queue: Implementationen I mit sortierten Feldern (als sequentielle oder verkette Liste) insert legt Element an richtiger Stelle in sortierter Liste ab mit O(n) Komplexität minimum, extractmin als O(1) Operation 27

Priority Queue: Implementationen I mit sortierten Feldern (als sequentielle oder verkette Liste) insert legt Element an richtiger Stelle in sortierter Liste ab mit O(n) Komplexität minimum, extractmin als O(1) Operation mit unsortierten Feldern (als sequentielle oder verkettete Liste) insert hängt Element einfach an Ende an mit O(1) minimum, extractmin suchen nach Element mit kleinstem Schlüssel mit O(n) 27

Priority Queue: Implementationen I mit sortierten Feldern (als sequentielle oder verkette Liste) insert legt Element an richtiger Stelle in sortierter Liste ab mit O(n) Komplexität minimum, extractmin als O(1) Operation mit unsortierten Feldern (als sequentielle oder verkettete Liste) insert hängt Element einfach an Ende an mit O(1) minimum, extractmin suchen nach Element mit kleinstem Schlüssel mit O(n) beides nicht sonderlich effizient (je nach Abfolge der Operationen aber ok) 27

Priority Queue: Implementationen II Priority Queue P als min-heap G = (V,E) mit Wurzel w: minimum von P liefert Wurzel w zurück Komplexität O(1) extractmin von P entspricht extractmin von G Komplexität O(log n) insert von P erfordert ein klein wenig Extra-Aufwand: Input: Priority Queue P (als min-heap mit seq. Liste A), Element x insert(a, x): füge Element x an Ende von Heap A ein; i = Index von letztem Element; while ( (i!= 1) && (A[vater(i)] > A[i]) ) { tausche A[i] mit A[vater(i)]; i = vater(i); } Komplexität O(log n) 28

Priority Queue: insert Beispiel 4 7 8 i 12 9 2 4 i 7 2 12 9 8 2 i 7 4 12 9 8 29

Priority Queue: dynamisches Anpassen von Keys manchmal ändert sich der Priorität von Schlüsseln Beispiel Algorithmen dafür in Kapitel 9! Operation decreasekey verringert Schlüssel von bestimmten Element Input: Priority Queue P (als min-heap mit seq. Liste A), Element mit Index i, neuer Schlüsselwert wert decreasekey(a, i, wert): if (wert > A[i]) error neuer Schlüssel größer als alter! A[i] = wert; while ( (i!= 1) && (A[vater(i)] > A[i]) ) { tausche A[i] mit A[vater(i)]; i = vater(i); } Komplexität O(log n) 30

Priority Queue: decreasekey Beispiel 2 7 4 i 12 9 8 1 2 i 7 1 12 9 4 8 1 i 7 2 12 9 4 8 31

Priority Queue: decreasekey / insert mit Operation decreasekey läßt sich insert anders formulieren: Input: Priority Queue P (als min-heap mit seq. Liste A), Element x insert(a, x): A.length = A.length + 1; A[A.length] = ; decreasekey(a, A.length, x); 32

Priority Queue: Ausblick Priority Queue mit Heap: insert und decreasekey sind O(log n) dies läßt sich mit Fibonacci-Heap bzw. Radix-Heap verbessern auf (amortisiert) O(1) Effiziente Algorithmen in Informatik 33

Priority Queues und Sortieren mit Priority Queues lassen sich Sortier-Algorithmen implementieren Schema: alle Elemente in Priority Queue einfügen der Reihe nach alle Elemente mit extractmin / extractmax entfernen Beispiele: Priority Queue mit Heap: HeapSort Priority Queue mit sortierter sequentieller Liste: Insertion Sort Priority Queue mit unsortierter sequentieller Liste: Selection Sort 34

Zusammenfassung 7 Fortgeschrittene Datenstrukturen Graphen Bäume Heaps Priority Queues 35