datenstrukturen, algorithmen und programmierung 2 (dap2)
DESCRIPTION
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2). Organisatorisches. Praktikum Falls Sie einen eigenen Laptop mit einem C-Compiler besitzen, können Sie diesen gerne zum Praktikum mitbringen. Organisatorisches. Lernräume Montag: 14.30-17.30 Uhr (OH14, Raum 340) - PowerPoint PPT PresentationTRANSCRIPT
LS 2 / Informatik
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik
2
Organisatorisches
Praktikum Falls Sie einen eigenen Laptop mit einem C-Compiler besitzen, können Sie
diesen gerne zum Praktikum mitbringen
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)
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
LS 2 / Informatik
5
InsertionSort(Array A) Eingabegröße n 1. for j 2 to length[A] do length[A] = n2. key A[j]3. i j-1 verschiebe alle Elemente aus4. 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 rechts6. i i-17. A[i+1] key Speichere key in Lücke
FragestellungWie kann man die Laufzeit eines Algorithmus vorhersagen?
Laufzeitanalyse
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
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)
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
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“
LS 2 / Informatik
10
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. 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
LS 2 / Informatik
11
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-14. while i>0 and A[i]>key do5. A[i+1] A[i]6. i i-17. A[i+1] key
Laufzeitanalyse
LS 2 / Informatik
12
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-1 n-14. while i>0 and A[i]>key do5. A[i+1] A[i]6. i i-17. A[i+1] key
Laufzeitanalyse
LS 2 / Informatik
13
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-1 n-1
4. while i>0 and A[i]>key do n-1 + S t5. A[i+1] A[i]6. i i-17. A[i+1] key
t : Anzahl Wiederholungen der while-Schleife bei Laufindex j
Laufzeitanalyse
j
j
LS 2 / Informatik
14
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-1 n-1
4. while i>0 and A[i]>key do n-1 + S t
5. A[i+1] A[i] S t6. i i-17. A[i+1] key
t : Anzahl Wiederholungen der while-Schleife bei Laufindex j
Laufzeitanalyse
j
j
j
LS 2 / Informatik
15
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-1 n-1
4. while i>0 and A[i]>key do n-1 + S t
5. A[i+1] A[i] S t
6. i i-1 S t7. A[i+1] key
t : Anzahl Wiederholungen der while-Schleife bei Laufindex j
Laufzeitanalyse
j
j
j
j
LS 2 / Informatik
16
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-1 n-1
4. while i>0 and A[i]>key do n-1 + S t
5. A[i+1] A[i] S t
6. i i-1 S t7. A[i+1] key n-1
t : Anzahl Wiederholungen der while-Schleife bei Laufindex j
Laufzeitanalyse
j
j
j
j
LS 2 / Informatik
17
InsertionSort(Array A) Zeit:1. for j 2 to length[A] do n2. key A[j] n-13. i j-1 n-1
4. while i>0 and A[i]>key do n-1 + S t
5. A[i+1] A[i] S t
6. i i-1 S t7. A[i+1] key n-1
t : Anzahl Wiederholungen der while-Schleife bei Laufindex j
Laufzeitanalyse
j
j
j
5n-4+3 S tj
j
LS 2 / Informatik
18
Laufzeitanalyse
Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall)
n
j
n
j
jnjnnT12
342)1(345)(
j
LS 2 / Informatik
19
Laufzeitanalyse
Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall)
n
j
n
j
jnjnnT12
342)1(345)(
2
87²3
2
)1(342
nnnnn
j
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)
n
j
n
j
jnjnnT12
342)1(345)(
2
87²3
2
)1(342
nnnnn
j
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 1in; false, sonst
Nullvektortest(Array A) 1. output true 2. i1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
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 1in; false, sonst
Nullvektortest(Array A) 1. output true 2. i1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+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
1jk
LS 2 / Informatik
23
Nullvektortest(Array A) 1. output true 2. i1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Laufzeit Jede Anweisung braucht einen Zeitschritt
Laufzeitanalyse
LS 2 / Informatik
24
Nullvektortest(Array A) 1. output true 2. i1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Laufzeit Jede Anweisung braucht einen Zeitschritt
LaufzeitanalyseLaufzeit parametrisiert durch Länge der Eingabe n. Hier ist n = length[A].
LS 2 / Informatik
25
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Laufzeit Jede Anweisung braucht einen Zeitschritt
Laufzeitanalyse
LS 2 / Informatik
26
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Laufzeit Jede Anweisung braucht einen Zeitschritt
Laufzeitanalyse
LS 2 / Informatik
27
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Laufzeit Jede Anweisung braucht einen Zeitschritt
Laufzeitanalyse
Anzahl Durchläufe abhängig von
Eingabe.
LS 2 / Informatik
28
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Definition t=max{i: A[j]=0 für alle 0j<i; in}
Laufzeitanalyse
Anzahl Durchläufe abhängig von
Eingabe.
0 0 5 0 3
t=3
LS 2 / Informatik
29
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false 5. ii+1 6. return output
Definition t=max{i: A[j]=0 für alle 0j<i; in}
Laufzeitanalyse
0 0 5 0 3
t=3
LS 2 / Informatik
30
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+1 6. return output
Definition t=max{i: A[j]=0 für alle 0j<i; in}
Laufzeitanalyse
0 0 5 0 3
t=3
LS 2 / Informatik
31
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+1 t 6. return output
Definition t=max{i: A[j]=0 für alle 0j<i; in}
Laufzeitanalyse
0 0 5 0 3
t=3
LS 2 / Informatik
32
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+1 t 6. return output 1
Definition t=max{i: A[j]=0 für alle 0j<i; in}
Laufzeitanalyse
0 0 5 0 3
t=3
LS 2 / Informatik
33
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+1 t 6. return output 1
3t+4
Laufzeitanalyse
LS 2 / Informatik
34
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+1 t 6. return output 1
3t+4
Worst-Case Laufzeit• T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n
Laufzeitanalyse
LS 2 / Informatik
35
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+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
LS 2 / Informatik
36
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+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
LS 2 / Informatik
37
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+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
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)
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.
LS 2 / Informatik
40
Laufzeitanalyse
O-Notation O(f(n)) = {g(n) : c>0, n >0, so dass für alle n≥n gilt g(n) cf(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
LS 2 / Informatik
41
Laufzeitanalyse
Beispiele 10nO(n) 10nO(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<e1/2)
c e
c n
LS 2 / Informatik
42
Laufzeitanalyse
W-Notation W(f(n)) = {g(n) : c>0, n >0, so dass für alle n≥n gilt g(n) cf(n)} (wobei f(n), g(n)>0)
Interpretation g(n)W(f(n)) bedeutet, dass g(n) für n mindestens so stark wächst
wie f(n) Beim Wachstum ignorieren wir Konstanten
0 0
LS 2 / Informatik
43
Laufzeitanalyse
Beispiele 10nW(n) 1000nW(n²) n²W(n) W(1000n) = W(n) f(n) = (W g(n)) g(n) = O(f(n))
LS 2 / Informatik
44
Laufzeitanalyse
Q-Notation g(n) Q(f(n)) g(n)=O(f(n)) und g(n)=W(f(n))
Beispiele 1000n Q(n) 10n²+1000n Q(n²) n Q(n)1-sin n
LS 2 / Informatik
45
Laufzeitanalyse
o-Notation o(f(n)) {g(n): c>0 n >0, so dass für alle n≥n gilt cg(n)<f(n)} (f(n), g(n) >0)
w-Notation f(n)w(g(n)) g(n)o(f(n))
0 0
LS 2 / Informatik
46
Laufzeitanalyse
Beispiele no(n²) no(n)
Eine weitere Interpretation Grob gesprochen sind O,W,Q,o,w die „asymptotischen Versionen“ von
,,=,<,> (in dieser Reihenfolge)
Schreibweise Wir schreiben häufig f(n)=O(g(n)) anstelle von f(n)O(g(n))
LS 2 / Informatik
47
Nullvektortest(Array A) Zeit 1. output true 1 2. i1 1 3. while output=true and in do t+1 4. if A[i] <> 0 then output false t 5. ii+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 = Q(n)
Laufzeitanalyse
LS 2 / Informatik
48
Laufzeitanalyse
Worst-Case Analyse (Insertion Sort) t =j-1 für absteigend sortierte Eingabe (schlechtester Fall)
n
j
n
j
jnjnnT12
342)1(345)(
²)(2
87²3
2
)1(342 n
nnnnn
j
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