2.3.1 Einleitung 2.3.2 Einfache Sortierverfahren 2.3.3 ...€¦ · Datenstrukturen und Algorithmen...

Preview:

Citation preview

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

Recommended