Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Vorlesung 15. Januar 2009. Stefan TU München, 20092 Algorithmen und Datenstrukturen Analyse von Algorithmen: mit Referenzmaschine Registermaschine."—  Präsentation transkript:

1 Vorlesung 15. Januar 2009

2 Stefan TU München, 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

3 Stefan TU München, Sortierproblem Eingabe: Sequenz s = mit Ordnung <= auf den Schlüsseln key(e i ) (Beispiel: ) Ausgabe: Sequenz s´ =, so dass key(e i )<=key(e i+1 ) für alle 1<=i

4 Stefan TU München, Selection Sort: Beispiel ij 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)!

5 Stefan TU München, Selection Sort: Beispiel ij j Element grösser => weiter

6 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

7 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

8 Stefan TU München, Selection Sort: Beispiel ij j Element grösser => weiter!

9 Stefan TU München, Selection Sort: Beispiel ij j Element grösser => i++; j=i+1!

10 Stefan TU München, Selection Sort: Beispiel i j j Element grösser => weiter

11 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

12 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

13 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

14 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

15 Stefan TU München, Selection Sort: Beispiel ij j Element grösser => i++; j=i+1!

16 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

17 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

18 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

19 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

20 Stefan TU München, Selection Sort: Beispiel ij j Element grösser => i++; j=i+1!

21 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

22 Stefan TU München, Selection Sort: Beispiel ij j Element grösser => i++; j:=i+1!

23 Stefan TU München, Selection Sort: Beispiel ij j Element kleiner => swap!

24 Stefan TU München, Selection Sort: Beispiel ij Fertig!

25 Stefan TU München, Insertion Sort: Beispiel 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!

26 Stefan TU München, Insertion Sort: Beispiel ij j Element kleiner als j+1 Element => weiter

27 Stefan TU München, Insertion Sort: Beispiel ij j Element kleiner als j+1 Element => weiter

28 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser => swap

29 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser => swap

30 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser als (j+1) Element => swap

31 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser als (j+1) Element => swap

32 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser als (j+1) Element => swap Die 1 ist ganz runtergeblubbert!

33 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser als (j+1) Element => swap

34 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser als (j+1) Element => swap

35 Stefan TU München, Insertion Sort: Beispiel ij j Element grösser als (j+1) Element => swap

36 Stefan TU München, Insertion Sort: Beispiel ij j Element kleiner als (j+1) Element => weiter Die 3 blubberte nur an zweitunterste Stelle.

37 Stefan TU München, Insertion Sort: Beispiel i j j Element grösser als (j+1) Element => swap Die 14 blubbert nur eine Stelle weit.

38 Stefan TU München, Insertion Sort: Beispiel ij

39 Stefan TU München, Insertion Sort: Beispiel ij Rest ok, alles schon sortiert gegen links => fertig!

40 Stefan TU München, Mergesort Idee: zerlege Sortierproblem rekursiv in Teilprobleme, die separat sortiert werden und dann verschmolzen werden rekursiv merge

41 Stefan TU München, Beispiel (Wikipedia) Beim rekursiven Abstieg passiert nichts! Erst beim Aufstieg wird sortiert (via merge)!

42 Stefan TU München, Zwei sortierte Felder mergen merge jk m

43 Stefan TU München, Zwei sortierte Felder mergen merge

44 Stefan TU München, Zwei sortierte Felder mergen merge

45 Stefan TU München, Zwei sortierte Felder mergen merge

46 Stefan TU München, Zwei sortierte Felder mergen merge

47 Stefan TU München, Zwei sortierte Felder mergen merge

48 Stefan TU München, Zwei sortierte Felder mergen merge

49 Stefan TU München, Zwei sortierte Felder mergen merge

50 Stefan TU München, Zwei sortierte Felder mergen merge

51 Stefan TU München, Zwei sortierte Felder mergen merge

52 Stefan TU München, Zwei sortierte Felder mergen merge

53 Stefan TU München, Zwei sortierte Felder mergen merge

54 Stefan TU München, Zwei sortierte Felder mergen merge

55 Stefan TU München, 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( b n/2 c ) + T( d n/2 e ) + (n) aus Übungsaufgabe: T(n)=O(n log n)

56 Stefan TU München, Quicksort Idee: ähnlich wie Mergesort, aber Aufspaltung in Teilfolgen nicht in Mitte sondern nach speziellem Pivotelement rekursiv 10 ordne nach 10 unsortiert!

57 Stefan TU München, Quicksort Procedure Quicksort(l,r: Integer) // a[l..r]: zu sortierendes Feld if 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

58 Stefan TU München, Quicksort: Quicksort i: gehe solange nach links bis grösser als Pivot j: gehe solange nach rechts bis kleiner als Pivot => dann mache swap! Jetzt rekursiv beide Hälften mit QS!

59 Stefan TU München, Quicksort: Beispiel Pivot! i j i++, dann i: gehe solange nach rechts bis >= Pivot j--, dann j: gehe solange nach links bis <= Pivot

60 Stefan TU München, Quicksort: Beispiel Pivot! i j i ok => swap!

61 Stefan TU München, Quicksort: Beispiel Pivot! i j i++ solange bis >= Pivot j-- solange bis <= Pivot

62 Stefan TU München, Quicksort: Beispiel Pivot! ij i kein swap mehr! Nun noch Pivos an Position i swappen!

63 Stefan TU München, Quicksort: Beispiel Pivot ist an richtiger sortierter Position! Wird nicht mehr ändern! Sortiere rekursiv!

64 Stefan TU München, Quicksort Problem: im worst case kann Quicksort (n 2 ) 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)

65 Stefan TU München, Quicksort: Worst-Case Pivot 1 Sortiere rekursiv!

66 Stefan TU München, Quicksort: Worst-Case Pivot 2 Sortiere rekursiv!

67 Stefan TU München, Quicksort: Worst-Case Pivot 3 Sortiere rekursiv!

68 Stefan TU München, Quicksort: Worst-Case Pivot 3 Insgesamt n Rekursionen, jede Rekursion erfordert I (für i=1..n) Vergleiche mit Pivotelement => O(n 2 )

69 Stefan TU München, Veranschaulichung (1) Falls Pivot immer in der Mitte:... O(log (n)) viele Stufen Wieviele Vergleiche sind nötig pro Stufe?

70 Stefan TU München, 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: ^i.

71 Stefan TU München, 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??

72 Stefan TU München, Veranschaulichung (3) Falls Pivot immer am Rand landet:... O(n) Stufen -- nur ein neues fixes Element pro Stufe! Tiefe i: 1 Subarray der Grösse n-i. Bereits fixierte Pivots: i.

73 Stefan TU München, Invariante: H[k] ist minimal für Teilbaum von H[k] : Knoten, die Invariante eventuell verletzen Heap: DeleteMin Achtung: Min Heap!

74 Stefan TU München, Invariante: H[k] ist minimal für Teilbaum von H[k] : Knoten, die Invariante eventuell verletzen Heap: DeleteMin

75 Stefan TU München, Invariante: H[k] ist minimal für Teilbaum von H[k] : Knoten, die Invariante eventuell verletzen Heap: DeleteMin

76 Stefan TU München, Untere Schranke Permutation der Eingabefolge: Menge S: Eingabefolge:

77 Stefan TU München, Untere Schranke Wenn der Algorithmus sortieren kann, kann er auch die Permutation ausgeben (u.u.)

78 Stefan TU München, Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

79 Stefan TU München, Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

80 Stefan TU München, Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

81 Stefan TU München, Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

82 Stefan TU München, Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

83 Stefan TU München, Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit Baum der Tiefe T: Höchstens 2 T Blätter 2 T >= n!, T >= log(n!) = (n log n) Jeder vergleichsbasierte Algo hat (n log n) Laufzeit e.g., O() folgt aus n! ¸ (n/e) n

84 Stefan TU München, Beispiel Ein Algo für Arrays der Grösse 3: {(123),(132),(213),(231),(312),(321)} Position 2 < Position 1 Position 1 < Position 2 {(123),(132),(231)}{(213), (312),(321)} p2 < p3? {(123)} { (132),(231)}... p1 < p3? { (132)}{(231)} Um (132) zu sortieren braucht dieser Algo 3 Vergleiche! [log(3!) = ]

85 Stefan TU München,

86 Stefan TU München,

87 Stefan TU München, 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

88 Stefan TU München, Radixsort Procedure Radixsort(s: Sequence of Element) for i:=0 to d-1 do KSort(s,i) // sortiere gemäß key i (x) // mit key i (x) = (key(x) div K i ) mod K, // d.h. kleinste Ziffer zuerst! Laufzeit: O(d(n+K)) Falls maximale Zahlengröße O(log n), dann alle Zahlen <= n d für konstantes d. In diesem Fall Laufzeit für n Zahlen sortieren O(n).

89 Stefan TU München, Radixsort Beispiel (Ziffern des Zehnersystems, K=10): Ordnung nach Einerstelle:

90 Stefan TU München, Radixsort Ergebnis nach Einerstelle: Ordnung nach Zehnerstelle:

91 Stefan TU München, Radixsort Ergebnis nach Zehnerstelle: Ordnung nach Hunderterstelle: Reihenfolge von Zahlen mit gleicher Zehnerstelle behalten wir bei! (Stabilität von k-Sort!)

92 Stefan TU München, Radixsort Ergebnis nach Hunderterstelle: Sortiert! Zauberei???

93 Stefan TU München, Radixsort Korrektheit: Für jedes Paar x,y mit key(x) i (j wächst gegen links: kleine Stellen zuerst) Schleifendurchlauf für i: pos s (x)i: Ordnung wird beibehalten wegen pushBack in KSort <

94 Stefan TU München, Radixsort: Beispiel Wikipedia Phase 1 Phase 2 Phase 3 Input Output


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

Ähnliche Präsentationen


Google-Anzeigen