Kap. 3: Sortieren (3)

Ähnliche Dokumente
Kap. 3 Sortieren. 7. VO DAP2 SS Mai Vorlesung am Do 7.5. entfällt wegen FVV um 14 Uhr HeapSort ff 3.1.

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

Kap. 3: Sortieren. Überblick. Unser Sortierproblem. Motivation. Laufzeitmessung. Warum soll ich hier bleiben? Sortierverfahren sind WICHTIG!!!

Kap. 3: Sortieren. 4. VO DAP2 SS April 2009

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

Heapsort, Quicksort, Mergesort. 8. Sortieren II

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

Mi, 21. Mai, ab 12:30 Uhr, in E23 (OH14) Dann ab 14:30 Uhr: Motivation: Gegeben: hier: später: Aufgabe:

Kap. 3ff: Untere Laufzeitschranke und Lineare Verfahren

Motivation Überblick

Suchen und Sortieren Sortieren. Heaps

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

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

Auswählen nach Rang (Selektion)

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

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

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

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

Kap. 4.7 Skiplisten. 14./15. VO DAP2 SS /16. Juni 2009

Sortieren II / HeapSort Heaps

Kap. 2: Abstrakte Datentypen Kap. 3: Sortieren

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

Suchen und Sortieren Sortieren. Mergesort

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

Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

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

Praktische Informatik I - Algorithmen und Datenstrukturen Wintersemester 2006/07

Informatik II, SS 2018

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen Heapsort

Kap. 4.7 Skiplisten. 15./16. VO DAP2 SS /10. Juni 2008

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)

Algorithmen und Datenstrukturen

Technische Universität München

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

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

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

Informatik II, SS 2018

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Algorithmen und Datenstrukturen

Abschnitt 19: Sortierverfahren

Heapsort. Erstellung eines Heaps

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

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

Übung Algorithmen und Datenstrukturen

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

3.2. Divide-and-Conquer-Methoden

Kap. 6.5: Minimale Spannbäume ff

7. Sortieren Lernziele. 7. Sortieren

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Datenstrukturen und Algorithmen (SS 2013) Prof. Dr. Leif Kobbelt Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

4. Sortieren 4.1 Vorbemerkungen

Algorithmen und Datenstrukturen (für ET/IT)

Copyright, Page 1 of 7 Heapsort

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

Datenstrukturen und Algorithmen (SS 2013)

Grundlagen der Algorithmen und Datenstrukturen Kapitel 6

Algorithmen I - Tutorium 28 Nr. 2

Suchen und Sortieren Sortieren. Heaps

Quicksort ist ein Divide-and-Conquer-Verfahren.

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Algorithmen und Datenstrukturen

Übung Algorithmen I

Übung Algorithmen und Datenstrukturen

Heapsort. Ziel: Sortieren Feld A[1..n]von nschlüsseln in O(n log n)worst case Zeit(so wie Mergesort), aber ohne Zusatzspeicher(so wie Quicksort).

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

Informatik II, SS 2014

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

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

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Algorithmen und Datenstrukturen

Grundzüge von Algorithmen und Datenstrukturen, WS 15/16: Lösungshinweise zum 13. Übungsblatt

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

Formaler. Gegeben: Elementfolge s = e 1,...,e n. s ist Permutation von s e 1 e n für eine lineare Ordnung ` '

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

Kapitel 6 Elementare Sortieralgorithmen

Informatik II Prüfungsvorbereitungskurs

9. Natürliche Suchbäume

Asymptotische Laufzeitanalyse: Beispiel

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

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

5.5 Prioritätswarteschlangen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Abgabe: (vor der Vorlesung) Aufgabe 7.1 (P) Binomial Heap

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1

Proseminar Effiziente Algorithmen

Transkript:

Kap. 3: Sortieren (3) Professor Dr. Lehrstuhl für Algorithm Engineering, LS Fakultät für Informatik, TU Dortmund 6. VO DAP2 SS 2009 30. April 2009

Überblick Quick-Sort Analyse von Quick-Sort Quick-Sort Varianten Heap-Sort 2

Termine für Übungstests. Übungstest: Di 9. Mai, in der Vorlesung im AudiMax, Beginn: ab 2:5 Uhr, ab 2 Uhr anwesend sein wegen Sitzordnung 2. Übungstest: Di 6. Juni, in der VO im AudiMax, Beginn: ab 2:5 Uhr, ab 2 Uhr anwesend sein wegen Sitzordnung 3

Motivation Warum soll ich hier bleiben? Wir lernen Quick-Sort Was ist daran denn besonders? Quick-Sort gehört zu den Top 0 wichtigsten Algorithmen 4

Analyse von QuickSort: Average Grundannahmen alle Schlüssel sind verschieden o.b.d.a. A[i] {,2, n} alle Permutationen sind gleich wahrscheinlich Jede Zahl k {,2,,n} tritt mit gleicher Wahrscheinlichkeit /n an Position n auf Pivotelement k erzeugt zwei Folgen der Längen k- und n-k Diese Folgen sind wieder zufällig: gilt 5

Analyse von QuickSort: Average Teilt man sämtliche Folgen mit n Elementen mit dem Pivotelement (an der letzten Stelle), so erhält man sämtliche Folgen der Länge k- und n-k. Rekursionsgleichung der Laufzeitfunktionen: wobei die Summe über alle n möglichen Aufteilungen läuft und bn der Aufteilungsaufwand für eine Folge der Länge n ist. 6

Analyse von QuickSort: Average Einsetzen von T(0)=0: Lösung der Rekursionsgleichung: T(n)=Θ(n log n) 7

Beweis von Average-Case Wir zeigen: T(n)=O(n log n) T(n)=Ω(n log n) ähnlich (o.bw.) Wir zeigen durch vollständige Induktion: es existieren c,n 0 >0, so dass für alle n n 0 : T(n) cn log n Wir wählen: n 0 =2. Induktionsanfang: n=2: T(2)=T()+bn=a+2b somit ist T(2) c2 log 2 g.d.w. c (a+2b)/2=a/2+b 8

Beweis von Average-Case ff Induktionsschluss: Sei nun n 3, Beh. gilt für alle kleineren Werte: Diese Ungleichung gilt, falls c 4b Wähle insgesamt c=max {a/2+b,4b}

Eigenschaften von QuickSort Anzahl der Schlüsselvergleiche: C best (n)=c avg (n)=θ(n log n); C worst (n)=θ(n 2 ) Eigenschaften: in situ? adaptiv? stabil? Θ(n) zusätzlichen Speicher sehr gut in der Praxis es existieren viele Varianten

Quicksort - Varianten Randomisierter Quicksort Quicksort mit log(n) Speicher

Randomisierter Quick-Sort Ziel: Laufzeit unabhängig von der Qualität der Eingabefolge (vorsortiert, etc ) Idee: Wähle Pivotelement zufällig aus! Einfachste Umsetzung: Neues Partitionieren: () z := Zufallszahl zwischen l und r (2) vertausche A[z] mit A[r] (3) normales Partitionieren 2

Randomisierter Quick-Sort Randomisierte Algorithmen: Es lassen sich keine Best-Case und Worst-Case Beispiele mehr konstruieren! Aber: Natürlich kann der Worst-Case noch eintreten! Man berechnet eine Erwartete Laufzeit = Erwartungswert der Laufzeit durchschnittliche Laufzeit Average-Case E[ T(n) ] = O(n log n) 3

Quick-Sort mit log(n) Speicher Bisher: O(n) Speicher l... p- p p+... r Idee: Lange Teile sofort bearbeiten D.h.: Rekursiver Aufruf nur für kleinere Teile. diese Teile sind Hälfte der betrachteten Länge Tiefe der rekursiven Aufrufe: O(log n) 4

Quick-Sort mit log(n) Speicher Idee: Lange Teile sofort bearbeiten bisher () procedure QS(ref A,l,r) (2) if l < r then { (3) p := Partition(A,l,r) (4) QuickSort(A,l,p-) (5) QuickSort(A,p+,r) (6) } Zwischenschritt () procedure QS(ref A,l,r) (2) while l < r do { (3) p := Partition(A,l,r) (4) QuickSort(A,l,p-) (5) l := p+ (6) } 5

Quick-Sort mit log(n) Speicher Zwischenschritt () procedure QS(ref A,l,r) (2) while l < r do { (3) p := Partition(A,l,r) (4) QuickSort(A,l,p-) (5) l := p+ (6) } l... p- p p+... r () procedure QS(ref A,l,r) (2) while l < r do { (3) p := Partition(A,l,r) (4) if p-l < r-p then { (5) QuickSort(A,l,p-) (6) l := p+ (7) } else { (8) QuickSort(A,p+,r) (9) r := p- (0) } } 6

Was bisher geschah Insertion-Sort: O(n 2 ) einfach Selection-Sort: Θ(n 2 ) Merge-Sort: O(n log n) nicht in-situ Quick-Sort: praxis schnell O(n 2 ) Jetzt: Heap-Sort: O(n log n), in-situ Auf Basis von Selection-Sort! 7

Übersicht Heap-Sort Einführung in Datenstruktur Heap Analyse von Heap-Sort 8

Selection-Sort GUT In jedem Schritt wird ein Schlüssel an seine richtige Position gesetzt SCHLECHT Suchen des richtigen Schlüssels: Θ(n) IDEE Den unsortierten Teil vorsortieren Schnelles Finden des nächsten Schlüssels 9

Heap (=Haufen) Heap: eine neue Datenstruktur! Speicherung weiterhin als Array (in-situ!) Interpretation als binärer Baum, an dessen Wurzel immer das größte Element stehen soll 20

Definition Heap Eine Folge H=<k,k 2,,k n > von Schlüsseln ist ein (Max-) Heap, wenn für jede Position i die folgende Heap-Eigenschaft erfüllt ist: Falls 2i n, so gilt k i k 2i und falls 2i+ n so gilt k i k 2i+. Beispiel: 2 3 4 5 6 7 8 F=<8,6,7,3,4,5,2,> Ähnlich sind Min-Heaps definiert. Dort gilt: Falls 2i n, so gilt k i k 2i und falls 2i+ n so gilt k i k 2i+. 2

Heap: Interpretation F=<8,6,7,3,4,5,2,> 8 Heap-Eigenschaft: Falls 2i n, so gilt k i k 2i und falls 2i+ n so gilt k i k 2i+. 6 7 2 3 Heap Eigenschaft: Schlüssel der Elternknoten ist größer gleich denen seiner Kinder 8 4 3 5 4 6 5 7 2 22

Heap: Interpretation S Interpretation als Binärer Baum O 2 3 R T I N G 4 5 6 7 Speicherung als Array 2 3 4 5 6 7 S O R T I N G

Binärer Baum Wurzel Ebene S Knoten = Einträge im Baum Ebene 2 Elter / Vater O 2 3 Kind R Kanten verbinden Knoten Ebene 3 T I N G 4 5 6 7 Blätter = Knoten ohne Kinder Binärer Baum: maximal 2 Kinder pro Knoten

Tiefe/Höhe des Baums Ebene S # Knoten BIS Ebene 3 7 # Knoten PRO Ebene 2 4 Ebene 2 Ebene 3 O 2 3 R T I N G 4 5 6 7 5 2 k - 8 Ebene 4 2 k- Ebene k

Tiefe/Höhe des Baums Ebene S Tiefe/Höhe eines Baums = Anzahl der Ebenen - # Knoten BIS Ebene 3 7 # Knoten PRO Ebene 2 4 Ebene 2 Ebene 3 O n max = 2 h+ - n min = 2 h Gegebene Höhe h: 2 3 Maximale Höhe bei n Elementen? R T I N G n = 2 h h max = log 2 n 4 5 6 7 5 2 k - 8 Ebene 4 2 k- Ebene k Höhe des Heaps: O(log n)

Heap-Eigenschaft Heap Eigenschaft: Schlüssel der Elternknoten ist größer gleich denen seiner Kinder Array A[ n] O S 2 3 R Indizes i: A[i] A[2i] und A[i] A[2i+] falls diese Indizes existieren T I N G 4 5 6 7 nicht erfüllt! 2 3 4 5 6 7 S O R T I N G

Idee von Heap-Sort Elemente im unsortierten Array so verschieben, dass die Heap-Eigenschaft erfüllt ist (CreateHeap) Größtes Element im Heap finden ist einfach Wurzel = erstes Element im Array Wurzel aus Heap entfernen Heap-Eigenschaften wiederherstellen (Sifting) 29

CreateHeap Beobachtung Die Heapbedingung ist an den Blättern erfüllt. S Algorithmus Betrachte Knoten über den Blättern repariere Teilheap Bearbeite Baum von unten nach oben Teilbäume sind immer Heaps 4 O 2 3 R T 5 I 6 N 7 G 2 3 4 5 6 7 S O R T I N G 30

CreateHeap procedure CREATEHEAP () { for i := n/2 { SIFTDOWN (i, n) } } procedure SIFTDOWN (i, m) { while Knoten i hat Kinder m { j := Kind m mit größerem Wert } } if A[i] < A[j] then { vertausche A[i] und A[j] i := j } else return 4 O S 2 3 R T 5 I 6 N 7 G 2i 2i+ 2 3 4 5 6 7 S O R T I N G i

CreateHeap procedure CREATEHEAP () { for i := n/2 { SIFTDOWN (i, n) } } procedure SIFTDOWN (i, m) { while Knoten i hat Kinder m { j := Kind m mit größerem Wert } } if A[i] < A[j] then { vertausche A[i] und A[j] i := j } else return 4 i O S 2 3 R T 5 I 6 N 7 G 2i 2i+ 2 3 4 5 6 7 S O R T I N G

CreateHeap procedure CREATEHEAP () { for i := n/2 { SIFTDOWN (i, n) } } procedure SIFTDOWN (i, m) { while Knoten i hat Kinder m { j := Kind m mit größerem Wert } } if A[i] < A[j] then { vertausche A[i] und A[j] i := j } else return Heap-Erstellung beendet j T i S 2 3 R 4 O 5 I 6 N 7 G 2 3 4 5 6 7 S T R O I N G

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) 4 S GT 2 3 R k O 5 I 6 N 7 GT 2 3 4 5 6 7 GT S R O I N GT 34

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) 4 GO S GS 2 3 R k GO 5 I 6 N 7 T 2 3 4 5 6 7 GS GO S R OG I N T 35

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) 4 O NR S 2 3 RN G 5 I 6 NS 7 T k 2 3 4 5 6 7 NR S O NR G I NS T 36

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) 4 OI OR I 2 3 k N G 5 RI 6 S 7 T 2 3 4 5 6 7 OR I OI N G RI S T 37

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) 4 k I OG N 2 3 GN OG 5 R 6 S 7 T 2 3 4 5 6 7 OG N I GN GO R S T 38

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) GI GN I 2 3 k GN 4 O 5 R 6 S 7 T 2 3 4 5 6 7 GN I GI GN O R S T 39

HeapSort procedure HEAPSORT () { } } CREATEHEAP () for k := n 2 { vertausche A[] und A[k] SIFTDOWN (, k-) k GI GI 2 3 N 4 O 5 R 6 S 7 T 2 3 4 5 6 7 GI GI N O R S T 40