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

Ähnliche Dokumente
INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Sortieren & Co. KIT Institut für Theoretische Informatik

Übung Algorithmen I

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

4. Übung Algorithmen I

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

Algorithmen und Datenstrukturen

Kap. 3: Sortieren (3)

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

Grundlagen: Algorithmen und Datenstrukturen

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert

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

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

Algorithmen I - Tutorium 28 Nr. 6

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

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Suchen und Sortieren Sortieren. Mergesort

Asymptotische Laufzeitanalyse: Beispiel

Quicksort ist ein Divide-and-Conquer-Verfahren.

Algorithmen I - Tutorium 28 Nr. 3

Erinnerung VL vom

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

Übung Algorithmen und Datenstrukturen

Erinnerung VL

1. Übung Algorithmen I

Algorithmentheorie Randomisierung. Robert Elsässer

Randomisierte Algorithmen 2. Erste Beispiele

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen:

1.3 Erinnerung: Mergesort

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

Übersicht. Einfache Verfahren MergeSort Untere Schranke QuickSort Selektieren Schnelleres Sortieren Externes Sortieren. 6 Sortieren.

Lineare Kongruenzgeneratoren und Quicksort

Sortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2

Algorithmen & Komplexität

Algorithmen I. Sebastian Schlag Institut für Theoretische Informatik Web:

8. Übung zu Algorithmen I 15. Juni 2016

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

Abschnitt 19: Sortierverfahren

Algorithmen I - Tutorium 28 Nr. 1

Erinnerung VL

Informatik II, SS 2014

Algorithmentheorie Randomisierung

Algorithmen I. Prof. Peter Sanders Institut für Theoretische Informatik Web:

Erinnerung VL

Mergesort. Inhaltsverzeichnis. Veranschaulichung der Funktionsweise. aus Wikipedia, der freien Enzyklopädie

Ein sortiertes Feld kann in O(log n) durchsucht werden, z.b. mit Binärsuche. Der Algorithmus 1 gibt den Pseudocode der binären Suche an.

Übung Algorithmen I

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

in eine Folge ai, so daß bezgl. einer Ordnung gilt: a a, j < n

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Randomisierte Algorithmen am Beispiel Quicksort

> Parallele Systeme Übung: 4. Übungsblatt Philipp Kegel Wintersemester 2012/2013. Parallele und Verteilte Systeme, Institut für Informatik

Übung Algorithmen I

Heapsort. Erstellung eines Heaps

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

Die Schnittstelle Comparable

Heapsort. Dr. Michael Brinkmeier (TU Ilmenau) Algorithmen und Datenstrukturen / 50

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

Exkurs: Graphtraversierung

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

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

Programmiertechnik II

Informatik II, SS 2018

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Informatik II, SS 2016

Erinnerung VL

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

Wir wollen nun die Behauptung beweisen, dass die Laufzeit von SELECT linear ist, also dass T (n) = O(n) gilt.

4. Sortieren 4.1 Vorbemerkungen

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Algorithmen und Datenstrukturen

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

5. Übungsblatt zu Algorithmen I im SoSe 2016

Suchen und Sortieren Sortieren. Heaps

Übersicht. Datenstrukturen und Algorithmen. Divide-and-Conquer. Übersicht. Vorlesung 9: Quicksort (K7)

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp

Musterlösung zur 7. Übung

Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Algorithmen & Komplexität

Übung zu Algorithmen I 31. Mai 2017

Karlsruher Institut für Technologie Institut für Theoretische Informatik. Übungsklausur Algorithmen I

Erinnerung VL

2. Effizienz von Algorithmen

3.2. Divide-and-Conquer-Methoden

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

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

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

Wiederholung. Divide & Conquer Strategie

Transkript:

Algorithmen I Prof. Jörn Müller-Quade 24.05.2017 Institut für Theoretische Informatik Web: https://crypto.iti.kit.edu/index.php?id=799 (Folien von Peter Sanders) KIT Institut für Theoretische Informatik 1

Quicksort zufälliger Pivot Function quicksort(s : Sequence of Element) : Sequence of Element if s 1 then return s pick p s uniformly at random a:= e s : e < p b:= e s : e = p c:= e s : e > p return concatenation of quicksort(a), b, and quicksort(c) KIT Institut für Theoretische Informatik 2

Satz: Quicksort hat erwartete Laufzeit O(n log n) Annahme: alle Elemente verschieden Warum `OBdA'? Es genügt, die 3-Wege Vergleiche (<,=,>) C(n) zu zählen. Genauer: wir bestimmen C(n) = E[C(n)] Function quicksort(s : Sequence of Element) : Sequence of Element if s 1 then return s pick p s uniformly at random a:= e s : e < p // s 1 b:= e s : e = p // 3-Wegec:= e s : e > p // Vergleiche return concatenation of quicksort(a), b, and quicksort(c) KIT Institut für Theoretische Informatik 3

Beweisansatz 1: Rekurrenzen Beweis: Im Buch wird bewiesen, dass mit Wahrscheinlichkeit 1/2 das Aufspaltverhältnis nicht schlechter als 1 4 : 3 4 ist. Das genügt um C(n) = O(n logn) zu zeigen. Satz: C(n) 2n lnn 1.45n logn KIT Institut für Theoretische Informatik 4

Satz: C(n) 2n lnn 1.45n logn Sei s = e 1,...,e n sortierte Eingabefolge. Indikatorzufallsvariable: X ij := 1 gdw. e i wird mit e j verglichen. C(n) = E [ n n i=1 j=i+1 X ij ] = n n i=1 j=i+1 E[X ij ] = n n i=1 j=i+1 P[X ij = 1]. KIT Institut für Theoretische Informatik 5

Lemma: P [ X ij = 1] = 2 j i+1 Sortierte Eingabefolge: s = e 1,...,e i 1,e i,e i+1,...,e j 1,e j,e j+1 }{{},...,e n j i+1 Elemente X ij = 1 e i wird mit e j verglichen e i oder e j wird Pivot bevor ein Pivot aus e i+1,...,e j 1 gewählt wird. P[X ij = 1] = 2 j i+1 KIT Institut für Theoretische Informatik 6

Satz: C(n) 2n lnn 1.45n logn C(n) = = n n i=1 j=i+1 n i=1 n n i+1 k=2 n i=1 k=2 n =2n k=2 2 k 1 k 2 j i + 1 2 k =2n(H n 1) 2n(1 + lnn 1) = 2n lnn. =:k {}}{ i j j i + 1 1 2..n 2..n 2 3..n 2..n 1 3 4..n 2..n 2... n 1 n..n 2..2 n /0 /0 (harmonische Summe) KIT Institut für Theoretische Informatik 7

Exkurs: Harmonische Summe i+1 i 1 x dx 1 i i 1 i 1 x dx f Also n n 1 1 lnn = 1 x dx = i=1 i+1 i n 1 1 x dx 1 i i=1 n i=1 1 i = 1 + i 1 n i=2 i i+1 1 i 1 + n i i=2 i 1 1 n x = 1 + 1 1 dx = 1 + lnn x KIT Institut für Theoretische Informatik 8

Quicksort: Eziente Implementierung Array-Implementierung inplace 2-Wegevergleiche KIT Institut für Theoretische Informatik 9

Quicksort: Eziente Implementierung Procedure qsort(a : Array of Element; l, r : N) if l r then return k:= pickpivotpos(a, l, r) m:= partition(a, l, r, k) qsort(a,l,m 1) qsort(a,m + 1,r) KIT Institut für Theoretische Informatik 10

Quicksort: Eziente Implementierung Function partition(a : Array of Element; l,r,k : N) p:= a[k] swap(a[k],a[r]) i:= l for j := l to r 1 do l i j r invariant p > p? p if a[j] p then swap(a[i],a[j]) i++ l i r assert p > p p swap(a[i],a[r]) l i r assert p p > p return i // pivot KIT Institut für Theoretische Informatik 11

Beispiel: Partitionierung, k = 1 p, i, j 3 6 8 1 0 7 2 4 5 9 9 6 8 1 0 7 2 4 5 3 9 6 8 1 0 7 2 4 5 3 9 6 8 1 0 7 2 4 5 3 9 6 8 1 0 7 2 4 5 3 1 6 8 9 0 7 2 4 5 3 1 0 8 9 6 7 2 4 5 3 1 0 8 9 6 7 2 4 5 3 1 0 2 9 6 7 8 4 5 3 1 0 2 9 6 7 8 4 5 3 1 0 2 9 6 7 8 4 5 3 1 0 2 3 6 7 8 4 5 9 KIT Institut für Theoretische Informatik 12

Beispiel: Rekursion 3 6 8 1 0 7 2 4 5 9 1 0 2 3 6 7 8 4 5 9 0 1 2 4 5 6 9 7 8 4 5 8 7 9 7 8 KIT Institut für Theoretische Informatik 13

Gröÿerer Basisfall Procedure qsort(a : Array of Element; l, r : N) if r l + 1 n 0 then insertionsort(a[l..r]) else k:= pickpivotpos(a, l, r) m:= partition(a, l, r, k) qsort(a,l,m 1) qsort(a,m + 1,r) KIT Institut für Theoretische Informatik 14

Inplace? Wirklich? Im schlechtesten Fall: O(n) für Rekursionsstapel. Potentielles Sicherheitsproblem! Im Mittel: O(log n) zusätzlicher Platz kein Problem. Als Garantie für schlechtesten Fall: halbrekursive Implementierung Rekursion auf kleinere Hälfte KIT Institut für Theoretische Informatik 15

Halbrekursive Implementierung Procedure qsort(a : Array of Element; l, r : N) while r l + 1 > n 0 do k:= pickpivotpos(a, l, r) m:= partition(a, l, r, k) if m < (l + r)/2 then qsort(a,l,m 1); l:= m + 1 else qsort(a,m + 1,r); r:= m 1 insertionsort(a[l..r]) KIT Institut für Theoretische Informatik 16

Halbrekursive Implementierung Procedure qsort(a : Array of Element; l, r : N) while r l + 1 > n 0 do k:= pickpivotpos(a, l, r) m:= partition(a, l, r, k) if m < (l + r)/2 then qsort(a,l,m 1); l:= m + 1 else qsort(a,m + 1,r); r:= m 1 insertionsort(a[l..r]) Satz: Rekursionstiefe log nn0 Beweisidee: Induktion. Teilproblemgröÿe halbiert sich (mindestens) mit jedem rekursiven Aufruf KIT Institut für Theoretische Informatik 17

Quadratische Komplexität bei gleichen Elementen? Variante aus dem Buch verwenden oder doch Drei-Wege-Partitionierung KIT Institut für Theoretische Informatik 18