Transcript pps
Slide 1
External Quicksort
Optimierung des Quicksort-Verfahrens für
Speicherhierarchien
Martin Gronemann, Bernd Zey
Slide 2
Überblick
1. Quicksort - Erinnerung
2. Intuitive Lösung
3. Distribution-Sort (external Quicksort)
Slide 3
Quicksort - Erinnerung
Pivot-Element: 23
L L L L L R R R R
12 42
5 23
22 1 60
23 17
17
23 55 22
23 42
60
5
12 5 22 1 17 23 55 60
22 42
1 5 12 22 17 23 42 55 60
1 5 12 17 22 23 42 55 60
Slide 4
Intuitive Lösung
1. Lade den Wert des Pivot-Elements
und die ersten und letzen B ArrayElemente in den Main Memory
2. Starte normalen Quicksort
3. Laden und Schreiben bei Bedarf
Slide 5
Intuitive Lösung: Beispiel
EM:
MM:
L L L LL L
Pivot
RR R R R R R R R
Slide 6
Analyse: Intuitive Lösung
• Analyse der I/O‘s äquivalent zur
Laufzeitanalyse von Quicksort
• Pro Rekursionstiefe: O(N/B) I/O‘s benötigt
• Im average case beträgt die Rekursionstiefe
O(log2 N)
I/O-Anzahl O(N/B log2 N/B)
interne Laufzeit O(N log2 N)
• Im worst case (N2)
Slide 7
Distribution Sort
•
•
•
•
Mit mehreren Pivot-Elementen
arbeiten
Pivot-Elemente definieren „Buckets“
Element muss in „Bucket“ einsortiert
werden
Jeden „Bucket“ rekursiv sortieren bis
Blockgröße B erreicht ist
Slide 8
Berechnung der PivotElemente (1)
1. Unterteile Eingabemenge in N/M Chunks
2. Sortiere jeden Chunk
3. Nehme jedes a-te Element aus jedem
Chunk in Array U auf (|U| = N/a)
4. Sortiere U
5. Berechne µ-1 äquidistante Pivot-Elemente
aus dem Array U mit BFPRT (Blum-FloydPratt-Rivest-Tarjan)
Slide 9
Berechnung der PivotElemente (2)
Chunks
(sortiert)
Array U
(sortiert)
BFPRT
µ-1 Pivot-Elemente
Slide 10
Analyse: Berechnung der
Pivot-Elemente
• U kann mit O(N/B) I/O‘s erzeugt werden.
• BFPRT benötigt
O((|U|/B) lg µ) =
O((N/aB) lg µ) I/O‘s
Für a ≥ lg µ:
O(N/B)
• Insgesamt O(N/B) I/O‘s für die Berechnung
der Pivot-Elemente
Slide 11
Rekursion
1. Sortiere jedes Element in den richtigen
„Bucket“ (Distribution)
Bi := {x | pi ≤ x < pi+1}
2. Starte Rekursion auf jedem „Bucket“
3. Wenn „Bucket“ Blockgröße erreicht
hat dann intern sortieren
Slide 12
Beispiel µ=4
-∞
Pivot 1
Pivot 2
Blockgröße
Pivot 3
∞
Rekursionstiefe: O(logµN/B)
Slide 13
Analyse
• Rekursionstiefe bis zur Blockgröße:
O(logµ N/B) I/O‘s
• Einsortieren kostet pro Rekursionstiefe
O(N/B) I/O‘s
• Gesamt: O(N/B logµ N/B) I/O‘s
Slide 14
Literatur
• Alok Aggarwal and Jerey Scott Vitter, 1988:
„The Input/Output Complexity of Sorting and Related
Problems“
• Jeff Erickson - Prof. an der University of Illinois:
„Introduction: the standard external-memory model;
upper and lower bounds for scanning (Θ(n)),
searching (Θ(logB n) via B-trees), and sorting (Θ(n
logm n) via mergesort); external comparison trees“
http://compgeom.cs.uiuc.edu/~jeffe/teaching/473/01search+sort.pdf
External Quicksort
Optimierung des Quicksort-Verfahrens für
Speicherhierarchien
Martin Gronemann, Bernd Zey
Slide 2
Überblick
1. Quicksort - Erinnerung
2. Intuitive Lösung
3. Distribution-Sort (external Quicksort)
Slide 3
Quicksort - Erinnerung
Pivot-Element: 23
L L L L L R R R R
12 42
5 23
22 1 60
23 17
17
23 55 22
23 42
60
5
12 5 22 1 17 23 55 60
22 42
1 5 12 22 17 23 42 55 60
1 5 12 17 22 23 42 55 60
Slide 4
Intuitive Lösung
1. Lade den Wert des Pivot-Elements
und die ersten und letzen B ArrayElemente in den Main Memory
2. Starte normalen Quicksort
3. Laden und Schreiben bei Bedarf
Slide 5
Intuitive Lösung: Beispiel
EM:
MM:
L L L LL L
Pivot
RR R R R R R R R
Slide 6
Analyse: Intuitive Lösung
• Analyse der I/O‘s äquivalent zur
Laufzeitanalyse von Quicksort
• Pro Rekursionstiefe: O(N/B) I/O‘s benötigt
• Im average case beträgt die Rekursionstiefe
O(log2 N)
I/O-Anzahl O(N/B log2 N/B)
interne Laufzeit O(N log2 N)
• Im worst case (N2)
Slide 7
Distribution Sort
•
•
•
•
Mit mehreren Pivot-Elementen
arbeiten
Pivot-Elemente definieren „Buckets“
Element muss in „Bucket“ einsortiert
werden
Jeden „Bucket“ rekursiv sortieren bis
Blockgröße B erreicht ist
Slide 8
Berechnung der PivotElemente (1)
1. Unterteile Eingabemenge in N/M Chunks
2. Sortiere jeden Chunk
3. Nehme jedes a-te Element aus jedem
Chunk in Array U auf (|U| = N/a)
4. Sortiere U
5. Berechne µ-1 äquidistante Pivot-Elemente
aus dem Array U mit BFPRT (Blum-FloydPratt-Rivest-Tarjan)
Slide 9
Berechnung der PivotElemente (2)
Chunks
(sortiert)
Array U
(sortiert)
BFPRT
µ-1 Pivot-Elemente
Slide 10
Analyse: Berechnung der
Pivot-Elemente
• U kann mit O(N/B) I/O‘s erzeugt werden.
• BFPRT benötigt
O((|U|/B) lg µ) =
O((N/aB) lg µ) I/O‘s
Für a ≥ lg µ:
O(N/B)
• Insgesamt O(N/B) I/O‘s für die Berechnung
der Pivot-Elemente
Slide 11
Rekursion
1. Sortiere jedes Element in den richtigen
„Bucket“ (Distribution)
Bi := {x | pi ≤ x < pi+1}
2. Starte Rekursion auf jedem „Bucket“
3. Wenn „Bucket“ Blockgröße erreicht
hat dann intern sortieren
Slide 12
Beispiel µ=4
-∞
Pivot 1
Pivot 2
Blockgröße
Pivot 3
∞
Rekursionstiefe: O(logµN/B)
Slide 13
Analyse
• Rekursionstiefe bis zur Blockgröße:
O(logµ N/B) I/O‘s
• Einsortieren kostet pro Rekursionstiefe
O(N/B) I/O‘s
• Gesamt: O(N/B logµ N/B) I/O‘s
Slide 14
Literatur
• Alok Aggarwal and Jerey Scott Vitter, 1988:
„The Input/Output Complexity of Sorting and Related
Problems“
• Jeff Erickson - Prof. an der University of Illinois:
„Introduction: the standard external-memory model;
upper and lower bounds for scanning (Θ(n)),
searching (Θ(logB n) via B-trees), and sorting (Θ(n
logm n) via mergesort); external comparison trees“
http://compgeom.cs.uiuc.edu/~jeffe/teaching/473/01search+sort.pdf