Erinnerung VL

Ähnliche Dokumente
Sortierte Folgen 250

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

7. Übung zu Algorithmen I 1. Juni 2016

Vorlesung Datenstrukturen

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

Sortieren & Co. KIT Institut für Theoretische Informatik

Algorithmen und Datenstrukturen (für ET/IT)

Suchbäume balancieren

Suchen und Sortieren Sortieren. Heaps

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

10. Übung Algorithmen I

Übungsklausur Algorithmen I

Übung Algorithmen und Datenstrukturen

Karlsruher Institut für Technologie. Klausur Algorithmen I

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

Sortieren II / HeapSort Heaps

Übungsklausur Algorithmen I

Grundlagen Algorithmen und Datenstrukturen TUM Sommersemester 2011 (2) Dozent: Hanjo Täubig

Auswählen nach Rang (Selektion)

Grundlagen: Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen Beispiellösung zu Heimübungsblatt 7. Abbildung 1: Das Array A als Baum (vgl. Foliensatz 16, Folie 3)

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Heapsort. 1. Erstelle aus dem gegebenen Array einen Max-Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

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

Algorithmen und Datenstrukturen Heapsort

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

Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Algorithmen II. Peter Sanders. Übungen: Moritz Kobitzsch und Dennis Schieferdecker. Institut für Theoretische Informatik, Algorithmik II.

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

Suchen und Sortieren Sortieren. Heaps

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen

Sanders / van Stee: Algorithmentechnik November 23, Sortieren & Co

Verkettete Listen. KIT Institut für Theoretische Informatik 1

Algorithmen I - Tutorium 28 Nr. 2

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

Algorithmen & Komplexität

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

Kapitel 8 Fortgeschrittene Sortieralgorithmen

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)

1. Übung Algorithmen I

3. Suchen. Das Suchproblem. Suche in Array. Lineare Suche. 1 n. i = n Gegeben Menge von Datensätzen.

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

11. Elementare Datenstrukturen

Algorithmen I. Sascha Witt Institut für Theoretische Informatik Web:

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

Transkript:

Erinnerung VL 30.05.2016 Radix-Sort, Abschluss Sortieren Prioritätslisten: Warteschlange mit Prioritäten deletemin: kleinstes Element rausnehmen insert: Element einfügen Binäre Heaps als Implementierung von Prioritätslisten Repräsentation als Array, siftdown, siftup, Heapsort Heute: Adressierbare Prioritätslisten, sortierte Folgen KIT Institut für Theoretische Informatik 1

Heapsort Quicksort Mergesort Heapsort Quicksort Mergesort Vergleiche O(n logn) O ( n 2) O(n logn) E[Vergleiche] O(n log n) O(n log n) O(n log n) zusätzl. Platz O(1) O(log n) O(n) Cachezugrie O(n logn) O ( n B logn) O ( n B logn) (B =Blockgröÿe) Kompromiss: z. B. introspektives Quicksort der C++ Standardbibliothek: Quicksort starten. Zu wenig Fortschritt? Umschalten auf Heapsort. KIT Institut für Theoretische Informatik 2

Adressierbare Prioritätslisten Procedure build({e 1,...,e n }) M:= {e 1,...,e n } Function size return M Procedure insert(e) M:= M {e} Function min return min M Function deletemin e:= min M; M:= M \ {e}; return e Function remove(h : Handle) e:= h; M:= M \ {e}; return e Procedure decreasekey(h : Handle, k : Key) assert key(h) k; key(h):= k Procedure merge(m ) M:= M M KIT Institut für Theoretische Informatik 3

Adressierbare Prioritätslisten: Anwendungen Greedy-Algorithmus: while solution not complete do add the best available piece to the solution update piece priorities // e.g., using addressable priority queue Beispiele: Dijkstras Algorithmus für kürzeste Wege Jarník-Prim Algorithmus für minimale Spannbäume Scheduling: Jobs am wenigsten belastete Maschine Hierarchiekonstruktion für Routenplanung Suche nach erfüllenden Belegungen aussagenlog. Formeln? KIT Institut für Theoretische Informatik 4

Adressierbare Binäre Heaps Problem: Elemente bewegen sich. Dadurch werden Elementverweise ungültig. (Ein) Ausweg: Unbewegliche Vermittler-Objekte. Invariante: proxy(e) verweist auf Position von e. Vermittler bei jeder Vertauschung aktualisieren. Rückverweis Element Vermittler 1 3 7 4 6 8 9 1 3 7 4 6 8 9 Laufzeit: O(log n) für alle Operationen ausser merge und buildheap, die O(n) brauchen. KIT Institut für Theoretische Informatik 5

Adressierbare Prioritätslisten Laufzeiten Operation Binary Heap Fibonacci-Heap (Buch) build O(n) O(n) size O(1) O(1) min O(1) O(1) insert O(log n) O(1) deletemin O(log n) O(log n) remove O(log n) O(log n) decreasekey O(log n) O(1) am. merge O(n) O(1) KIT Institut für Theoretische Informatik 6

Prioritätslisten: Mehr ganzzahlige Schlüssel (stay tuned) extern: Geht gut (nichtadressierbar) parallel: Semantik? KIT Institut für Theoretische Informatik 7

Prioritätslisten: Zusammenfassung Häug benötigte Datenstruktur Adressierbarkeit ist nicht selbstverständlich Binäre Heaps sind einfache, relativ eziente Implementierung KIT Institut für Theoretische Informatik 8

Was haben wir jenseits von Prioritätslisten gelernt? implizites Layout von Binärbäumen j j2 j Heapsort (inplace!) KIT Institut für Theoretische Informatik 9

Sortierte Folgen KIT Institut für Theoretische Informatik 10

Sortierte Folgen: e 1,...,e n mit e 1 e n kennzeichnende Funktion: M.locate(k):= addressof min{e M : e k} Navigations Datenstruktur 2 3 5 7 11 13 17 19 00 Annahme: Dummy-Element mit Schlüssel Achtung: In Abbildungen sieht wie 00 aus KIT Institut für Theoretische Informatik 11

Statisch: Sortiertes Feld mit binärer Suche // Find min{i 1..n + 1 : a[i] k} Function locate(a[1..n], k : Element) (l,r):= (0,n + 1) // Assume a[0] =, a[n + 1] = while l + 1 < r do invariant 0 l < r n + 1 and a[l] < k a[r] m:= (r + l)/2 // l < m < r if k a[m] then r:= m else l:= m return r Übung: Müssen die Sentinels / tatsächlich vorhanden sein? Übung: Variante von binärer Suche: bestimme l, r so dass a[l..r 1] = [k,...,k], a[l 1] < k und a[r] > k KIT Institut für Theoretische Informatik 12

Statisch: Sortiertes Feld mit binärer Suche // Find min{i 1..n + 1 : a[i] k} Function locate(a[1..n], k : Element) (l,r):= (0,n + 1) // Assume a[0] =, a[n + 1] = while l + 1 < r do invariant 0 l < r n + 1 and a[l] < k a[r] m:= (r + l)/2 // l < m < r if k a[m] then r:= m else l:= m return r Zeit: O(log n) Beweisidee: r l halbiert sich in jedem Schritt KIT Institut für Theoretische Informatik 13

Binäre Suche Beispiel: k = 15 Function locate(a[1..n],k : Element) // min{i 1..n + 1 : a[i] k} (l,r):= (0,n + 1) // Assume a[0] =, a[n + 1] = while l + 1 < r do invariant 0 l < r n + 1 and a[l] < k a[r] m:= (r + l)/2 // l < m < r if k a[m] then r:= m else l:= m return r Indizes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Einträge: [, 2, 3, 5, 7, 11, 13, 17, 19, ] [, 2, 3, 5, 7, 11, 13, 17, 19, ] [, 2, 3, 5, 7, 11, 13, 17, 19, ] [, 2, 3, 5, 7, 11, 13, 17, 19, ] KIT Institut für Theoretische Informatik 14

Dynamische Sortierte Folgen Grundoperationen insert, remove, update, locate O(log n) (M.locate(k):= min{e M : e k}) KIT Institut für Theoretische Informatik 15

Mehr Operationen min,...,a,...,b,...,max min: Erstes Listenelement max: Letztes Listenelement Zeit O(1) Zeit O(1) rangesearch(a, b) // O(log n + result ) result:= h:= locate(a) while h e b do result.pushback(h e) Navigations Datenstruktur h:= h next return result 2 3 5 7 11 13 17 19 00 KIT Institut für Theoretische Informatik 16

Noch mehr Operationen (re)build: Navigationsstruktur für sortierte Liste aufbauen O(n) w,...,x.concat( y,...,z ) = w,...,x,y,...,z O(logn) w,...,x,y,...,z.split(y) = ( w,...,x, y,...,z ) O(logn) Zählen: rank, select, rangesize O(log n) Fingersuche: = Abstand zu Fingerinfo zusätzlicher Parameter für insert, remove, locate,... O(log n) log Navigations Datenstruktur 2 3 5 7 11 13 17 19 00 KIT Institut für Theoretische Informatik 17

Abgrenzung Hash-Tabelle: nur insert, remove, nd. Kein locate, rangequery Sortiertes Feld: nur bulk-updates. Aber: Hybrid-Datenstruktur oder log n M geometrisch wachsende statische Datenstrukturen Prioritätsliste: nur insert, deletemin, (decreasekey, remove). Dafür: schnelles merge Sortierte Folgen allgemein: die eierlegende Wollmilchdatenstruktur. Etwas langsamer als speziellere Datenstrukturen KIT Institut für Theoretische Informatik 18

Sortierte Folgen Anwendungen Best-First Heuristiken Alg. Geometrie: Sweepline-Datenstrukturen Datenbankindex... KIT Institut für Theoretische Informatik 19

Anwendungsbeispiel: Best Fit Bin Packing Procedure binpacking(s) B : SortedSequence // used bins sorted by free capacity foreach e s by decreasing element size // sort if b B : free(b) e then B.insert(new bin) locate b B with smallest free(b) e insert e into bin b Zeit: O( s log s ) Qualität: gut. Details: nicht hier KIT Institut für Theoretische Informatik 20