3.3 Laufzeit von Programmen - swl.htwsaar.de · 55 Laufzeit von Programmen § Allgemeingilt für...

Preview:

Citation preview

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

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

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

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)

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

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

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

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

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

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

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

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)

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

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

67

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

Informatik 1 / Kapitel 3: RAM als Rechnermodell

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

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

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

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)

72

Wachstum von Funktionen

Informatik 1 / Kapitel 3: RAM als Rechnermodell

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

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 æ Œ

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

76

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

§ 13n + log n + 242

Informatik 1 / Kapitel 3: RAM als Rechnermodell

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

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

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

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

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

Recommended