94
Vorlesung 15. Januar 2009

Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Embed Size (px)

Citation preview

Page 1: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Vorlesung 15. Januar 2009

Page 2: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 2

• Algorithmen und Datenstrukturen

• Analyse von Algorithmen: mit Referenzmaschine „Registermaschine“

• Wichtige Kriterien: Zeit (Anzahl Schritte) und Platz (Speicher)

• Kostenmodelle:- uniform (Anzahl Elementarschritte, Anzahl Zellen)

- logarithmisch (bezgl. Maximale Operanden / Werte)

- kann grossen Unterschied machen!

Was bisher geschah...

• Analysen: worst-case vs average-case vs best-case

Page 3: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 3

Sortierproblem

• Eingabe: Sequenz s = <e1,…,en> mit Ordnung <= auf den Schlüsseln key(ei)(Beispiel: )

• Ausgabe: Sequenz s´ = <e´1,…,e´n>, so dass key(ei)<=key(ei+1) für alle 1<=i<n und s´ eine Permutation von s ist(Beispiel: )1 3 10 14 195

5 10 1 14 319

• Bisher: Selection Sort und Insertion Sort

- beide quadratische Laufzeit

- O(n2) und (n2), also (n2)

Page 4: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 4

Selection Sort: Beispiel

5 10 1 3 1419

i j

j Element grösser => weiter

Prinzip: Suche Minimum im Feld rechts von i und füge es bei i ein.(Ausgabesequenz = vorne am Array)

Laufe ganzes Feld nach rechts durch, swappe mit i-Position wann immer ein neuer Rekord!

Achtung: Prinzip gleich wie VL, aber leicht anders (von links nach rechts)!

Page 5: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 5

Selection Sort: Beispiel

5 10 1 3 1419

i j

j Element grösser => weiter

Page 6: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 6

Selection Sort: Beispiel

5 10 1 3 1419

i j

j Element kleiner => swap!

Page 7: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 7

Selection Sort: Beispiel

1 10 5 3 1419

i j

j Element kleiner => swap!

Page 8: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 8

Selection Sort: Beispiel

1 10 5 3 1419

i j

j Element grösser => weiter!

Page 9: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 9

Selection Sort: Beispiel

1 10 5 3 1419

i j

j Element grösser => i++; j=i+1!

Page 10: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 10

Selection Sort: Beispiel

1 10 5 3 1419

i j

j Element grösser => weiter

Page 11: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 11

Selection Sort: Beispiel

1 10 5 3 1419

i j

j Element kleiner => swap!

Page 12: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 12

Selection Sort: Beispiel

1 5 10 3 1419

i j

j Element kleiner => swap!

Page 13: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 13

Selection Sort: Beispiel

1 5 10 3 1419

i j

j Element kleiner => swap!

Page 14: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 14

Selection Sort: Beispiel

1 3 10 5 1419

i j

j Element kleiner => swap!

Page 15: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 15

Selection Sort: Beispiel

1 3 10 5 1419

i j

j Element grösser => i++; j=i+1!

Page 16: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 16

Selection Sort: Beispiel

1 3 10 5 1419

i j

j Element kleiner => swap!

Page 17: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 17

Selection Sort: Beispiel

1 3 19 5 1410

i j

j Element kleiner => swap!

Page 18: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 18

Selection Sort: Beispiel

1 3 19 5 1410

i j

j Element kleiner => swap!

Page 19: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 19

Selection Sort: Beispiel

1 3 19 10 145

i j

j Element kleiner => swap!

Page 20: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 20

Selection Sort: Beispiel

1 3 19 10 145

i j

j Element grösser => i++; j=i+1!

Page 21: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 21

Selection Sort: Beispiel

1 3 19 10 145

i j

j Element kleiner => swap!

Page 22: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 22

Selection Sort: Beispiel

1 3 10 19 145

i j

j Element grösser => i++; j:=i+1!

Page 23: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 23

Selection Sort: Beispiel

1 3 10 19 145

i j

j Element kleiner => swap!

Page 24: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 24

Selection Sort: Beispiel

1 3 10 14 195

i j

Fertig!

Page 25: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 25

Insertion Sort: Beispiel

5 10 1 3 1419

ij

j Element kleiner als j+1 Element => weiter

Prinzip: Für immer grössere i, lasse i-tes Element „runterblubbern“,soweit bis Nachfolger kleiner => alles links von i ist sortiert!(Ausgabesequenz = vorne am Array)

Laufe Feld nach links durch soweit wie nötig, swappe mit Nachbarposition wann immer ein neuer Rekord!

Achtung: Prinzip gleich wie VL, aber leicht anders!

Page 26: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 26

Insertion Sort: Beispiel

5 10 1 3 1419

ij

j Element kleiner als j+1 Element => weiter

Page 27: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 27

Insertion Sort: Beispiel

5 10 1 3 1419

ij

j Element kleiner als j+1 Element => weiter

Page 28: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 28

Insertion Sort: Beispiel

5 10 1 3 1419

ij

j Element grösser => swap

Page 29: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 29

Insertion Sort: Beispiel

5 10 19 3 141

ij

j Element grösser => swap

Page 30: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 30

Insertion Sort: Beispiel

5 1 19 3 1410

ij

j Element grösser als (j+1) Element => swap

Page 31: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 31

Insertion Sort: Beispiel

5 1 19 3 1410

ij

j Element grösser als (j+1) Element => swap

Page 32: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 32

Insertion Sort: Beispiel

1 5 19 3 1410

ij

j Element grösser als (j+1) Element => swap

Die 1 ist ganz „runtergeblubbert“!

Page 33: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 33

Insertion Sort: Beispiel

1 5 19 3 1410

ij

j Element grösser als (j+1) Element => swap

Page 34: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 34

Insertion Sort: Beispiel

1 5 3 19 1410

ij

j Element grösser als (j+1) Element => swap

Page 35: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 35

Insertion Sort: Beispiel

1 5 10 19 143

ij

j Element grösser als (j+1) Element => swap

Page 36: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 36

Insertion Sort: Beispiel

1 3 10 19 145

ij

j Element kleiner als (j+1) Element => weiter

Die 3 „blubberte“ nur an zweitunterste Stelle.

Page 37: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 37

Insertion Sort: Beispiel

1 3 10 19 145

ij

j Element grösser als (j+1) Element => swap

Die 14 „blubbert“ nur eine Stelle weit.

Page 38: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 38

Insertion Sort: Beispiel

1 3 10 14 195

ij

Page 39: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 39

Insertion Sort: Beispiel

1 3 10 14 195

ij

Rest ok, alles schon sortiert gegen links => fertig!

Page 40: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 40

Mergesort

Idee: zerlege Sortierproblem rekursiv in Teilprobleme, die separat sortiert werden und dann verschmolzen werden

10 5 1 14 319

5 10 1 3 1419

1 3 10 14 195

rekursiv

merge

Page 41: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 41

Beispiel (Wikipedia)

Beim rekursivenAbstieg passiert nichts!

Erst beim Aufstieg wirdsortiert (via merge)!

Page 42: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 42

Zwei sortierte Felder mergen

5 10 1 3 1419

merge

j k

m

Page 43: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 43

Zwei sortierte Felder mergen

5 10 1 3 1419

1

merge

Page 44: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 44

Zwei sortierte Felder mergen

5 10 1 3 1419

1

merge

Page 45: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 45

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3

merge

Page 46: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 46

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3

merge

Page 47: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 47

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 5

merge

Page 48: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 48

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 5

merge

Page 49: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 49

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 105

merge

Page 50: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 50

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 105

merge

Page 51: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 51

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 10 145

merge

Page 52: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 52

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 10 145

merge

Page 53: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 53

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 10 14 195

merge

Page 54: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 54

Zwei sortierte Felder mergen

5 10 1 3 1419

1 3 10 14 195

merge

Page 55: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 55

Mergesort

Theorem 5.2: Mergesort benötigt O(n log n) Zeit, um eine Folge der Länge n zu sortieren.

Beweis:• T(n): Laufzeit bei Folgenlänge n• T(1) = (1) und

T(n) = T(bn/2c) + T(dn/2e) + (n)• aus Übungsaufgabe: T(n)=O(n log n)

Page 56: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 56

Quicksort

Idee: ähnlich wie Mergesort, aber Aufspaltung in Teilfolgen nicht in Mitte sondern nach speziellem Pivotelement

10 5 1 14 319

5 1 3 1419

1 3 14 195

10

rekursiv

10

ordne nach<10 und >10

unsortiert!

Page 57: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 57

Quicksort

Procedure Quicksort(l,r: Integer)// a[l..r]: zu sortierendes Feldif r>l then v:=a[r]; i:=l-1; j:=r repeat // ordne Elemente nach Pivot v repeat i:=i+1 until a[i]>=v repeat j:=j-1 until a[j]<=v if i<j then a[i] $ a[j] until j<=i a[i] $ a[r] Quicksort(l,i-1) // sortiere linke Teilfolge Quicksort(i+1,r) // sortiere rechte Teilfolge

Page 58: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 58

Quicksort: Quicksort

i: gehe solange nach links bis grösser als Pivotj: gehe solange nach rechts bis kleiner als Pivot

=> dann mache swap!

Jetzt rekursiv beide Hälften mit QS!

Page 59: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 59

Quicksort: Beispiel

5 10 1 3 1419

Pivot!

i j

i++, dann i: gehe solange nach rechts bis >= Pivotj--, dann j: gehe solange nach links bis <= Pivot

Page 60: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 60

Quicksort: Beispiel

5 10 1 3 1419

Pivot!

i j

i<j => ok => swap!

Page 61: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 61

Quicksort: Beispiel

5 10 1 19 143

Pivot!

i j

i++ solange bis >= Pivotj-- solange bis <= Pivot

Page 62: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 62

Quicksort: Beispiel

5 10 1 19 143

Pivot!

ij

i<j : falsch => kein swap mehr!

Nun noch Pivos an Position i swappen!

Page 63: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 63

Quicksort: Beispiel

5 10 1 14 193

Pivot ist an richtigersortierter Position! Wird nicht mehr ändern!

Sortiere rekursiv! Sortiere rekursiv!

Page 64: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 64

Quicksort

Problem: im worst case kann Quicksort (n2) Laufzeit haben (wenn schon sortiert)

Lösungen: • wähle zufälliges Pivotelement

(Laufzeit O(n log n) mit hoher W.keit)• berechne Median (Element in Mitte)

! dafür Selektionsalgorithmus (Kap 5.5)

Page 65: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 65

Quicksort: Worst-Case

1 3 10 14 195

Pivot 1

Sortiere rekursiv!

Page 66: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 66

Quicksort: Worst-Case

1 3 10 14 195

Pivot 2

Sortiere rekursiv!

Page 67: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 67

Quicksort: Worst-Case

1 3 10 14 195

Pivot 3

Sortiere rekursiv!

Page 68: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 68

Quicksort: Worst-Case

1 3 10 14 195

Pivot 3

Insgesamt n Rekursionen, jede Rekursion erfordertI (für i=1..n) Vergleiche mit Pivotelement => O(n2)

Page 69: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 69

Veranschaulichung (1)

Falls Pivot immer in der Mitte:

...

O(log (n)) viele Stufen

Wieviele Vergleichesind nötig pro Stufe?

Page 70: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 70

Veranschaulichung (2)

Falls Pivot immer in der Mitte:

...

n-1 Vergleiche mit Pivot

~ 2 * n/2 Vergleiche mit Pivots

~ 4 * n/4 Vergleiche mit Pivots

Tiefe i: 2^i Subarrays der Grösse n/2^i. Bereits fixierte Pivots: 1+2+4+...+2^i.

Page 71: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 71

Veranschaulichung (2)

Falls Pivot immer am Rand landet:

...

n-1 Vergleiche mit Pivot

n-2 Vergleiche mit Pivot

n-3 Vergleiche mit Pivot

Auch auf jeder Stufe ca. n Vergleiche!Was ist der Unterschied??

Page 72: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 72

Veranschaulichung (3)

Falls Pivot immer am Rand landet:

...

O(n) Stufen -- nur ein neues fixesElement pro Stufe!

Tiefe i: 1 Subarray der Grösse n-i. Bereits fixierte Pivots: i.

Page 73: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 73

3

5 8

10 9 12 15

11 18

5 8

10 9 12 15

11

18

Invariante: H[k] ist minimal für Teilbaum von H[k]

: Knoten, die Invariante eventuell verletzen

Heap: DeleteMin

Achtung: Min Heap!

Page 74: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 74

5 8

10 9 12 15

11

5

8

10 9 12 15

11

18

18

Invariante: H[k] ist minimal für Teilbaum von H[k]

: Knoten, die Invariante eventuell verletzen

Heap: DeleteMin

Page 75: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 75

5

8

10 9 12 15

11

5

8

10

9

12 15

11

18

18

Invariante: H[k] ist minimal für Teilbaum von H[k]

: Knoten, die Invariante eventuell verletzen

Heap: DeleteMin

Page 76: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 76

Untere Schranke

Permutation der Eingabefolge:• Menge S:

• Eingabefolge:

10 5 1 14 319

1 3 10 14 195

Page 77: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 77

Untere Schranke

Wenn der Algorithmus sortieren kann, kann er auch die Permutation ausgeben (u.u.).

10 5 1 14 319

1 3 10 14 195

Page 78: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 78

Untere Schranke

Beliebiger vergleichsbasierter Algo als Entscheidungsbaum:

Zeit

e1<e2?

e3<e4? e5<e6?

Menge aller Permutationen

1 2

ja nein

i : Permutationsmenge, die Bedingungen bis dahin erfüllt

= 1 [ 2

Page 79: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 79

Untere Schranke

Beliebiger vergleichsbasierter Algo als Entscheidungsbaum:

Zeit

e1<e2?

e3<e4? e5<e6?

1

2 3

ja nein

i : Permutationsmenge, die Bedingungen bis dahin erfüllt

1 = 2 [ 3

Page 80: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 80

Untere Schranke

Beliebiger vergleichsbasierter Algo als Entscheidungsbaum:

Zeit

e1<e2?

1 2

1 2

ja nein

i : eindeutige Permutation der Eingabefolge

= {1, 2}

Page 81: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 81

Untere Schranke

Beliebiger vergleichsbasierter Algo als Entscheidungsbaum:

Zeit

e1<e2?

1 2

1 2

ja nein

Wieviele Blätter muss Entscheidungsbaum haben?

= {1, 2}

Page 82: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 82

Untere Schranke

Beliebiger vergleichsbasierter Algo als Entscheidungsbaum:

Zeit

e1<e2?

1 2

1 2

ja nein

Mindestens n! viele Blätter!

= {1, 2}

Page 83: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 83

Untere Schranke

Beliebiger vergleichsbasierter Algo als Entscheidungsbaum:

Zeit

Baum der Tiefe T:Höchstens 2T Blätter

2T >= n! ,T >= log(n!) = (n log n)

Jeder vergleichsbasierte Algo hat (n log n) Laufzeit

e.g., O() folgt aus n! ¸ (n/e)n

Page 84: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 84

Beispiel

Ein Algo für Arrays der Grösse 3:

{(123),(132),(213),(231),(312),(321)}

Position 2 < Position 1Position 1 < Position 2

{(123),(132),(231)} {(213), (312),(321)}p2 < p3?

{(123)} { (132),(231)} ...

p1 < p3?{ (132)} {(231)}

Um (132) zu sortieren brauchtdieser Algo 3 Vergleiche![log(3!) = 2.58...]

Page 85: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 85

Page 86: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 86

Page 87: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 87

Radixsort

Ideen: • Benutze Repräsentation der Schlüssel• K-adische Darstellung der Schlüssel• Sortiere Ziffer für Ziffer gemäß KSort• Behalte Ordnung der Teillisten bei

Page 88: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 88

Radixsort

Procedure Radixsort(s: Sequence of Element)for i:=0 to d-1 do KSort(s,i) // sortiere gemäß keyi(x) // mit keyi(x) = (key(x) div Ki) mod K,

// d.h. kleinste Ziffer zuerst!

Laufzeit: O(d(n+K))Falls maximale Zahlengröße O(log n), dann alle Zahlen <= nd für konstantes d.In diesem Fall Laufzeit für n Zahlen sortieren O(n).

Page 89: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 89

Radixsort

Beispiel (Ziffern des Zehnersystems, K=10):

Ordnung nach Einerstelle:

12 203 3 74 24 17 112

0 1 2 3 4 5 6 7 8 9

Page 90: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 90

Radixsort

Ergebnis nach Einerstelle:

Ordnung nach Zehnerstelle:

12 112 203 3 74 24 17

0 1 2 3 4 5 6 7 8 9

Page 91: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 91

Radixsort

Ergebnis nach Zehnerstelle:

Ordnung nach Hunderterstelle:

203 3 12 112 17 24 74

0 1 2 3 4 5 6 7 8 9

Reihenfolge von Zahlen mitgleicher Zehnerstelle behalten wir bei!(Stabilität von k-Sort!)

Page 92: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 92

Radixsort

Ergebnis nach Hunderterstelle:

Sortiert!

3 12 17 24 74 112 203

Zauberei???

Page 93: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 93

Radixsort

Korrektheit:• Für jedes Paar x,y mit key(x)<key(y) gilt:

es existiert i mit keyi(x)<keyi(y) und keyj(x)=keyj(y) für alle j>i (j wächst gegen links: kleine Stellen zuerst)

• Schleifendurchlauf für i: poss(x)<poss(y)(poss(z): Position von z in Folge s)

• Schleifendurchlauf für j>i: Ordnung wird beibehalten wegen pushBack in KSort

3135 < 3146

Page 94: Vorlesung 15. Januar 2009. Stefan Schmid @ TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine

Stefan Schmid @ TU München, 2009 94

Radixsort: Beispiel Wikipedia

Phase 1

Phase 2

Phase 3

Input

Output