92
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 2 Algorithmen 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 Sortieren 2.4 Suchen 2.5 ... 1

2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Embed Size (px)

Citation preview

Page 1: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

2 Algorithmen

2.1 Analyse von Algorithmen

2.2 Entwurfsparadigmen

2.3 Sortieren

2.4 Suchen

2.5 ...

1

Page 2: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Begriffe

•  Effizienz

= gute Ausnutzung von Resourcen

•  Resourcen

= Rechenzeit, Speicherplatz

•  Aufwand / Komplexität

= tatsächlicher Verbrauch von Resourcen

2

Page 3: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Performanzfaktoren

•  Prozessorleistung

•  Hauptspeicher

•  Caches

•  Compiler-Version

•  Betriebssystem

•  . . .

3

Page 4: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Matrix mit 2048×2048 Einträgen •  Entry(i,j) = A[i×2048+j] •  Löschen 1:

for i←0 to 2047 do for j←0 to 2047 do Entry(i,j) ← 0

•  Löschen 2: for j←0 to 2047 do for i←0 to 2047 do Entry(i,j) ← 0

4

Page 5: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Effizienz eines Algorithmus

•  Implement / Run / Test

– Abhängig vom speziellen System

– Abhängig von der aktuellen Auslastung

– Abhängig von den Testdaten

– Abhängig von der Begabung des Programmierers

– Gibt es noch bessere Algorithmen?

5

Page 6: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Effizienz eines Algorithmus

•  Tatsächliche Laufzeit variiert auf unterschiedlichen Computer-Systemen

•  Erwartete Laufzeit verschiedener Algorithmen auf dem selben Computer kann nur für lange Berechnungen verglichen werden (variierende Systemauslastung).

6

Page 7: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Effizienz eines Algorithmus

•  In der Regel interessiert man sich nicht für die exakte Anzahl von Operationen, sondern nur für die Komplexitätsklasse.

•  Beispiel: lineare Liste vs. Suchbaum: – 1000 vs. 10 – 2000 vs. 11

–  …

– 1000000 vs. 20

– 2000000 vs. 21

7

Page 8: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

•  Performance Charts

– X-Achse : Größe der Eingabedaten

– Y-Achse : Rechenzeit

•  Lineare vs. logarithmische Achsen

– Exakte Werte

– Größenordnungen

8

Page 9: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

9

x, 10x, 100x [lin / lin]

Page 10: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

10

x, 10x, 100x [lin / log]

Page 11: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

11

x, 10x, 100x [log / log]

Page 12: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

12

Log(x), x, x2

[lin / lin]

Page 13: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

13

Log(x), x, x2

[lin / log]

Page 14: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Komplexitätsklassen

14

Log(x), x, x2

[log / log]

Page 15: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abstrakte Analyse

•  Abstrakte Analyse

Zähle die wesentlichen Operationen

auf einem idealen Computer.

•  Die Komplexität eines Algorithmus ist

unabhängig von der

Programmiersprache.

15

Page 16: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Stripped Java

•  Teilmenge von Java

– Prozedur-Aufrufe •  Integer-Arithmetik

•  Zuweisungen (Lesen, Schreiben)

•  if-then-else

• while

•  Vollständig aber einfacher zu analysieren als full Java

16

Page 17: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Berechnungsaufwand

•  Prozedur-Aufruf – Speichere Kontext auf dem Stack

– Speichere Rücksprungadresse

– Kopiere aktuelle Parameter

– Generiere neuen Prozedurkontext

– …

– Kopiere Rückgabewert

– Stelle alten Kontext wieder her

•  Kosten: CPC = CPC(Sold, Args, Snew)

17

Page 18: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Berechnungsaufwand

•  Integer-Arithmetik (Einheitskosten der Elementaroperationen) C+ ≤ C− ≤ C× ≤ C/

•  Konvertiere komplizierte Terme in die 3-Adress-Form

•  Achtung: bei genauer Analyse muß die Anzahl der Stellen berücksichtigt werden

18

Page 19: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

3-Adress-Form

19

A + B × (C + D) / E

h1 = C + D h2 = B × h1 h3 = h2 / E h4 = A + h3 h1

h4

h3

h2 E

+

C

B

D

A /

×

+

Page 20: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

3-Adress-Form

20

A + B × (C + D) / E

h1 = C + D h1 = B × h1 h1 = h1 / E h1 = A + h1 h1

h1

h1

h1 E

+

C

B

D

A /

×

+

Page 21: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Kostenmaße

•  C+ ≤ C− ≤ C× ≤ C/

•  Addition – Addition einzelner Ziffern:

x + y = z + c

•  Berücksichtigung des Überlaufs

•  # Sub-Operationen = # Stellen ≈ log z

•  Java-Integer : # Stellen = 32

21

Page 22: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Kostenmaße

•  C+ ≤ C− ≤ C× ≤ C/

•  Multiplikation – Multiplikation einzelner Ziffern: x·y = z

•  (10·x1 + x0)·(10·y1 + y0) = 100·x1·y1 + 10·(x1·y0 + x0·y1) + x0·y0

•  # Sub-Operationen = # Stellen2 ≈ (log z)2

•  Java-Integer : # Stellen = 32

22

Page 23: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Kostenmaße

•  C+ ≤ C− ≤ C× ≤ C/

•  Multiplikation – Multiplikation einzelner Ziffern: x·y = z

•  (b·x1 + x0)·(b·y1 + y0) = b2·x1·y1 + b·(x1·y0 + x0·y1) + x0·y0

•  # Sub-Operationen = # Stellen2 ≈ (log z)2

•  Java-Integer : # Stellen = 32

23

Page 24: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Kostenmaße

•  C+ ≤ C− ≤ C× ≤ C/

•  Multiplikation – Multiplikation einzelner Ziffern: x·y = z

•  (b·x1 + x0)·(b·y1 + y0) = x0·y0+b·((x0+x1)·(y0+y1)−x0·y0−x1·y1) + b2·x1·y1

•  # Sub-Operationen = # Stellen1.58 ≈ (log z)log 3

•  Java-Integer : # Stellen = 32

24

Page 25: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Kostenmaße

•  C+ ≤ C− ≤ C× ≤ C/

•  Multiplikation – Karatsuba-Multiplikation

•  Spart eine Sub-Multiplikation aber benötigt drei zusätzliche Additionen

•  Lohnt sich nur für sehr große Zahlen !!!

•  Es gibt theoretisch noch bessere Algorithmen

25

Page 26: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abstrakte Analyse

•  Theorie: Effiziente Algorithmen lohnen sich vor allem für große Probleme

•  Praxis: Für kleinere Probleme können einfache Algorithmen unter Umständen sinnvoller sein.

•  Die Klassifizierung groß/klein hängt vom Problem und vom Algorithmus ab.

26

Page 27: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Berechnungsaufwand

•  Zuweisung (Lesen, Schreiben)

– Einheitskosten Cass

– Caching-Effekte werden vernachlässigt

•  Array-Zugriff A[ i ] enthält eine

versteckte Addition.

27

Page 28: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Berechnungsaufwand

•  if X then Y else Z – Worst Case:

#OP = #OP(X) + max #OP(Y), #OP(Z)

– Average Case: P = Probability(X = true) #OP = #OP(X) + P×#OP(Y) + (1−P)×#OP(Z)

28

Page 29: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Berechnungsaufwand

•  while X do Y

– Konstanter Aufwand:

#OP = #Loops × [ #OP(X) + #OP(Y) ]

– Variabler Aufwand: #OP = #Loops × #OP(X) + SUM(#OP(Yi))

29

Page 30: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Sortiere(A[1..n]) i ← 1 while i < n do min ← i j ← i+1 while j ≤ n do if A[j] < A[min] then min ← j j ← j+1 swap(A[i],A[min]) i ← i+1

30

Page 31: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Aufwand der inneren Schleife Cinner

•  Aufwand der äußeren Schleife Couter

•  Anzahl der Durchläufe

C(n) = ∑i Couter + (n−i) × Cinner

= n × Couter + n×(n−1)/2 × Cinner

≈ n2 × Cinner/2... für „große“ n

31

Page 32: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Best / Worst / Average Case

•  Verschieden optimistische Abschätzungen – Untere Schranke

– Erwartungswert – Obere Schranke

•  Erwartungswert: Mittelwert des Aufwandes über alle möglichen Eingaben gewichtet mit der Auftrittswahrscheinlichkeit.

32

Page 33: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Multipliziere zwei n-bit Zahlen in Binärdarstellung

•  Multiply(x,y) i ← 0

result ← 0 while i < n do if bit(x,i) = 1 then

result ← result + shift(y,i) i ← i+1

33

Page 34: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Aufwand ≈ Anzahl der Additionen = Anzahl der Einsen in der Binärdarstellung von x

•  Best Case : x = 0 ... 0 Additionen

•  Worst Case : x = 2n−1 ... n Additionen

•  Average Case ???

34

Page 35: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Anzahl der möglichen Eingaben N = 2n

•  Anzahl der Eingaben mit k Einsen in x

•  Mittlerer Aufwand ...

35

Page 36: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Mittlerer Aufwand

36

Page 37: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiel

•  Mittlerer Aufwand

S / N = n×2n-1 / 2n = n / 2 Additionen

•  Bemerkung zur Kombinatorik

– Permutationen n!

– Kombinationen

37

Page 38: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  In der Regel ist das quantitative Zählen der Elementaroperationen mühsam und wenig ergiebig.

•  Man ist daher eher an qualitativen Aussagen interessiert, z.B. wie verändert sich der Rechenaufwand, wenn man die Eingabedaten verdoppelt?

38

Page 39: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Beispiele

•  Addition – Verdopplung der Stellen – Verdopplung der Sub-Operationen

•  Multiplikation / Sortierbeispiel – Verdopplung der Stellen / Elemente – Vervierfachung der Sub-Operationen

•  Suchen im Suchbaum: – Verdopplung der Knoten im Baum –  Erhöhung des Suchaufwandes um einen Test

(vollständiger Baum erhöht sich um ein Level)

39

Page 40: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

40

Page 41: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

41

Page 42: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

42

Page 43: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

43

Page 44: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

44

Page 45: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

45

Page 46: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Asymptotische Komplexität

•  Definition von Schranken für Funktionen f,g : N → R+

– O(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≤ c·f(n)

– ΩΩ(f) = g | ∃c>0 ∃n0>0 ∀n≥n0 : g(n) ≥ c·f(n)

– Θ(f) = O(f) ∩ ΩΩ(f) =

g | ∃c>0 ∃n0>0 ∀n≥n0 : f(n)/c ≤ g(n) ≤ c·f(n)

46

Page 47: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Rechenregeln

•  f + g ∈ O(maxf,g) =

•  f×g ∈ O(f×g)

•  g(n) := a·f(n) + b ∧ f ∈ ΩΩ(1) ⇒ g ∈ O(f)

•  Schreibweise n×Couter + n×(n−1)/2×Cinner = O(n2)

47

O(f) falls g∈O(f) O(g) falls f∈O(g)

Page 48: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci-Zahlen

•  F(n) =

•  F(n) positiv für alle n

•  F(n) wächst für n > 2 streng monoton

48

0 ... n = 0 1 ... n = 1 F(n−1)+F(n−2) ... n > 1

Page 49: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci-Zahlen

•  F(n) = F(n−1) + F(n−2) < 2×F(n−1) < 4×F(n−2) < ... < 2n−1 × F(1) = 2n/2

•  F ∈ O(2n), c = 1/2

49

Page 50: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci-Zahlen

•  F(n) = F(n−1) + F(n−2) > 2×F(n−2) > 4×F(n−4) > ...

>

•  F ∈ ΩΩ(2n/2), c = 1/√2

50

2(n-1)/2×F(1) ... n ungerade 2n/2-1×F(2) ... n gerade

Page 51: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Alternative Definition

•  „Wachstumsrate“ (f,g : N → R+)

•  limn→∞ g(n) / f(n) =

•  g wächst langsamer : g ∈ O(f) \ Θ(f) •  g und f wachsen gleich : g ∈ Θ(f)

•  g wächst schneller : g ∉ O(f)

51

0 ... g wächst langsamer c ... g und f wachsen gleich ∞ ... g wächst schneller

Page 52: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Typische Komplexitätsklassen

•  O(1) Elementaroperation

•  O(logn) Binäre Suche

•  O(n) Lineare Suche

•  O(n×logn) Sortieren (später)

•  O(n2) Sortieren (vorhin) •  O(n3) Invertieren von Matrizen

•  O(2n) Labyrinth-Suche (vollständig)

•  O(n!) Zahl von Permutationen 52

Page 53: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci-Zahlen

•  F(n) =

•  F(n) positiv für allen

•  F(n) wächst für n > 2 streng monoton

53

0 ... n = 0 1 ... n = 1 F(n−1)+F(n−2) ... n > 1

Page 54: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci rekursiv

•  F(n) if n> 1 then return F(n−1) + F(n−2) else return n

•  T(0) = T(1) = t

•  T(n+2) = t + T(n+1) + T(n)

54

Page 55: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci rekursiv

•  Behauptung: T(n) ≥ t×F(n+1)

•  Beweis: Vollständige Induktion ... – Anfang: T(0) = t ≥ t×F(1) = t

T(1) = t ≥ t×F(2) = t

–  Schritt: T(n+2) = t + T(n+1) + T(n) ≥ t + t×F(n+2) + t×F(n+1) ≥ t + t×F(n+3) ≥ t×F(n+3)

•  T(n) ∈ ΩΩ(2n/2)

55

Page 56: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci iterativ

•  F(n) fold = 1 fnew = 0 while n > 0 do fnew ← fnew + fold fold ← fnew − fold n ← n−1 return fnew

•  T(n) = t × n = Θ(n)

56

Page 57: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci Vergleich

57

x, 2x/2

[lin / lin]

Page 58: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci Vergleich

58

x, 2x/2

[lin / log]

Page 59: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Fibonacci Vergleich

59

x, 2x/2

[log / log]

Page 60: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Standardabschätzungen

•  Reihensummen – Geschachtelte Schleifen

•  Abschätzung durch Integrale

•  Vollständige Induktion

•  Rekursionsgleichungen – Eliminierung

• Master-Theorem

•  Direkter Ansatz

60

Page 61: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Reihensummen

•  GeschachtelteSchleifen –  for i ←1 to n do

O(1) = O(n)

–  for i ←1 to n do O( i ) = O(n2)

61

Page 62: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Reihensummen

•  GeschachtelteSchleifen –  for i ←1 to n do O(1) = O(n)

–  for i ←1 to n do O( i ) = O(n2)

–  for i ←1 to n do for j ←1 to n do O(1) = O(n2)

–  for i ←1 to n do for j ←1 to i do O(1) = O(n2)

–  . . .

62

Page 63: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Reihensummen

•  Geschachtelte Schleifen – Generell: der Aufwand Tk(n) einer k-fach

geschachtelten Schleife (mit linear beschränkten Laufintervallen) besitzt als obere Schranke ein Polynom vom Grad k

Tk(n) = O( ∑ αini ) = O(nk)

63

i=0

k

Page 64: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung durch Integral

•  Abschätzungen der Summe – Summanden monoton wachsend / fallend

–  Interpretation als Approximation eines bestimmten Integrals

64

Page 65: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung durch Integral

•  Abschätzungen der Summe – Summanden monoton wachsend / fallend

–  Interpretation als Approximation eines bestimmten Integrals

65

Page 66: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung durch Integral

•  Abschätzungen der Summe – Summanden monoton wachsend / fallend

–  Interpretation als Approximation eines bestimmten Integrals

66

Page 67: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung durch Integral

•  Abschätzungen der Summe – Summanden monoton wachsend / fallend

–  Interpretation als Approximation eines bestimmten Integrals

67

Page 68: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung durch Integral

•  Abschätzungen der Summe – Summanden monoton wachsend / fallend

–  Interpretation als Approximation eines bestimmten Integrals

68

Page 69: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung durch Integral

•  Beispiel

69

Page 70: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Vollständige Induktion

•  Behauptung

•  Zeige: Behauptung gilt für n = n0

•  Zeige: Wenn die Behauptung für ein n

gilt, dann gilt sie auch für n+1

70

Page 71: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Vollständige Induktion

•  Behauptung:

•  Beweis: n = 1

71

Page 72: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Vollständige Induktion

•  Behauptung:

•  Beweis: n → n+1

72

nach Induktions- voraussetzung

Page 73: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Rekursionsgleichungen

•  Elimination

•  Master-Theorem

•  Direkter Ansatz

73

Page 74: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Rekursionsgleichungen

•  F(n) = a + b×F(n−1)

•  F(n) = a + b×F(n−1) + c×F(n−2)

•  . . .

•  F(n) = a + b×F(n/c)

•  G(m) := F(cm) → G(m) = a + b×G(m−1)

74

Page 75: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Rekursionsgleichungen

•  F(n) = a(n) + b(n)×F(n−1)

•  F(n) = a(n) + b(n)×F(n−1) + c(n)×F(n−2)

•  . . .

•  F(n) = a(n) + b(n)×F(n/c)

•  G(m) := F(cm) → G(m) = a(n) + b(n)×G(m−1)

75

Page 76: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Elimination

•  F(n) = n + F(n−1) = n + (n−1) + F(n−2) = ... = n + (n−1) + ... + 1 + F(0) = n×(n−1) / 2 + F(0) = O(n2)

76

einfaches Sortieren

Page 77: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Elimination

•  F(n) = F(n−1) + F(n−2) = 2×F(n−2) + F(n−3)

= 3×F(n−3) + 2×F(n−4)

= 5×F(n−4) + 3×F(n−5)

= ...

= ???

77

Fibonacci

Page 78: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Abschätzung nach oben

•  Typisch: T(n) = a×T(n/2) + b

•  Einfach, wenn n = 2k

•  Sonst: finde m = 2k mit m/2 < n ≤ m

•  Dann gilt: T(n) ≤ T(m)

78

Page 79: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Elimination

•  T(n) = T(n/2) + 1 = T(n/4) + 1 + 1

= T(n/8) + 1 + 1 + 1

= ...

= T(1) + log n

= O(logn)

79

binäre Suche

Page 80: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Elimination

•  T(n) = 4×T(n/2) = 16×T(n/4)

= 64×T(n/8)

= ...

= 4ld n×T(1)

= n2×T(1)

= O(n2)

80

Multiplikation großer Zahlen

Page 81: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Elimination

•  T(n) = 4×T(n/2) + 3×n = 16×T(n/4) + 12×n/2 + 3×n

= 64×T(n/8) + 48×n/4 + 12×n/2 + 3×n

= ...

= 3×n×(n + ... + 4 + 2 + 1)

= 3×n×(2(log n)+1−1) = 3×n×(2×n−1) = O(n2)

81

Multiplikation großer Zahlen

Page 82: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Elimination

•  T(n) = 2×T(n/2) + n = 4×T(n/4) + 2×n/2 + n

= 8×T(n/8) + 4×n/4 + 2×n/2 + n

= ...

= 2(log n)−1×n / 2(log n)−1 + ... + 2×n/2 + n

= n×logn

82

effizientes Sortieren

Page 83: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

•  T(n) =

•  T(n) =

83

O(n) ... a < b O(n×logn) ... a = b O(nlogba) ... a > b

c ... n = 1 a×T(n/b)+c×n ... n > 1

Page 84: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

•  ... sei n = bk:

•  T(n) = a×T(n/b) + c×n = a2×T(n/b2) + a×c×n/b + c×n = a3×T(n/b3) + a2×c×n/b2 + a×c×n/b

+ c×n = ...

=

84

Page 85: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

•  T(n) =

•  a < b: T(n) ≤

•  a = b: T(n) =

•  a > b: T(n) =

85

Page 86: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

86

Page 87: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

87

Page 88: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

•  T(n) =

•  T(n) =

88

O(n) ... a < b O(n×log n) ... a = b O(nlogba) ... a > b

c ... n = 1 a×T(n/b)+c×n ... n > 1

Page 89: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Master-Theorem

•  T(n) =

•  T(n) =

89

O(np) ... a < bp O(np×logn) ... a = bp O(nlogba) ... a > bp

c ... n = 1 a×T(n/b)+O(np) ... n > 1

Page 90: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Multiplikation großer Zahlen

•  Standard: T(n) = 4×T(n/2) + 3×n = O(nld 4) = O(n2)

•  Karatsuba: T(n) = 3×T(n/2) + 6×n = O(nld 3) = O(n1.58)

90

Page 91: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Direkter Ansatz

•  F(n) = F(n−1) + F(n−2)

•  Ansatz : F(n) = φn

•  φn = φn−1 + φn−2

⇔ φ2 = φ + 1 ⇔ φ2 − φ − 1 = 0 ⇔ φ± = (1±√5) / 2

91

Page 92: 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen 2.3 ... · 2.1 Analyse von Algorithmen 2.2 Entwurfsparadigmen ... • Prozedur-Aufruf – Speichere Kontext auf dem Stack – Speichere

Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Direkter Ansatz

•  φ± = (1±√5) / 2

•  F(n) := α×φ+n + β×φ−n

•  F(0) = α + β = 0 ⇒ α = −β

•  F(1) = α×φ+ + β×φ− = α×(φ+ − φ−) = 1 ⇒ α = 1/√5

•  F(n) = (φ+n − φ−n) / √5

92