Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Melusina Dotter Geändert vor über 10 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.