Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

49
LS 2 / Informatik 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 Presentation

Transcript of Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Page 1: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Page 2: 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

Page 3: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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)

Page 4: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 5: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 6: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 7: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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)

Page 8: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 9: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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“

Page 10: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 11: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 12: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 13: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 14: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 15: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 16: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 17: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 18: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 19: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 20: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 21: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 22: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 23: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 24: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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].

Page 25: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 26: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 27: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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.

Page 28: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 29: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 30: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 31: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 32: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 33: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 34: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 35: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 36: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 37: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 38: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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)

Page 39: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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.

Page 40: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 41: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 42: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 43: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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))

Page 44: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 45: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 46: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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))

Page 47: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 48: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 49: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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