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 Schmid @ TU München, 20092 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 Schmid @ TU München, 20093 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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_3.jpg", "name": "Stefan Schmid @ TU München, 20093 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 Schmid @ TU München, 20094 Selection Sort: Beispiel 510131419 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 Schmid @ TU München, 20095 Selection Sort: Beispiel 510131419 ij j Element grösser => weiter

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

24 Stefan Schmid @ TU München, 200924 Selection Sort: Beispiel 131014195 ij Fertig!

25 Stefan Schmid @ TU München, 200925 Insertion Sort: Beispiel 510131419 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 Schmid @ TU München, 200926 Insertion Sort: Beispiel 510131419 ij j Element kleiner als j+1 Element => weiter

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

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

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

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

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

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

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

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

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

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

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

38 Stefan Schmid @ TU München, 200938 Insertion Sort: Beispiel 131014195 ij

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

40 Stefan Schmid @ TU München, 200940 Mergesort Idee: zerlege Sortierproblem rekursiv in Teilprobleme, die separat sortiert werden und dann verschmolzen werden 105114319 510131419 131014195 rekursiv merge

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

42 Stefan Schmid @ TU München, 200942 Zwei sortierte Felder mergen 510131419 merge jk m

43 Stefan Schmid @ TU München, 200943 Zwei sortierte Felder mergen 510131419 1 merge

44 Stefan Schmid @ TU München, 200944 Zwei sortierte Felder mergen 510131419 1 merge

45 Stefan Schmid @ TU München, 200945 Zwei sortierte Felder mergen 510131419 13 merge

46 Stefan Schmid @ TU München, 200946 Zwei sortierte Felder mergen 510131419 13 merge

47 Stefan Schmid @ TU München, 200947 Zwei sortierte Felder mergen 510131419 135 merge

48 Stefan Schmid @ TU München, 200948 Zwei sortierte Felder mergen 510131419 135 merge

49 Stefan Schmid @ TU München, 200949 Zwei sortierte Felder mergen 510131419 13105 merge

50 Stefan Schmid @ TU München, 200950 Zwei sortierte Felder mergen 510131419 13105 merge

51 Stefan Schmid @ TU München, 200951 Zwei sortierte Felder mergen 510131419 1310145 merge

52 Stefan Schmid @ TU München, 200952 Zwei sortierte Felder mergen 510131419 1310145 merge

53 Stefan Schmid @ TU München, 200953 Zwei sortierte Felder mergen 510131419 131014195 merge

54 Stefan Schmid @ TU München, 200954 Zwei sortierte Felder mergen 510131419 131014195 merge

55 Stefan Schmid @ TU München, 200955 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 Schmid @ TU München, 200956 Quicksort Idee: ähnlich wie Mergesort, aber Aufspaltung in Teilfolgen nicht in Mitte sondern nach speziellem Pivotelement 10 5114319 5 13 14 19 1314195 10 rekursiv 10 ordne nach 10 unsortiert!

57 Stefan Schmid @ TU München, 200957 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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_57.jpg", "name": "Stefan Schmid @ TU München, 200957 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 il 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 Schmid @ TU München, 200958 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 Schmid @ TU München, 200959 Quicksort: Beispiel 510131419 Pivot! i j i++, dann i: gehe solange nach rechts bis >= Pivot j--, dann j: gehe solange nach links bis <= Pivot

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

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

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

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

64 Stefan Schmid @ TU München, 200964 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 Schmid @ TU München, 200965 Quicksort: Worst-Case 131014 19 5 Pivot 1 Sortiere rekursiv!

66 Stefan Schmid @ TU München, 200966 Quicksort: Worst-Case 1310 1419 5 Pivot 2 Sortiere rekursiv!

67 Stefan Schmid @ TU München, 200967 Quicksort: Worst-Case 13 101419 5 Pivot 3 Sortiere rekursiv!

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

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

70 Stefan Schmid @ TU München, 200970 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.

71 Stefan Schmid @ TU München, 200971 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 Schmid @ TU München, 200972 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 Schmid @ TU München, 200973 3 58 1091215 1118 5 8 10 9 1215 11 18 Invariante: H[k] ist minimal für Teilbaum von H[k] : Knoten, die Invariante eventuell verletzen Heap: DeleteMin Achtung: Min Heap!

74 Stefan Schmid @ TU München, 200974 58 1091215 11 5 8 10 9 1215 11 18 Invariante: H[k] ist minimal für Teilbaum von H[k] : Knoten, die Invariante eventuell verletzen Heap: DeleteMin

75 Stefan Schmid @ TU München, 200975 5 8 1091215 11 5 8 10 9 1215 11 18 Invariante: H[k] ist minimal für Teilbaum von H[k] : Knoten, die Invariante eventuell verletzen Heap: DeleteMin

76 Stefan Schmid @ TU München, 200976 Untere Schranke Permutation der Eingabefolge: Menge S: Eingabefolge: 105114319 131014195

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

78 Stefan Schmid @ TU München, 200978 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_78.jpg", "name": "Stefan Schmid @ TU München, 200978 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

79 Stefan Schmid @ TU München, 200979 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_79.jpg", "name": "Stefan Schmid @ TU München, 200979 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

80 Stefan Schmid @ TU München, 200980 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_80.jpg", "name": "Stefan Schmid @ TU München, 200980 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

81 Stefan Schmid @ TU München, 200981 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_81.jpg", "name": "Stefan Schmid @ TU München, 200981 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

82 Stefan Schmid @ TU München, 200982 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.org/1/646893/slides/slide_82.jpg", "name": "Stefan Schmid @ TU München, 200982 Untere Schranke Beliebiger vergleichsbasierter Algo als Entscheidungsbaum: Zeit e 1

83 Stefan Schmid @ TU München, 200983 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 Schmid @ TU München, 200984 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!) = 2.58...]

85 Stefan Schmid @ TU München, 200985

86 Stefan Schmid @ TU München, 200986

87 Stefan Schmid @ TU München, 200987 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 Schmid @ TU München, 200988 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 Schmid @ TU München, 200989 Radixsort Beispiel (Ziffern des Zehnersystems, K=10): Ordnung nach Einerstelle: 122033742417112 0123456789

90 Stefan Schmid @ TU München, 200990 Radixsort Ergebnis nach Einerstelle: Ordnung nach Zehnerstelle: 121122033742417 0123456789

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

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

93 Stefan Schmid @ TU München, 200993 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 31 3 5 < 31 4 6

94 Stefan Schmid @ TU München, 200994 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