29
53 3.3 Laufzeit von Programmen § Die Laufzeit eines Programmes T(n) messen wir als die Zahl der Befehle, die für die Eingabe n abgearbeitet werden § Betrachten wir unser Programm zur Berechnung von Zweierpotenzen, so beobachten wir, dass § für n = 1 insgesamt 9 Befehle abgearbeitet werden § für n = 2 insgesamt 13 Befehle abgearbeitet werden § für n = 3 insgesamt 17 Befehle abgearbeitet werden § für n = 4 insgesamt 21 Befehle abgearbeitet werden Informatik 1 / Kapitel 3: RAM als Rechnermodell

3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

Embed Size (px)

Citation preview

Page 1: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

53

3.3 Laufzeit von Programmen§ Die Laufzeit eines Programmes T(n) messen wir als

die Zahl der Befehle, die für die Eingabe nabgearbeitet werden

§ Betrachten wir unser Programm zur Berechnungvon Zweierpotenzen, so beobachten wir, dass

§ für n = 1 insgesamt 9 Befehle abgearbeitet werden

§ für n = 2 insgesamt 13 Befehle abgearbeitet werden

§ für n = 3 insgesamt 17 Befehle abgearbeitet werden

§ für n = 4 insgesamt 21 Befehle abgearbeitet werden

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 2: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

54

Berechnen von Zweierpotenzen

Informatik 1 / Kapitel 3: RAM als Rechnermodell

INPUT 0

OUTPUT 10: a <- 1

1: i1 <- s[0]2: if i1 = 0 then jump 6

3: a <- a * 24: i1 <- i1 - 1

5: jump 26: s[1] <- a

7: HALT

Page 3: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

55

Laufzeit von Programmen§ Allgemein gilt für unsere Berechnung von Zweierpotenzen

§ für n werden insgesamt 4n + 5 Befehle abgearbeitet

§ Dies lässt sich mittels vollständiger Induktionanhand von Tabellen beweisen

§ Aussage: An (d.h. für n werden 4n + 5 Befehle abgearbeitet)

§ Induktionsanfang: Zeige für n = 1 mittels einer Tabelle,dass insgesamt 9 Befehle abgearbeitet werden

§ Induktionsschritt: Zeige für n + 1, dass vier Befehle mehrals für n abgearbeitet werden (d.h. die Schleife bestehend aus den Befehlen 2–5 wird einmal mehr durchlaufen)

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 4: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

56

Schnelleres Berechnen von Zweierpotenzen§ Wir sehen nun, wie man Zweierpotenzen der Form

schneller berechnen kann

§ Berechnen wir 216 mit unserem bisherigem Programm,so werden insgesamt 69 Befehle abgearbeitet

Informatik 1 / Kapitel 3: RAM als Rechnermodell

2 (2 l)

Page 5: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

57

Schnelleres Berechnen von Zweierpotenzen§ Wir beobachten, dass für 216 gilt

§ Eine schnellere Berechnung ist also möglich,indem wir die Zahl 2 viermal quadrieren(d.h. mit sich selbst multiplizieren)

§ Allgemein können wir 2(2l) schneller berechnen,indem wir die Zahl 2 l-mal quadrieren

Informatik 1 / Kapitel 3: RAM als Rechnermodell

216 =

✓⇣�22�2⌘2

◆2

Page 6: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

58

Schnelleres Berechnen von Zweierpotenzen§ Die Eingabe l befindet sich in s[0] und die Ausgabe

der Zweierpotenz 2(2l) erfolgt in s[1]

Informatik 1 / Kapitel 3: RAM als Rechnermodell

INPUT 0OUTPUT 1

0: a <- 21: i1 <- s[0]

2: if i1 = 0 then jump 73: s[2] <- a

4: a <- a * s[2]5: i1 <- i1 - 1

6: jump 27: s[1] <- a

8: HALT

Page 7: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

59

Schnelleres Berechnen von Zweierpotenzen§ Berechnen wir beispielsweise 2128 = 2(27) mit unserem

ursprünglichen Verfahren, so werden 517 Befehleabgearbeitet, wohingegen mit dem schnellerenVerfahren nur 40 Befehle abgearbeitet werden

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 8: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

60

Schnelleres Berechnen von Zweierpotenzen§ Wir können das Verfahren für Potenzen der Form an

mit einer Basis a > 1 und einem Exponenten n ≥ 0verallgemeinern

§ Betrachte hierzu die Binärdarstellung des Exponenten

und stelle die Potenz an dar als

Informatik 1 / Kapitel 3: RAM als Rechnermodell

n = (bk . . . b0)2

an = a bk·2k ⇥ a b k�1·2k�1

⇥ . . .⇥ a b0·20

Page 9: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

61

Schnelleres Berechnen von Zweierpotenzen

§ Wir können die Potenz an also berechnen, indem wir

§ k-mal quadrieren (um die Faktoren a2i zu berechnen)

§ k-mal multiplizieren (um die Faktoren zu multiplizieren)

§ Insgesamt benötigen wir also 2k Multiplikationen

§ Der Wert k ist die Zahl der (benötigten) Bits in der Binärdarstellung des Exponenten n und es gilt

Informatik 1 / Kapitel 3: RAM als Rechnermodell

k = blog2(n)c

Page 10: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

62

O-Notation§ In der Informatik sind wir meist nicht an der genauen

Anzahl abgearbeiteter Befehle interessiert, sonderndaran wie sich diese für wachsendes n entwickelt

§ Die O-Notation (auch: Landau-Notation) erlaubt uns, Größenordnungen von Laufzeiten auszudrücken

§ Intuitiv bedeutet 4n + 4 ∊ O(n), dass die Funktionf(n) = 4n + 4 höchstens so schnell wächstwie die Funktion g(n) = cn für einepositive Konstante c ∊ ℝ+

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 11: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

63

O-Notation§ Definition: Für zwei Funktionen f : ℕ → ℝ+ und

g : ℕ → ℝ+ heißt f ∊ O(g(n)), wenn es positiveKonstanten c ∊ ℝ+ und n0 ∊ ℕ gibt, so dassf(n) ≤ c · g(n) für alle n ≥ n0 gilt

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 12: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

64

O-Notation

Informatik 1 / Kapitel 3: RAM als Rechnermodell

n0

g(n)f(n)

’ n Ø n0 : c · g(n) Ø f(n)c · g(n)

Page 13: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

65

O-Notation§ Beispiel: Betrachten wir die beiden Funktionen f(n) = 4n + 5 und g(n) = n. Wir “raten“ ein c ∊ ℝ+

und bestimmen ein zugehöriges n ≥ n0

Informatik 1 / Kapitel 3: RAM als Rechnermodell

4n + 5 Æ 5n … 5 Æ n

Page 14: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

66

O-Notation§ Beispiel: Betrachten wir die beiden Funktionenf(n) = 2n2 + 3 und g(n) = n2 und „raten“ c = 3

somit ist z.B. für n0 = 2 unsere Definition erfüllt

Informatik 1 / Kapitel 3: RAM als Rechnermodell

2n2 + 3 Æ 3n2 … 3 Æ n2 …Ô

3 Æ n

Page 15: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

67

O-Notation§ Beispiel: Betrachten wir die beiden Funktionenf(n) = 3n3 + n2 und g(n) = n3

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 16: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

68

O-Notation

§ Wie die Schreibweise f ∊ O(g(n)), suggeriert, handelt es sich bei einer Laufzeitklasse O(g(n)) umeine Menge von Funktionen

§ Durch Angabe der Laufzeitklasse eines Programmescharakterisieren wir seine Zeitkomplexität

§ Programme können für Eingaben gleicher Größe nunterschiedliche Laufzeit haben; wir betrachtenimmer den schlechtesten Fall (worst case), d.h.die maximale Laufzeit für eine Eingabe einer Größe

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 17: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

69

O-Notation§ Man versucht in der Regel, eine möglichst „enge“

(d.h. kleine) Laufzeitklasse O(g(n)) zu einergegebenen Funktion f(n) anzugeben

§ Beispiel: Auch wenn log n ∊ O(n317) gilt, bevorzugt mandie Angabe der Laufzeitklasse O(log n)

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 18: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

70

Regeln zum Bestimmen von Laufzeitklassen§ Folgende Regeln können angewendet werden,

um für eine Funktion f(n) eine möglichst„enge“ Laufzeitklasse zu bestimmen

§ additive Konstanten a ≥ 0 dürfen entfallen, d.h.

§ konstante Faktoren a ≥ 0 dürfen entfallen, d.h.

Informatik 1 / Kapitel 3: RAM als Rechnermodell

f(n) + a œ O(f(n))

c · f(n) œ O(f(n))

Page 19: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

71

Regeln zum Bestimmen von Laufzeitklassen§ dominierte Terme dürfen entfallen d.h. können wir die

Funktion f(n) umschreiben als

und gilt für zwei Terme fi (n) ∊ O(fj (n)),so kann der Term fi (n) entfallen

Informatik 1 / Kapitel 3: RAM als Rechnermodell

f(n) = f1(n) + f2(n) + . . . + fk(n)

Page 20: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

72

Wachstum von Funktionen

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 21: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

73

Wachstum von Funktionen

Informatik 1 / Kapitel 3: RAM als Rechnermodell

f(n) 1 5 10 25log n 0.00 1.61 2.30 3.22n 1.00 5.00 10.00 25.00n log n 0.00 8.05 23.03 80.47n2 1.00 25.00 100.00 625.00n3 1.00 125.00 1, 000.00 15, 625.00en 2.72 14.85 22, 026.47 7, 200, 489, 930.00

Page 22: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

74

Wachstum von Funktionen§ Wie können wir allgemein feststellen, ob die Funktion f(n)

schneller wächst als die Funktion g(n)?

§ Betrachte, ob für den Grenzwert des Quotienten gilt

§ Beispiel: Betrachte f(n) = n log n und g(n) = n

Informatik 1 / Kapitel 3: RAM als Rechnermodell

limnæŒ

f(n)g(n) æ Œ

limnæŒ

n log n

n= lim

næŒlog n æ Œ

Page 23: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

75

Beispiele zum Bestimmen von Laufzeitklassen§ Beispiel: Bestimme möglichst „enge“ Laufzeitklasse für

§ 3n4 + 2n3 + 2n2

§ 3n2 + 12n + log n

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 24: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

76

Beispiele zum Bestimmen von Laufzeitklassen§ n log n + 12 n

§ 13n + log n + 242

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 25: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

77

Beispiele zum Bestimmen von Laufzeitklassen§ log17 n ∊ O(log n)

Hinweis: Logarithmen zu unterschiedlicher Basenunterscheiden sich nur um einen konstanten Faktor

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 26: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

78

Platzkomplexität§ Analog zur Zeitkomplexität eines Programmes können

wir Angaben zu seiner Platzkomplexität machen,d.h. wie viele Speicherstellen S(n) es in Abhängigkeitvon der Eingabe n benötigt

§ Die von uns bisher betrachteten RAM-Programmehaben alle konstante Platzkomplexität in O(1),da die Zahl der benötigten Speicherstellennicht von der Eingabe n abhängt

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 27: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

79

Wann ist ein RAM-Programm effizient?§ Ein RAM-Programm heißt effizient, wenn seine Laufzeit

ein Polynom ist, d.h. T(n) ∊ O(nk) für festes k gilt

§ Unser Programm zur schnelleren Berechnung von Zweierpotenzen hat logarithmische Laufzeit in O(log n)

§ Alle Belegungen von n verfügbaren Bits aufzuzählen,hat exponentielle Laufzeit in O(2n),da es 2n mögliche Belegungen gibt

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 28: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

80

Zusammenfassung§ Schnellere Berechnung von Zweierpotenzen

durch wiederholtes Quadrieren

§ Laufzeiten von Programmen werden durchAngabe einer möglichst „engen“ Laufzeitklassegemäß der O-Notation charakterisiert

§ Regeln zum Bestimmen „enger“ Laufzeitklassen

Informatik 1 / Kapitel 3: RAM als Rechnermodell

Page 29: 3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für unsere Berechnung von Zweierpotenzen § für nwerden insgesamt 4n+ 5Befehle abgearbeitet

81

Literatur

[1] H.-P. Gumm und M. Sommer: Einführung in die Informatik, Oldenbourg Verlag, 2012 (Kapitel 4.1.5)

[2] T. H. Cormen, C. E. Leiserson, R. Rivest und

C. Stein: Algorithmen – Eine Einführung,Oldenbourg Verlag, 2009 (Kapitel 3)

Informatik 1 / Kapitel 3: RAM als Rechnermodell