2.3.1 Einleitung 2.3.2 Einfache Sortierverfahren 2.3.3 ...€¦ · Datenstrukturen und Algorithmen...
Transcript of 2.3.1 Einleitung 2.3.2 Einfache Sortierverfahren 2.3.3 ...€¦ · Datenstrukturen und Algorithmen...
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.3 Sortieren
2.3.1 Einleitung 2.3.2 Einfache Sortierverfahren 2.3.3 Höhere Sortierverfahren 2.3.4 Komplexität von Sortierverfahren 2.3.5 Spezielle Sortierverfahren
1
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Stabilität von Sortieralgorithmen
• Ein Sortieralgorithmus heißt stabil, wenn sich die relative Reihenfolge von gleichen Elementen während des Sortierens nicht ändert.
• Beispiel:
2
1 1 2 2 1 3
3 2 2
3 2 2
1 1 1
1 1 1
stabil
nicht stabil
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort
• Annahme: R1, R2, ... , Rn ∈ 1,... ,k • Idee: Bestimme zu jedem Ri die Zahl
der Elemente ≤Ri und sortiere Ri an die entsprechende Stelle
3
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Algorithmus
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Algorithmus
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
5
Eingabe: A[1..n] Ausgabe: C[1..n]
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Algorithmus
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
6
B ist mit 0en initialisiert
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Algorithmus
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
7
B[j] enthält die Anzahl der Elemente = j
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Algorithmus
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
8
B[j] enthält die Anzahl der Elemente ≤ j
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Algorithmus
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
9
B[j] enthält das j-te Element
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
10
1 4 1 3 4 4 6 3 A n=8, k=6
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
11
1 4 1 3 4 4 6 3
0 0 0 0 0 0
A
B
n=8, k=6
1 2 3 4 5 6
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
12
1 4 1 3 4 4 6 3
0 0 0 1 0 0
A
B
n=8, k=6
1 2 3 4 5 6
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
13
1 4 1 3 4 4 3
0 0 1 1 0 0
A
B
n=8, k=6
1 2 3 4 5 6
6
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
14
1 4 1 3 4 6 3
1 0 1 1 0 0
A
B
n=8, k=6
1 2 3 4 5 6
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
15
4 1 3 4 4 6 3
1 0 1 1 0 1
A
B
n=8, k=6
1 2 3 4 5 6
1
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
16
1 4 1 4 4 6 3
1 0 1 2 0 1
A
B
n=8, k=6
1 2 3 4 5 6
3
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
17
1 4 1 3 4 4 6 3
3 0 1 2 0 2
A
B
n=8, k=6
1 2 3 4 5 6
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
18
1 4 1 3 4 4 6 3
3 0 1 2 2
A
B
n=8, k=6
1 2 3 4 5 6
+
0
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
19
1 4 1 3 4 4 6 3
3 0 1 2 2
A
B
n=8, k=6
1 2 3 4 5 6
2
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
20
1 4 1 3 4 4 6 3
3 0 1 2 2
A
B
n=8, k=6
1 2 3 4 5 6
+
2
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
21
1 4 1 3 4 4 6 3
3 0 1 2 2
A
B
n=8, k=6
1 2 3 4 5 6
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
22
1 4 1 3 4 4 6 3
0 1 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
+
3
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
23
1 4 1 3 4 4 6 3
0 1 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
7
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
24
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
7
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
25
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
7
C 1 2 3 4 5 6 8 7
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
26
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
7
C 1 2 3 4 5 6 8 7
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
27
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
7
C 1 2 3 4 5 6 8 7
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
28
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
6
C 1 2 3 4 5 6 8 7
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
29
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
6
C 1 2 3 4 5 6 8 7
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
30
1 4 1 3 4 4 6 3
7 8 4 2 2
A
B
n=8, k=6
1 2 3 4 5 6
6
1 C 1 2 3 4 5 6 8 7
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
31
2 1
1 4 1 3 4 4 6 3
7 8 4
A
B
n=8, k=6
1 2 3 4 5 6
6
1 C 1 2 3 4 5 6 8 7
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
32
2 1
1 4 1 3 4 4 6 3
7 8 4
A
B
n=8, k=6
1 2 3 4 5 6
6
1 C 1 2 3 4 5 6 8 7
4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
33
2 1
1 4 1 3 4 4 6 3
7 8 4
A
B
n=8, k=6
1 2 3 4 5 6
6
1 C 1 2 3 4 5 6 8 7
4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
34
2 1
1 4 1 3 4 4 6 3
7 8 4
A
B
n=8, k=6
1 2 3 4 5 6
5
1 C 1 2 3 4 5 6 8 7
4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
35
2 1
1 4 1 3 4 4 6 3
7 8 4
A
B
n=8, k=6
1 2 3 4 5 6
5
1 C 1 2 3 4 5 6 8 7
4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
36
2 1
1 4 1 3 4 4 6 3
7 8 4
A
B
n=8, k=6
1 2 3 4 5 6
5
3 1 C 1 2 3 4 5 6 8 7
4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
37
2 1
1 4 1 3 4 4 6 3
7 8 3
A
B
n=8, k=6
1 2 3 4 5 6
5
3 1 C 1 2 3 4 5 6 8 7
4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
38
2 1
1 4 1 3 4 4 6 3
7 8 3
A
B
n=8, k=6
1 2 3 4 5 6
5
3 1 1 C 1 2 3 4 5 6 8 7
4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
39
2 0
1 4 1 3 4 4 6 3
7 8 3
A
B
n=8, k=6
1 2 3 4 5 6
5
3 1 1 C 1 2 3 4 5 6 8 7
4 4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
40
2 0
1 4 1 3 4 4 6 3
7 8 3
A
B
n=8, k=6
1 2 3 4 5 6
4
3 6 1 1 C 1 2 3 4 5 6 8 7
4 4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
41
2 0
1 4 1 3 4 4 6 3
7 7 3
A
B
n=8, k=6
1 2 3 4 5 6
4
3 6 3 1 1 C 1 2 3 4 5 6 8 7
4 4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Beispiel
42
2 0
1 4 1 3 4 4 6 3
7 7 2
A
B
n=8, k=6
1 2 3 4 5 6
4
3 6 3 1 1 C 1 2 3 4 5 6 8 7
4 4 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Aufwand
• CountingSort(A[1..n],C[1..n]) for i ← 1 to k do B[ i ] ← 0 for i ← 1 to n do B[ A[ i ] ] ← B[ A[ i ] ]+1 for i ← 2 to k do B[ i ] ← B[ i ] + B[ i−1 ] for i ← n downto 1 do C[ B[ A[ i ] ] ] ← A[ i ] B[ A[ i ] ] ← B[ A[ i ] ]−1
43
O(k)
O(k+n)
O(n)
O(k)
O(n)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Counting-Sort: Aufwand
• Counting-Sort ist nur sinnvoll, wenn k = O(n) und damit T(n) = O(n)
• Counting-Sort verwendet keine Vergleiche
• Counting-Sort ist stabil
44
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort
• Annahme: R1, R2, ... , Rn ∈ 0,... ,kd−1 • „d-stellige Zahlen zur Basis k“ • „Wörter der Länge d aus einem
Alphabet der Größe k“
45
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort
• RadixSort(A[1..n]) for i ← 1 to d do „sortiere A stabil nach Stelle i“
46
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
47
F C T
H L P
N L P
R F T
H F N
P C A
F L L
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
48
F C T
H L P
N L P
R F T
H F N
P C A
F L L
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
49
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
50
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
51
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
52
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
F C T
H L P
N L P
R F T
H F N
P C A
F L L
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
53
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
F C T
H L P
N L P
R F T
H F N
P C A
F L L
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
54
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
P C A
F L L
H F N
H L P
N L P
F C T
R F T
F C T
H L P
N L P
R F T
H F N
P C A
F L L
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Beispiel
55
F C T
H L P
N L P
R F T
H F N
P C A
F L L
P C A
F L L
H F N
H L P
N L P
F C T
R F T
P C A
F L L
H F N
H L P
N L P
F C T
R F T
F C T
H L P
N L P
R F T
H F N
P C A
F L L
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Aufwand
• RadixSort(A[1..n]) for i ← 1 to d do „sortiere A stabil nach Stelle i“
56
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Aufwand
• RadixSort(A[1..n]) for i ← 1 to d do „sortiere A stabil mit Counting-Sort nach Stelle i“
57
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Aufwand
• RadixSort(A[1..n]) for i ← 1 to d do „sortiere A stabil mit Counting-Sort nach Stelle i“
58
T(k,d,n)=O(d×(n+k))
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Radix-Sort: Aufwand
• Beachte: Ist k gegeben, so benötigt man zur Darstellung von n verschiedenen Elementen mindestens d ≥ logk(n) Stellen → T(n) = ΩΩ(n×log n)
59
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort
• Annahme: R1, R2, ... , Rn gleichverteilt aus [0,1)
• Idee: 1. Unterteile [0,1) in n „Buckets“
[0,1/n), [1/n,2/n), ... , [(n−1)/n,1) 2. Füge die Ri in die Buckets ein (erwartet:
ein Element pro Bucket) 3. Sortiere die Buckets 4. Hänge die Buckets aneinander
60
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Algorithmus
• BucketSort(A[1..n]) new B[0..n−1] for i ← 1 to n do push(B[⎣n×A[ i ]⎦], A[ i ]) for i ← 0 to n−1 do sort(B[ i ]) c ← 1 for i ← 0 to n−1 do for j ← 1 to size(B[ i ]) do A[c] ← B[ i ][ j ] c ← c+1
61
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
62
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
63
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
64
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
65
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
66
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
67
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
68
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
69
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
70
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
0.82 [0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
71
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
0.82
0.20
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
72
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
0.82
0.20
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
73
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
0.82
0.20
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
74
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
0.82
0.20
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
75
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73
0.24
0.75
0.31 0.21
0.12
0.82
0.20
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
76
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.24 0.21 0.20
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
77
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
78
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
79
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
80
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
81
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
82
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05
[0.9,1.0) [0.8,0.9) [0.7,0.8) [0.6,0.7) [0.5,0.6) [0.4,0.5) [0.3,0.4) [0.2,0.3) [0.1,0.2) [0.0,0.1) 0
1 2
5
8 7 6
9
3 4
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
83
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59
0.73 0.75
0.31
0.12
0.82
0.20 0.21 0.24
0.05 n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Beispiel
84
0.73 0.24 0.75 0.31 0.12 0.21 0.05 0.20 0.82 0.59
0.59 0.73 0.75 0.31 0.12 0.82 0.20 0.21 0.24 0.05
n=10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• Diskrete Zufallsvariable
• Erwartungswert
• Varianz
85
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• X=1 mit 50 % Wahrscheinlichkeit X=3 mit 50 % Wahrscheinlichkeit
• Erwartungswert: E(X) = 1×0.5 + 3×0.5 = 2.0
• X=1 mit 75 % Wahrscheinlichkeit X=3 mit 25 % Wahrscheinlichkeit
• Erwartungswert: E(X) = 1×0.75 + 3×0.25 = 1.5
86
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• X=1 mit 50 % Wahrscheinlichkeit X=3 mit 50 % Wahrscheinlichkeit
• Varianz: V(X) = (1−2)2×0.5 + (3−2)2×0.5 = 1.0
• X=1 mit 75 % Wahrscheinlichkeit X=3 mit 25 % Wahrscheinlichkeit
• Varianz: V(X) = (1−1.5)2×0.75 + (3−1.5)2×0.25 = 0.75
87
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• Sei ni die Zahl der Elemente in Bucket i • Wahrscheinlichkeit, dass ein Element in
Bucket i fällt ist p=1/n • Wahrscheinlichkeit, dass genau k
Elemente in Bucket i fallen ist “Binomialverteilung”
88
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• Erwartungswert
• Varianz
• Sortieraufwand, z.B. Insertion-Sort
89
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• Erwarteter Sortieraufwand für Bucket i
90
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• Erwarteter Sortieraufwand für Bucket i
91
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• Erwarteter Sortieraufwand für alle Buckets:
92
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Bucket-Sort: Analyse
• BucketSort(A[1..n]) new B[0..n−1] for i ← 1 to n do push(B[⎣n×A[ i ]⎦], A[ i ]) for i ← 0 to n−1 do sort(B[ i ]) c ← 1 for i ← 0 to n−1 do for j ← 1 to size(B[ i ]) do A[c] ← B[ i ][ j ] c ← c+1
93
O(n)
O(n)
O(n) erwartet
O(n) (!)
O(n) erwartet
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Spezielle Sortierverfahren
• Counting-Sort: O(n+k) • Radix-Sort: O(d×(n+k)) • Bucket-Sort: O(n) erwartet
94