Informatik I Komplexität von Algorithmen

Ähnliche Dokumente
Informatik I Komplexität von Algorithmen

Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Average-Case-Komplexität

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

WS 2009/10. Diskrete Strukturen

Algorithmen und Datenstrukturen 1 Kapitel 5

Abschnitt 7: Komplexität von imperativen Programmen

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Übung Algorithmen und Datenstrukturen

V. Claus, Juli 2005 Einführung in die Informatik II 45

Asymptotik und Laufzeitanalyse

Informatik II. Algorithmen und Datenstrukturen. Vorläufige Version 1 c 2002 Peter Thiemann

Komplexität von Algorithmen

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Algorithmen und Datenstrukturen (für ET/IT)

Programmieren und Problemlösen

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Grundlagen: Algorithmen und Datenstrukturen

2. Effizienz von Algorithmen

Komplexität von Algorithmen:

Prof. Dr. Margarita Esponda

2 Wachstumsverhalten von Funktionen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit ** i=1

A6.1 Logarithmus. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. A6.1 Logarithmus. A6.2 Landau-Notation. A6.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 3, Donnerstag 6.

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Grundlagen: Algorithmen und Datenstrukturen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Algorithmen und Datenstrukturen I Grundlagen

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

Algorithmen und Datenstrukturen I. Grundlagen. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Algorithmen und Datenstrukturen

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Vorlesung Datenstrukturen

Notation für das asymptotische Verhalten von Funktionen

Grundlagen: Algorithmen und Datenstrukturen

3.3 Laufzeit von Programmen

Das O-Tutorial. 1 Definition von O, Ω, Θ, o und ω

Ordnen Sie die folgenden Funktionen nach ihrer asymptotischer Komplexität in aufsteigender Reihenfolge: i=1 4i + n = 4 n. i=1 i + 3n = 4 ( n(n+1)

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Ziele. Kapitel 10: Komplexität von Algorithmen und Sortierverfahren. Beispiel: Lineare Suche eines Elements in einem Array (1)

Übung Algorithmen und Datenstrukturen

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

8 Komplexitätstheorie

Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III

AlgoDat Fragen zu Vorlesung und Klausur

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Komplexität von Algorithmen OOPM, Ralf Lämmel

Algorithmen und Datenstrukturen 1-1. Seminar -

Die asymptotische Notation

3.2. Korrektheit und Komplexität am Beispiel: Sortieren Sortieren ist eine wichtige Basis-Operation für komplexe Algorithmen

es gibt Probleme, die nicht berechenbar sind (z.b. Menge aller Funktionen N N und die Menge aller Sprachen sind überabzählbar)

Algorithmen und Datenstrukturen Tutorium I

Exponentiation: das Problem Gegeben: (multiplikative) Halbgruppe (H, ), Element a H, n N Aufgabe: berechne das Element

Prof. Dr. Margarita Esponda

Komplexität von Algorithmen

Übungsblatt 4. Aufgabe 1. IN8009 Algorithmen und Datenstrukturen Thomas Stibor

Exponentiation: das Problem

Übung Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen (für ET/IT)

Algorithms & Data Structures 2

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

Kapitel 8. Rekursionsgleichungen. Landau-Symbole. Lösen von Rekursionsgleichungen Allgemeines Iterationsmethode Spezialfälle Erzeugende Funktionen

Komplexität eines Algorithmus, Grössenordnung, Landau-Symbole, Beispiel einer Komplexitätsberechnung (Mergesort) 7. KOMPLEXITÄT

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Transkript:

Leistungsverhalten von Algorithmen Informatik I Komplexität von Algorithmen G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Speicherplatzkomplexität: Wird primärer & sekundärer Speicherplatz effizient genutzt? Laufzeitkomplexität: Steht die Laufzeit im akzeptablen / vernünftigen / optimalen Verhältnis zur Aufgabe? Theorie: liefert untere Schranke, die für jeden Algorithmus gilt, der das Problem löst. Spezieller Algorithmus liefert obere Schranke für die Lösung des Problems. Erforschung von oberen und unteren Schranken: Effiziente Algorithmen und Komplexitätstheorie (Zweige der Theoretischen Informatik) G. Zachmann Informatik 1 - WS 05/06 Komplexität 2 Laufzeit Laufzeitanalyse Definition: Die LaufzeitT(x) eines Algorithmus A bei Eingabe x ist definiert als die Anzahl von Basisoperationen, die Algorithmus A zur Berechnung der Lösung bei Eingabe x benötigt. Laufzeit = Funktion der Größe der Eingabe Definition für Eingabegröße ist abhängig vom Problem Sei P ein gegebenes Programm und x Eingabe für P, x Länge von x, und T P (x) die Laufzeit von P auf x. Beschreibe Aufwand eines Algorithmus als Funktion der Größe des Inputs (kann verschieden gemessen werden): T p (n) = Laufzeit des Programms P für Eingaben der Länge n Der beste Fall (best case): Oft leicht zu bestimmen, kommt in der Praxis jedoch selten vor: Der schlechteste Fall (worse case): Liefert garantierte Schranken, meist relativ leicht zu bestimmen. Oft zu pessimistisch: G. Zachmann Informatik 1 - WS 05/06 Komplexität 3 G. Zachmann Informatik 1 - WS 05/06 Komplexität 4 1

Kostenmaße Beispiel Minimum-Suche Einheitskostenmaß: Annahme, jedes Datenelement belegt unabhängig von seiner Größe denselben Speicherplatz (in Einheitsgröße). Damit: Größe der Eingabe bestimmt durch Anzahl der Datenelemente Beispiel: Sortierproblem Logarithmisches Kostenmaß (Bit-Komplexität): Annahme, jedes Datenelement belegt einen von seiner Größe (logarithmisch) abhängigen Platz Größe der Eingabe bestimmt durch die Summe der Größen der Elemente Erinnerung: für n>0 ist die # Bits zur Darstellung von n = Beispiel: Zerlegung einer gegebenen großen Zahl in Primfaktoren Ab jetzt immer Einheitskostenmaß G. Zachmann Informatik 1 - WS 05/06 Komplexität 5 Eingabe : Folge von n Zahlen (a 1, a 2,, a n ). Ausgabe : Index i, so daß a i a j für alle Indizes 1 j n. Beispiel: Eingabe: 31, 41, 59, 26, 51, 48 Ausgabe: 4 def min(a): min = 1 for j in range( 2, len(a) ): if A[j] < A[min]: min = j G. Zachmann Informatik 1 - WS 05/06 Komplexität 6 Weiteres Beispiel für Aufwandsberechnung def min(a): min = 0 for j in range( 1, len(a) ): if A[j] < A[min]: min = j Zusammen: Zeit Kosten Anzahl c 1 1 c 2 n 1 c 3 n 1 c 4 n-1 Wir betrachten folgende Funktion f1, die 1! 2! (n-2)! (n-1)! berechnet n Z(n) V(n) M(n) I(n) def f1(n): 1 2 2 0 1 r = 1 2 3 5 1 1 while n > 0 : 3 5 3 1 3 i = 1 4 8 6 3 6 while i < n: 5 12 10 6 10 r *= i 6 17 15 10 15 i += 1 7 23 21 15 21 n -= 1 8 30 28 21 28 return r 9 38 36 28 36 Exakte Bestimmung des Aufwandes: 10 47 45 36 45 Eingabegröße = Größe des Arrays M = Anzahl Mult, I = Anzahl Inkr., V = Anzahl Vergleiche, Z = Anzahl Zuweisungen G. Zachmann Informatik 1 - WS 05/06 Komplexität 7 G. Zachmann Informatik 1 - WS 05/06 Komplexität 8 2

Rechenmodell / Algorithmisches Modell Anzahl Mult M(n) Anzahl der Inkrementierungen:, woraus folgt: Die Anzahl der Vergleiche Die Anzahl benötigter Zuweisungen Z(n) ist gleich r = 1 while n > 0 : i = 1 while i < n: n -= 1 return r r *= i i += 1 Für eine präzise mathematische Laufzeitanalyse benötigen wir ein Rechenmodell, das definiert Welche Operationen zulässig sind. Welche Datentypen es gibt. Wie Daten gespeichert werden. Wie viel Zeit Operationen auf bestimmten Daten benötigen. Formal ist ein solches Rechenmodell gegeben durch die Random Accsess Maschine (RAM). RAMs sind Idealisierung von 1-Prozessorrechner mit einfachem aber unbegrenzt großem Speicher. G. Zachmann Informatik 1 - WS 05/06 Komplexität 9 G. Zachmann Informatik 1 - WS 05/06 Komplexität 10 Basisoperationen und deren Kosten Beispiele Definition : Als Basisoperationen bezeichnen wir Arithmetische Operationen Addition, Multiplikation,Division, Ab-, Aufrunden, auf Zahlen fester Länger (z.b 64 Bit = Double); Datenverwaltung Laden, Speichern, Kopieren von Datensätzen fester Größe; Kontrolloperationen Verzweigungen, Sprünge, Funktionsaufruf. Kosten: Zur Vereinfachung nehmen wir an, daß jede dieser Operationen bei allen Operanden gleich viel Zeit benötigt (im Einheitskostenmaß) Überwiegend unabhängig von der verwendeten Programmiersprache Ablesbar aus Pseudocode oder Programmstück Exakte Definition ist nicht bedeutend einen Ausdruck auswerten einer Variablen einen Wert zuweisen Indizierung in einem Array Aufrufen einer Methode / Funktion mit Parametern Verlassen einer Methode / Funktion G. Zachmann Informatik 1 - WS 05/06 Komplexität 11 G. Zachmann Informatik 1 - WS 05/06 Komplexität 12 3

Beispiel für Wachstum von Funktionen Funktionenklassen Ziel: Konstante Summanden und Faktoren dürfen bei der Aufwandsbestimmung vernachlässigt werden. Gründe: Man ist an asymptotischem Verhalten für große Eingaben interessiert Genaue Analyse kann technisch oft sehr aufwendig oder unmöglich sein Lineare Beschleunigungen sind ohnehin immer möglich (schnellere Hardware) Idee: Komplexitätsmessungen mit Hilfe von Funktionenklassen. Etwa O(f) sind die Funktionen, die (höchstens) in der Größenordnung von f sind. Groß-O-Notation: Mit O-, Ω- und Θ-Notation sollen obere, untere bzw. genaue Schranken für das Wachstum von Funktionen beschrieben werden. G. Zachmann Informatik 1 - WS 05/06 Komplexität 13 G. Zachmann Informatik 1 - WS 05/06 Komplexität 14 "Groß-O" Veranschaulichung der O-Notation Sei Definition Groß-O: Die Ordnung von f (the order of f) ist die Menge Die Funktion f gehört zur Menge O(g), wenn es positive Konstante c, n 0 gibt, so daß f(n) ab n 0 unterhalb cg(n) liegt Definition Groß-Omega: die Menge Ω ist wie folgt definiert: c g(n) f(n) Definition Groß-Theta: Die exakte Ordnung Θ von f(n) ist definiert als: Terminologie: O, Ω, Θ, heißen manchmal auch Landau'sche Symbole n 0 n G. Zachmann Informatik 1 - WS 05/06 Komplexität 15 G. Zachmann Informatik 1 - WS 05/06 Komplexität 16 4

Veranschaulichung der Ω -Notation Veranschaulichung der Θ-Notation Die Funktion f gehört zur Menge O(g), wenn es positive Konstante c, n 0 gibt, so daß f(n) ab n 0 unterhalb cg(n) liegt f(n) g(n) Die Funktion f gehört zur Menge Θ(g), wenn es positive Konstante c 1, c 2, und n 0 gibt, so daß f(n) ab n 0 zwischen c 1 g(n) und c 2 g(n) "eingepackt" werden kann c 1 g(n) f(n) c 2 g(n) n 0 n n 0 n G. Zachmann Informatik 1 - WS 05/06 Komplexität 17 G. Zachmann Informatik 1 - WS 05/06 Komplexität 18 Bemerkungen zu den O-Notationen Beispiel Min-Search In manchen Quellen findet man leicht abweichende Definitionen, etwa Behauptung: unser Minimum-Search-Algo besitzt Laufzeit Θ(n). Für die relevantesten Funktionen f (etwa die monoton steigenden f nicht kongruent 0) sind diese Definitionen äquivalent. Schreibweise (leider) oft : Minimalität: Die angegebene Größenordnung muß nicht minimal gewählt sein Asymptotik: Wie groß n 0 ist bleibt unklar (kann sehr groß sein) Verborgene Konstanten : Die Konstanten c und n 0 haben für kleine n großen Einfluß. Erinnerung: Zum Beweis ist zu zeigen: def min(a): min = 1 for j in range (2, len(a)): if A[j] < A[min]: min = j 1. Es gibt ein c 2 und n 2, so daß die Laufzeit von Min Search bei allen Eingaben der Größe n n 2 immer höchstens c 2 n ist. (Groß O) 2. Es gibt ein c 1 und n 1, so daß für alle n n 1 eine Eingabe der Größe n existiert, bei der Min Search mindestens Laufzeit c 1 n besitzt. (Omega) G. Zachmann Informatik 1 - WS 05/06 Komplexität 19 G. Zachmann Informatik 1 - WS 05/06 Komplexität 20 5

Beispiele zu Funktionsklassen Der Groß-O-Kalkül Ist? Gesucht:, so daß Bed. erfüllt, also Zunächst ein paar einfache "Rechen"-Regeln: Wähle Ist? Gesucht: so daß Widerspruch! G. Zachmann Informatik 1 - WS 05/06 Komplexität 21 G. Zachmann Informatik 1 - WS 05/06 Komplexität 22 Additionsregel Lemma, Teil 1: Für beliebige Funktionen f und g gilt: Zu beweisen: nur das rechte "=" Zu beweisen: jede der beiden Mengen ist jeweils in der anderen Menge enhalten " ": Sei " ": Sei Also Abschätzung nach oben: Also ist Bedingung für mit denselben c, n 0 erfüllt Abschätzung nach oben: Mit Also ist gilt G. Zachmann Informatik 1 - WS 05/06 Komplexität 23 G. Zachmann Informatik 1 - WS 05/06 Komplexität 24 6

Multiplikationsregel Lemma, Teil 2: Für beliebige Funktionen f und g gilt: Lemma: Für beliebige Funktionen f und g gilt: Additionsregel findet Anwendung bei der Berechnung der Komplexität, wenn Programmteile hintereinander ausgeführt werden. Multiplikationsregel findet Anwendung bei der Berechnung der Komplexität, wenn Programmteile ineinander geschachtelt werden (Schleifen) G. Zachmann Informatik 1 - WS 05/06 Komplexität 25 G. Zachmann Informatik 1 - WS 05/06 Komplexität 26 Teilmengenbeziehungen Lemma: Es gelten die folgenden Aussagen: 1. 2. 3. Beweis von Teil 1: 1. 2. Also Zu zeigen: jedes Sei also. Per Def gilt Wähle Damit gilt Also und ist auch in Teil 2 & 3 : analog G. Zachmann Informatik 1 - WS 05/06 Komplexität 27 G. Zachmann Informatik 1 - WS 05/06 Komplexität 28 7

Transitivität von Groß O Einfache Beziehungen Lemma: Falls und, dann ist Lemma: Für alle gilt Beweis: Übung Beweis: Sei und Satz: Sei Dann gilt für 0 i m., wobei Insbesondere: Es seien p 1 und p 2 Polynome vom Grad d 1 bzw. d 2, wobei die Koeffizienten vor n d1 und n d2 positiv sind. Dann gilt: G. Zachmann Informatik 1 - WS 05/06 Komplexität 29 G. Zachmann Informatik 1 - WS 05/06 Komplexität 30 Für alle k, k fest, gilt: Für alle k > 0 und ε > 0 gilt: Für beliebige positive Zahlen a, b 1 gilt: Bemerkung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen Beweis: Es gibt positive Funktionen f und g so, daß Wähle zum Beispiel und auch. und Insbesondere: Beweis: Übungsaufgabe. (Gleichzeitig ein Beleg, daß die Analysis- Vorlesung Anwendung hat.) Definition "polynomielle Zeit" : wir sagen, ein Algorithmus A mit Komplexität f(n) braucht höchstens polynomielle Rechenzeit (polynomial time), falls es ein Polynom P(n) gibt, so daß. A braucht höchstens exponentielle Rechenzeit (exponential time), falls es eine Konstante gibt, so daß. G. Zachmann Informatik 1 - WS 05/06 Komplexität 31 G. Zachmann Informatik 1 - WS 05/06 Komplexität 32 8

Beweishilfe Wie überprüft man diesen Limes? Lemma: Es gilt: Insbesondere hat man dann in Fall (1): G. Zachmann Informatik 1 - WS 05/06 Komplexität 33 G. Zachmann Informatik 1 - WS 05/06 Komplexität 34 Hierarchie von Größenordnungen Skalierbarkeiten Größenordnung O(1) O(log n) O(log 2 n) O(n) O(n log n) O(n 2 ) O(n 3 ) f heißt polynomiell beschränkt, wenn es ein Polynom p mit Name konstante Funktionen logarithmische Funktionen quadratisch logarithmische Funktionen lineare Funktionen n log n - wachsende Funktionen quadratische Funktionen kubische Funktionen polynomielle Funktionen O(n k ) (k konstant) gibt. f wächst exponentiell, wenn es ein gibt mit. Annahme: 1 Rechenschritt 0.001 Sekunden Maximale Eingabelänge bei gegebener Rechenzeit: Laufzeit T(n) 1 Sekunde 1 Minute 1 Stunde n n logn n 2 n 3 1000 140 31 10 2 n 9 60000 3600000 204094 Annahme: Wir können einen 10-fach schnelleren Rechner verwenden Statt eines Problems der Größe p kann in gleicher Zeit dann berechnet werden: Laufzeit T(n) n n logn n 2 n 3 2 n 4895 244 39 15 neue Problemgröße 10p fast -10p 3.16p 2.15p 3.32 + p " 10 1897 153 21 ln( p ) LambertW (10 p ln( p )) p " 10p 3 " 10p " log10 + p G. Zachmann Informatik 1 - WS 05/06 Komplexität 35 G. Zachmann Informatik 1 - WS 05/06 Komplexität 36 9

Allg. Bestimmung des Zeitaufwands mit Groß-O Beispiele zur Laufzeitabschätzung Sei A ein Programmstück, dann ist Zeitaufwand T(A) im Fall: A ist einfache Anweisung oder arithm./log. Ausdruck A ist Folge von Anweisungen Additionsregel anwenden A ist if-anweisung (a) if cond: B T(A) = T(cond) + T(B) (b) if cond: B else: C T(A) = T(cond) + max(t(b), T(C)) A ist eine Schleife (while, for, ) Problem: prefixaverages1(x) Eingabe: Ein Array X von n Zahlen Ausgabe: Ein Array A von Zahlen, so daß gilt: A[i] ist das arithmetische Mittel der Zahlen X[0],, X[i] Algorithmus : for i in range(0,n): a = 0 O(1) for j in range(0,i+1): a += X[j] O(1) A[i] = a / (i + 1) return A O(1) i O(1) = O(i) O(n), da i n O(1)+O(1)+O(n) = O(n+2) = O(n) n O(n) = O(n 2 ) A ist Rekursion später G. Zachmann Informatik 1 - WS 05/06 Komplexität 37 G. Zachmann Informatik 1 - WS 05/06 Komplexität 38 Exkurs Average-Case-Komplexität Das eben gestellte Problem kann man auch effizienter lösen Algorithmus prefixaverages2(x) s = 0.0 for i in range(0,n): s += X[i] A[i] = s / (i + 1) return A O(1) n O(1) = O(n) Nicht leicht zu handhaben, für die Praxis jedoch relevant Sei p n (x) Wahrscheinlichkeitsverteilung, mit der Eingabe x mit Länge n auftritt Mittlere (erwartete) Laufzeit: Wichtig: Worüber wird gemittelt? Sind alle Eingaben der Länge n gleichwahrscheinlich? Oft: Annahme der Gleichverteilung aller Eingaben x der Länge n Dann ist p n (x) 1/N, N = Anzahl aller mögl. Eingaben der Länge n G. Zachmann Informatik 1 - WS 05/06 Komplexität 39 G. Zachmann Informatik 1 - WS 05/06 Komplexität 40 10

Beispiel Taktzahl (Anzahl Bitwechsel) eines seriellen Addierers bei Addition von 1 zu einer in Binärdarstellung gegebenen Zahl i der Länge n, d.h. 0 i 2 n-1. Sie beträgt 1 plus der Anzahl der Einsen am Ende der Binärdarstellung von i. Worst Case: n + 1 Takte Beispiel: Addition von 1 zu 111... 1. Average Case: Wir nehmen eine Gleichverteilung auf der Eingabemenge an. Es gibt 2 n-k Eingaben der Form (x,..., x, 0, 1,, 1) wobei k-1 Einsen am Ende stehen. Hinzu kommt die Eingabe i = 2 n -1, für die das Addierwerk n+1 Takte benötigt. Die average-case Rechenzeit Es ist beträgt also: G. Zachmann Informatik 1 - WS 05/06 Komplexität 41 G. Zachmann Informatik 1 - WS 05/06 Komplexität 42 Demnach ist Es genügen also im Durchschnitt 2 Takte, um eine Addition von 1 durchzuführen. G. Zachmann Informatik 1 - WS 05/06 Komplexität 43 11