Algorithmen I - Tutorium 28 Nr. 6 08.06.2017: Spaß mit Sortieren, Aufgaben und Wiederholung Marc Leinweber marc.leinweber@student.kit.edu INSTITUT FÜR THEORETISCHE INFORMATIK (ITI), PROF. DR. JÖRN MÜLLER-QUADE KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Agenda 1 Selection 2 Bucket- und Radixsort 3 Wiederholung 4 Ende Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 2/24
Selection: wie? Kann ich einen bekannten Algorithmus so modifizieren, dass er das k-kleinste Element findet? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 3/24
Quickselect Function select (s : Sequence of Element, k : N) : Element if s < k then error; wähle zufälliges p s a := e s : e < p if a k then return select(a, k) b := e s : e = p if a + b k then return p c := e s : e > p return select(c, k a b ) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 4/24
Quickselect (2) Und weiter? Worst Case? O(n 2 ) Average Case? O(n) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 5/24
Quicksort iterativ Wie funktionierte noch QuickSort? Wie kann ich diese Funktionsweise iterativ umsetzen? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 6/24
Reprise: Quicksort procedure sort(a : Array [0..n 1], l : N 0, r : N 0 ) if l = r then return p := pickpivotposition(a, l, r) : N 0 split := partition(a, l, r, p) : N 0 sort(a, l, split 1); sort(a, split + 1, r); Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 7/24
Werde schneller. Kann ich unter bestimmten Bedingungen schneller sortieren? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 8/24
Bucket- oder KSort Procedure KSort (s : Sequence of Element) b = [,..., ] : Array of [0..K-1] of Sequence of Element foreach e s do b[key(e)].pushback(e) s := concat b[0],..., b[k 1] Laufzeit O(n + K ) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 9/24
LSDRadixSort Procedure LSDRadixSort (s : Sequence of Element) for i := 0 to d 1 do definiere key(x) als x K i mod K KSort(s) Was passiert hier? Laufzeit O(d(n + K )) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 10/24
Algo 1 so far? Was haben wir bis jetzt schon kennengelernt? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 11/24
O-Kalkül Welche Annahmen treffen wir? Gibt es "Rechenregeln"? Gibt es Werkezeuge? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 12/24
O-Kalkül Zeige oder widerlege: 2 2n = o(3 n ). Gilt nicht: 2 2n = (2 2 ) n = 4 n 4 n c 3 n ( 4 3 )n c n log 4 c 3 Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 13/24
Invarianten Function dosmth findnumber(a : Array [1..n] of N, x : N { 1}) for i := 0 to n do if A [ i ] == x then return i invariant??? k 1..i : A[k] x return -1 Was macht obiger Algorithmus? Was ist eine sinnvolle Schleifeninvariante? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 14/24
Folgen Welche Datenstrukturen eignen sich für folgende Operationen? GET(D,i) und LENGTH FIRST und LAST INSERT und REMOVE PUSH und POP CONCAT und SPLICE FINDNEXT Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 15/24
Folgen (2) 1 Nenne zwei Operationen, die doppelt verkette Listen in konstanter worst-case-zeit unterstützen, einfach verkettete Listen jedoch nicht. 2 Nenne einen Vorteil von einfach verketteten Listen gegenüber doppelt verketteten Listen. 1 insert, remove, popback 2 weniger Speicherverbrauch (da weniger Handles) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 16/24
Folgen (3) Wie lautet die Datenstrukturinvariante für doppelt verkettete Listen aus der Vorlesung? pref next = next prev = this Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 17/24
Hashing Welche Voraussetzungen sind wichtig? Was hashe ich überhaupt? Wie löse ich Kollisionen auf? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 18/24
Hashing Nenne einen Vorteil und einen Nachteil von Hashing mit verketteten Listen gegenüber offenem Hashing mit linearer Suche. Vorteile: insert in O(1) für dichte Hashtabellen besser, referentielle Integrität, Leistungsgarantien mit universellem Hashing Nachteile: nicht so platz-effizient, nicht so cache-effizient, nicht so einfach Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 19/24
Sortieren Welche Verfahren haben wir kennengelernt? Welche Laufzeiten haben diese im Worst, Average und Best Case? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 20/24
Sortieren: ich bin stabil "Definition" Elemente, die bezüglich des Sortierschlüssels gleich sind, behalten ihre Reihenfolge relativ zueinander bei. Wer ist stabil? Wer nicht? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 21/24
Sortieren: ich bin sparsam Definition: inplace Zusätzlicher Speicherverbrauch O(1). Der benötigte zusätzliche Speicher ist unabhängig von der Eingabe. Inplace: das kann wer? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 22/24
Sortieren: Verbesserungen Warum wird QuickSort in der Realität eingesetzt? Was wurde getan, um ihn zu verbessern? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 23/24
Was haben wir heute gemacht? Sortieren mit diskretem Schlüsselraum Wiederholung Aufgaben Viel Erfolg und eine super Woche! Marc Leinweber Algorithmen I - Tutorium 28 Nr. 6 08.06.2017 24/24