Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Post on 04-Jan-2016

38 views 2 download

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)

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