Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Ähnliche Präsentationen


Präsentation zum Thema: "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"—  Präsentation transkript:

1 LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

2 LS 2 / Informatik 2 Organisatorisches Praktikum Falls Sie einen eigenen Laptop mit einem C-Compiler besitzen, können Sie diesen gerne zum Praktikum mitbringen

3 LS 2 / Informatik 3 Organisatorisches Lernräume Montag: 14.30-17.30 Uhr (OH14, Raum 340) Dienstag: 15-18 Uhr (OH14, Raum 340) Mittwoch: 13-16 Uhr (OH14, Raum 340) Donnerstag: 9-12 Uhr (GB V, Raum 105)

4 LS 2 / Informatik 4 1. Teil der Vorlesung – Grundlagen der Algorithmenanalyse Inhalt Wie beschreibt man einen Algorithmus? Wie beweist man die Korrektheit eines Algorithmus? Rechenmodell Laufzeitanalyse

5 LS 2 / Informatik 5 InsertionSort(Array A) Eingabegröße n 1.for j 2 to length[A] do length[A] = n 2. key A[j] 3. i j-1 verschiebe alle Elemente aus 4. while i>0 and A[i]>key do A[1…j-1], die größer als key 5. A[i+1] A[i] sind eine Stelle nach rechts 6. i i-1 7. A[i+1] key Speichere key in Lücke Fragestellung Wie kann man die Laufzeit eines Algorithmus vorhersagen? Laufzeitanalyse

6 LS 2 / Informatik 6 Laufzeitanalyse Laufzeit hängt ab von Größe der Eingabe (Parameter n) Art der Eingabe (Insertionsort ist schneller auf sortierten Eingaben) Analyse Parametrisiere Laufzeit als Funktion der Eingabegröße Finde obere Schranken (Garantien) an die Laufzeit

7 LS 2 / Informatik 7 Laufzeitanalyse Worst-Case Analyse Für jedes n definiere Laufzeit T(n) = Maximum über alle Eingaben der Größe n Garantie für jede Eingabe Standard Average-Case Analyse Für jedes n definiere Laufzeit T(n) = Durchschnitt über alle Eingaben der Größe n Hängt von Definition des Durchschnitts ab (wie sind die Eingaben verteilt)

8 LS 2 / Informatik 8 Laufzeitanalyse Laufzeit hängt auch ab von Hardware (Prozessor, Cache, Pipelining) Software (Betriebssystem, Programmiersprache, Compiler) Aber Analyse soll unabhängig von Hard- und Software gelten

9 LS 2 / Informatik 9 Laufzeitanalyse Maschinenmodell Eine Pseudocode-Instruktion braucht einen Zeitschritt Wird eine Instruktion r-mal aufgerufen, werden r Zeitschritte benötigt Formales Modell: Random Access Machines (RAM Modell) Idee Ignoriere rechnerabhängige Konstanten Betrachte Wachstum von T(n) für n Asymptotische Analyse

10 LS 2 / Informatik 10 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] 3. i j-1 4. while i>0 and A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Laufzeitanalyse

11 LS 2 / Informatik 11 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 4. while i>0 and A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Laufzeitanalyse

12 LS 2 / Informatik 12 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Laufzeitanalyse

13 LS 2 / Informatik 13 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j

14 LS 2 / Informatik 14 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 7. A[i+1] key t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j

15 LS 2 / Informatik 15 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 t 7. A[i+1] key t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j j

16 LS 2 / Informatik 16 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 t 7. A[i+1] key n-1 t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j j

17 LS 2 / Informatik 17 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 t 7. A[i+1] key n-1 t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j 5n-4+3 t j j

18 LS 2 / Informatik 18 Laufzeitanalyse Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) j

19 LS 2 / Informatik 19 Laufzeitanalyse Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) j

20 LS 2 / Informatik 20 Laufzeitanalyse Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) Abstraktion von multiplikativen Konstanten O-Notation (gleich) j

21 LS 2 / Informatik 21 Laufzeitanalyse Beispiel Problem: Nullvektortest Eingabe: Feld A[1,…,n] (n-dimensionaler Vektor) Ausgabe: true, wenn A[i]=0, für alle 1 i n; false, sonst Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output

22 LS 2 / Informatik 22 Laufzeitanalyse Beispiel Problem: Nullvektortest Eingabe: Feld A[1,…,n] (n-dimensionaler Vektor) Ausgabe: true, wenn A[i]=0, für alle 1 i n; false, sonst Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Invariante: Nach dem k-ten Schleifendurchlauf gilt: (a)i=k+1 und (b)output=true, gdw. A[j]=0 für alle 1 j k Invariante: Nach dem k-ten Schleifendurchlauf gilt: (a)i=k+1 und (b)output=true, gdw. A[j]=0 für alle 1 j k

23 LS 2 / Informatik 23 Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse

24 LS 2 / Informatik 24 Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse Laufzeit parametrisiert durch Länge der Eingabe n. Hier ist n = length[A].

25 LS 2 / Informatik 25 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse

26 LS 2 / Informatik 26 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse

27 LS 2 / Informatik 27 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse Anzahl Durchläufe abhängig von Eingabe.

28 LS 2 / Informatik 28 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse Anzahl Durchläufe abhängig von Eingabe. 00503 t=3

29 LS 2 / Informatik 29 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false 5. i i+1 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse 00503 t=3

30 LS 2 / Informatik 30 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse 00503 t=3

31 LS 2 / Informatik 31 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse 00503 t=3

32 LS 2 / Informatik 32 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse 00503 t=3

33 LS 2 / Informatik 33 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Laufzeitanalyse

34 LS 2 / Informatik 34 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n Laufzeitanalyse

35 LS 2 / Informatik 35 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n T(n) 3n+4, da t maximal n ist Laufzeitanalyse

36 LS 2 / Informatik 36 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n T(n) 3n+4, da t maximal n ist T(n) 3n+4, da bei Eingabe eines Nullvektors 3n+4 Schritte benötigt werden Laufzeitanalyse

37 LS 2 / Informatik 37 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n Also: T(n) = 3n+4 Laufzeitanalyse

38 LS 2 / Informatik 38 Laufzeitanalyse Diskussion Die konstanten Faktoren sind wenig aussagekräftig, da wir bereits bei den einzelnen Befehlen konstante Faktoren ignorieren Je nach Rechnerarchitektur und genutzten Befehlen könnte also z.B. 3n+4 langsamer sein als 5n+7 Betrachte nun Algorithmus A mit Laufzeit 100n und Algorithmus B mit Laufzeit 5n² Ist n klein, so ist Algorithmus B schneller Ist n groß, so wird das Verhältnis Laufzeit B / Laufzeit A beliebig groß Algorithmus B braucht also einen beliebigen Faktor mehr Laufzeit als A (wenn die Eingabe lang genug ist)

39 LS 2 / Informatik 39 Laufzeitanalyse Idee (asymptotische Laufzeitanalyse) Ignoriere konstante Faktoren Betrachte das Verhältnis von Laufzeiten für n Klassifiziere Laufzeiten durch Angabe von einfachen Vergleichsfunktionen Beispiel Die Laufzeit von Algorithmus Nullvektortest verhält sich für n (bei Ignorieren von Konstanten) wie f(n) = n.

40 LS 2 / Informatik 40 Laufzeitanalyse O-Notation O(f(n)) = {g(n) : c>0, n >0, so dass für alle nn gilt g(n) c f(n)} (wobei f(n), g(n)>0) Interpretation g(n) O(f(n)) bedeutet, dass g(n) für n höchstens genauso stark wächst wie f(n) Beim Wachstum ignorieren wir Konstanten 0 0

41 LS 2 / Informatik 41 Laufzeitanalyse Beispiele 10n O(n) 10n O(n²) n² O(1000n) O(1000n) = O(n) Hierarchie O(log n) O(log²n) O(log n) O(n ) O( n) O(n) O(n) O(n²) O(n ) O(2 ) (für c>=2 und 0< 1/2) c c n

42 LS 2 / Informatik 42 Laufzeitanalyse -Notation (f(n)) = {g(n) : c>0, n >0, so dass für alle nn gilt g(n) c f(n)} (wobei f(n), g(n)>0) Interpretation g(n) (f(n)) bedeutet, dass g(n) für n mindestens so stark wächst wie f(n) Beim Wachstum ignorieren wir Konstanten 00

43 LS 2 / Informatik 43 Laufzeitanalyse Beispiele 10n (n) 1000n (n²) n² (n) (1000n) = (n) f(n) = g(n) g(n) = O f(n)

44 LS 2 / Informatik 44 Laufzeitanalyse -Notation g(n) (f(n)) g(n)=O(f(n)) und g(n)= (f(n)) Beispiele 1000n (n) 10n²+1000n (n²) n (n) 1-sin n

45 LS 2 / Informatik 45 Laufzeitanalyse o-Notation o(f(n)) {g(n): c>0 n >0, so dass für alle nn gilt c g(n)<f(n)} (f(n), g(n) >0) -Notation f(n) (g(n)) g(n) o(f(n)) 0 0

46 LS 2 / Informatik 46 Laufzeitanalyse Beispiele n o(n²) n o(n) Eine weitere Interpretation Grob gesprochen sind O,,,o, die asymptotischen Versionen von,,=, (in dieser Reihenfolge) Schreibweise Wir schreiben häufig f(n)=O(g(n)) anstelle von f(n) O(g(n))

47 LS 2 / Informatik 47 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 1 3. while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n Also: T(n) = 3n+4 = (n) Laufzeitanalyse

48 LS 2 / Informatik 48 Laufzeitanalyse Worst-Case Analyse (Insertion Sort) t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) j

49 LS 2 / Informatik 49 Zusammenfassung Rechenmodell Abstrahiert von maschinennahen Einflüssen wie Cache, Pipelining, Prozessor, etc. Jede Pseudocodeoperation braucht einen Zeitschritt Laufzeitanalyse Normalerweise Worst-Case, manchmal Average-Case (sehr selten auch Best-Case) Asymptotische Analyse für n Ignorieren von Konstanten O-Notation


Herunterladen ppt "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"

Ähnliche Präsentationen


Google-Anzeigen