2. Effizienz von Algorithmen

Ähnliche Dokumente
Übung Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen I Grundlagen

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

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

Programmiertechnik II

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

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1-1. Seminar -

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

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

Grundlagen: Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmik Kap. 2: Laufzeit von Algorithmen

Algorithmen und Datenstrukturen Kapitel 1 Algorithmen & Algorithmenanalyse

Notation für das asymptotische Verhalten von Funktionen

Grundlagen: Algorithmen und Datenstrukturen

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

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

Übung Algorithmen und Datenstrukturen

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

Effizienz von Algorithmen

Datenstrukturen und Algorithmen

Komplexität von Algorithmen

Algorithmen und Datenstrukturen

Komplexität von Algorithmen OOPM, Ralf Lämmel

3.3 Laufzeit von Programmen

Komplexität von Algorithmen:

Vorlesung Datenstrukturen

Algorithmik Übung 2 Prof. Dr. Heiner Klocke Winter 11/

Informatik I Komplexität von Algorithmen

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

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

4 Effizienz und Komplexität 3.1 1

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

WS 2009/10. Diskrete Strukturen

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

Datenstrukturen, Algorithmen und Programmierung 2

1 Minimumssuche k = n Maximumssuche n. Median

2 Wachstumsverhalten von Funktionen

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

Informatik I Komplexität von Algorithmen

Isomorphismus. Definition Gruppen-Isomorphismus. Seien (G, +) und (G, ) Gruppen. Die Abbildung f : G G heißt Gruppen-Isomorphismus, falls gilt

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

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Prof. Dr. Margarita Esponda

Divide & Conquer. Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Laufzeit und Komplexität

5. Übungsblatt zu Algorithmen I im SoSe 2016

16. All Pairs Shortest Path (ASPS)

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

Randomisierte Algorithmen 2. Erste Beispiele

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

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

Suchen und Sortieren

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

Schnelle Multiplikation

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Lösungsvorschlag Serie 2 Rekursion

Algorithmen und Datenstrukturen Heapsort

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

1. Asymptotische Notationen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. String Matching 5. Ausgewählte Datenstrukturen

8 Komplexitätstheorie

Numerische Verfahren und Grundlagen der Analysis

Einstieg in die Informatik mit Java

Übung Algorithmen I

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Datenstrukturen & Algorithmen

Algorithmentheorie Randomisierung. Robert Elsässer

Kostenmaße. F3 03/04 p.188/395

Uebersicht. Webpage & Ilias. Administratives. Lehrbuch. Vorkenntnisse. Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen Tutorium I

Vorlesung: Algorithmische Diskrete Mathematik

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

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

Übung zur Vorlesung Berechenbarkeit und Komplexität

Christoph Niederseer, Michaela Mayr, Alexander Aichinger, Fabian Küppers. Wissenschaftl. Arbeitstechniken und Präsentation

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

Algorithmen und Datenstrukturen

Kapitel 3. Konvergenz von Folgen und Reihen

Grundlagen: Algorithmen und Datenstrukturen

4. Sortieren 4.1 Vorbemerkungen

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11)

ADS: Algorithmen und Datenstrukturen

Kapitel 6 Elementare Sortieralgorithmen

1. Übung Algorithmen I

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

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

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

Transkript:

Effizienz von Algorithmen 2. Effizienz von Algorithmen Effizienz von Algorithmen, Random Access Machine Modell, Funktionenwachstum, Asymptotik [Cormen et al, Kap. 2.2,3,4.2-4.4 Ottman/Widmayer, Kap. 1.1] Ziele Laufzeitverhalten eines Algorithmus maschinenunabhängig quantifizieren. Effizienz von Algorithmen vergleichen. Abhängigkeit von der Eingabegrösse verstehen. 70 71 Technologiemodell Grösse der Eingabedaten Random Access Machine (RAM) Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt. Speichermodell: Konstante Zugriffszeit. Elementare Operationen: Rechenoperation (+,,,...), Vergleichsoperationen, Zuweisung / Kopieroperation, Flusskontrolle (Sprünge) Einheitskostenmodell: elementare Operation hat Kosten 1. Datentypen: Fundamentaltypen wie grössenbeschränkte Ganzzahl oder Fliesskommazahl. Typisch: Anzahl Eingabeobjekte (von fundamentalem Typ). Oftmals: Anzahl Bits für eine vernünftige / kostengünstige Repräsentation der Daten. 72 73

Asymptotisches Verhalten Genaue Laufzeit lässt sich selbst für kleine Eingabedaten kaum voraussagen. Betrachten das asymptotische Verhalten eines Algorithmus. Ignorieren alle konstanten Faktoren. Beispiel Eine Operation mit Kosten 20 ist genauso gut wie eine mit Kosten 1. Lineares Wachstum mit Steigung 5 ist genauso gut wie lineares Wachstum mit Steigung 1. 2.1 Funktionenwachstum O, Θ, Ω [Cormen et al, Kap. 3; Ottman/Widmayer, Kap. 1.1] 74 75 Oberflächlich Genauer: Asymptotische obere Schranke Gegeben: Funktion f : N R. Verwende die asymptotische Notation zur Kennzeichnung der Laufzeit von Algorithmen Wir schreiben Θ(n 2 ) und meinen, dass der Algorithmus sich für grosse n wie n 2 verhält: verdoppelt sich die Problemgrösse, so vervierfacht sich die Laufzeit. Definition: O(g) = {f : N R c > 0, n 0 N : 0 f(n) c g(n) n n 0 } Schreibweise: O(g(n)) := O(g( )) = O(g). 76 77

Anschauung Beispiele g(n) = n 2 f O(g) h O(g) O(g) = {f : N R c > 0, n 0 N : 0 f(n) c g(n) n n 0 } f(n) f O(?) Beispiel 3n + 4 O(n) c = 4, n 0 = 4 2n O(n) c = 2, n 0 = 0 n 2 + 100n O(n 2 ) c = 2, n 0 = 100 n + n O(n) c = 2, n 0 = 1 n 0 78 79 Eigenschaft Umkehrung: Asymptotische untere Schranke f 1 O(g), f 2 O(g) f 1 + f 2 O(g) Gegeben: Funktion f : N R. Definition: Ω(g) = {f : N R c > 0, n 0 N : 0 c g(n) f(n) n n 0 } 80 81

Beispiel Asymptotisch scharfe Schranke h Ω(g) f Ω(g) g(n) = n Gegeben Funktion f : N R. Definition: Θ(g) := Ω(g) O(g). Einfache, geschlossene Form: Übung. n 0 82 83 Beispiel Wachstumsbezeichnungen g(n) = n 2 f Θ(n 2 ) h(n) = 0.5 n 2 O(1) beschränkt Array-Zugriff O(log log n) doppelt logarithmisch Binäre sortierte Suche interpoliert O(log n) logarithmisch Binäre sortierte Suche O( n) wie die Wurzelfunktion Primzahltest (naiv) O(n) linear Unsortierte naive Suche O(n log n) superlinear / loglinear Gute Sortieralgorithmen O(n 2 ) quadratisch Einfache Sortieralgorithmen O(n c ) polynomial Matrixmultiplikation O(2 n ) exponentiell Travelling Salesman Dynamic Programming O(n!) faktoriell Travelling Salesman naiv 84 85

Kleine n Grössere n 60 n 4 2 n 1 10 6 2 n 0.8 40 n 2 0.6 20 n ln n 2 3 4 5 6 0.4 0.2 5 10 15 20 n 4 n 2 log n 86 87 Grosse n Logarithmen! 1 1020 0.8 2 n 1,000 800 n 2 0.6 600 0.4 0.2 n 4 n 2 20 40 60 80 100log n 400 200 n 3/2 n log n n log n 10 20 30 40 50 88 89

Zeitbedarf Annahme: 1 Operation = 1µs. Problemgrösse 1 100 10000 10 6 10 9 log 2 n 1µs 7µs 13µs 20µs 30µs n 1µs 100µs 1/100s 1s 17 Minuten n log 2 n 1µs 700µs 13/100µs 20s 8.5 Stunden n 2 1µs 1/100s 1.7 Minuten 11.5 Tage 317 Jahrhund. 2 n 1µs 10 14 Jahrh. Eine gute Strategie?... dann kaufe ich mir eben eine neue Maschine! Wenn ich heute ein Problem der Grösse n lösen kann, dann kann ich mit einer 10 oder 100 mal so schnellen Maschine... Komplexität (speed 10) (speed 100) log 2 n n n 10 n n 100 n n 10 n n 100 n n 2 n 3.16 n n 10 n 2 n n n + 3.32 n n + 6.64 90 91 Beispiele Nützliches n O(n 2 ) korrekt, aber ungenau: n O(n) und sogar n Θ(n). 3n 2 O(2n 2 ) korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ). 2n 2 O(n) ist falsch: 2n2 cn = 2 c n n! O(n) O(n 2 ) ist korrekt Θ(n) Θ(n 2 ) ist falsch: n Ω(n 2 ) Θ(n 2 ) Theorem Seien f, g : N R + zwei Funktionen. Dann gilt: f(n) 1 lim n g(n) f(n) 2 lim n g(n) 3 f(n) g(n) = 0 f O(g), O(f) O(g). = C > 0 (C konstant) f Θ(g). n g O(f), O(g) O(f). 92 93

Zur Notation Algorithmen, Programme und Laufzeit Übliche Schreibweise f = O(g) ist zu verstehen als f O(g). Es gilt nämlich f 1 = O(g), f 2 = O(g) f 1 = f 2! Beispiel n = O(n 2 ), n 2 = O(n 2 ) aber natürlich n n 2. Programm: Konkrete Implementation eines Algorithmus. Laufzeit des Programmes: messbarer Wert auf einer konkreten Maschine. Kann sowohl nach oben, wie auch nach unten abgeschätzt werden. Beispiel Rechner mit 3 GHz. Maximale Anzahl Operationen pro Taktzyklus (z.b. 8). untere Schranke. Einzelne Operation dauert mit Sicherheit nie länger als ein Tag obere Schranke. Asymptotisch gesehen stimmen die Schranken überein. 94 95 Komplexität Komplexität eines Problems P : minimale (asymptotische) Kosten über alle Algorithmen A, die P lösen. Komplexität der Elementarmultiplikation zweier Zahlen der Länge n ist Ω(n) und O(n log 3 2 ) (Karatsuba Ofman). Exemplarisch: Problem Komplexität O(n) O(n) O(n 2 ) Algorithmus Kosten 2 3n 4 O(n) Θ(n 2 ) Programm Laufzeit Θ(n) O(n) Θ(n 2 ) 3. Algorithmenentwurf Maximum Subarray Problem [Ottman/Widmayer, Kap. 1.3] Divide and Conquer [Ottman/Widmayer, Kap. 1.2.2. S.9; Cormen et al, Kap. 4-4.1] 2 Anzahl Elementaroperationen 96 97

Algorithmenentwurf Induktive Entwicklung eines Algorithmus: Zerlegung in Teilprobleme, Verwendung der Lösungen der Teilproblem zum Finden der endgültigen Lösung. Ziel: Entwicklung des asymptotisch effizientesten (korrekten) Algorithmus. Effizienz hinsichtlich der Laufzeitkosten (# Elementaroperationen) oder / und Speicherbedarf. Maximum Subarray Problem Gegeben: ein Array von n rationalen Zahlen (a 1,..., a n ). Gesucht: Teilstück [i, j], 1 i j n mit maximaler positiver Summe j k=i a k. Beispiel: a = (7, 11, 15, 110, 23, 3, 127, 12, 1) 100 50 0 1 2 3 4 5 6 7 8 9 k a k = max 98 99 Naiver Maximum Subarray Algorithmus Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : I, J mit J k=i a k maximal. M 0; I 1; J 0 for i {1,..., n} do for j {i,..., n} do m = j k=i a k if m > M then M m; I i; J j return I, J Analyse Theorem Der naive Algorithmus für das Maximum Subarray Problem führt Θ(n 3 ) Additionen durch. Beweis: i=1 (j i) = j=i = = 1 2 n i j = i=1 n 1 i=0 j=0 i (i + 1) 2 n i (n i)(n i + 1) j == 2 i=1 j=1 i=1 ( = 1 n 1 ) n 1 i 2 + i 2 i=0 ( Θ(n 3 ) + Θ(n 2 ) ) = Θ(n 3 ). i=0 100 101

Beobachtung Präfixsummen ( j j ) a k = a k k=i k=1 } {{ } S j S i := i a k. k=1 ( i 1 ) a k k=1 } {{ } S i 1 Maximum Subarray Algorithmus mit Präfixsummen Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : I, J mit J k=j a k maximal. S 0 0 for i {1,..., n} do // Präfixsumme S i S i 1 + a i M 0; I 1; J 0 for i {1,..., n} do for j {i,..., n} do m = S j S i 1 if m > M then M m; I i; J j 102 103 Analyse Theorem Der Präfixsummen Algorithmus für das Maximum Subarray Problem führt Θ(n 2 ) Additionen und Subtraktionen durch. Beweis: 1 + i=1 i=1 1 = n + j=i (n i + 1) = n + i=1 i = Θ(n 2 ) i=1 divide et impera Teile und (be)herrsche (engl. divide and conquer) Zerlege das Problem in Teilprobleme, deren Lösung zur vereinfachten Lösung des Gesamtproblems beitragen. Problem P P 22 P 2 P 21 S 22 S 21 S 2 Solution P 12 P 1 P 11 S 12 S 1 104 S 11 105

Maximum Subarray Divide Maximum Subarray Conquer Sind i, j die Indizes einer Lösung Fallunterscheidung: 1 Lösung in linker Hälfte 1 i j n/2 Rekursion (linke Hälfte) Divide: Teile das Problem in zwei (annähernd) gleiche Hälften auf: (a 1,..., a n ) = (a 1,..., a n/2, a n/2 +1,..., a 1 ) Vereinfachende Annahme: n = 2 k für ein k N. 2 Lösung in rechter Hälfte n/2 < i j n Rekursion (rechte Hälfte) 3 Lösung in der Mitte 1 i n/2 < j n Nachfolgende Beobachtung (1) (3) (2) 1 n/2 n/2 + 1 n 106 107 Maximum Subarray Beobachtung Annahme: Lösung in der Mitte 1 i n/2 < j n n/2 j j S max = a k = a k + max 1 i n/2 n/2<j n k=i n/2 = max 1 i n/2 k=i a k + max 1 i n/2 n/2<j n k=i j max a k n/2<j n k=n/2+1 = max S n/2 S i 1 + max 1 i n/2 }{{} S j S n/2 n/2<j n }{{} Suffixsumme Präfixsumme k=n/2+1 a k Maximum Subarray Divide and Conquer Algorithmus Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : Maximales j k=i a k. if n = 1 then return max{a 1, 0} else Unterteile a = (a 1,..., a n ) in A 1 = (a 1,..., a n/2 ) und A 2 = (a n/2+1,..., a n ) Berechne rekursiv beste Lösung W 1 in A 1 Berechne rekursiv beste Lösung W 2 in A 2 Berechne grösste Suffixsumme S in A 1 Berechne grösste Präfixsumme P in A 2 Setze W 3 S + P return max{w 1, W 2, W 3 } 108 109

Analyse Theorem Der Divide and Conquer Algorithmus für das Maximum Subarray Sum Problem führt Θ(n log n) viele Additionen und Vergleiche durch. Analyse Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : Maximales j k=i a k. if n = 1 then Θ(1) return max{a 1, 0} else Θ(1) Unterteile a = (a 1,..., a n ) in A 1 = (a 1,..., a n/2 ) und A 2 = (a n/2+1,..., a n ) T (n/2) Berechne rekursiv beste Lösung W 1 in A 1 T (n/2) Berechne rekursiv beste Lösung W 2 in A 2 Θ(n) Berechne grösste Suffixsumme S in A 1 Θ(n) Berechne grösste Präfixsumme P in A 2 Θ(1) Setze W 3 S + P Θ(1) return max{w 1, W 2, W 3 } 110 111 Analyse Analyse Rekursionsgleichung T (n) = { c falls n = 1 2T ( n 2 ) + a n falls n > 1 Mit n = 2 k : Lösung: T (k) = { c falls k = 0 2T (k 1) + a 2 k falls k > 0 k 1 T (k) = 2 k c + 2 i a 2 k i = c 2 k + a k 2 k = Θ(k 2 k ) i=0 112 also T (n) = Θ(n log n) 113

Maximum Subarray Sum Problem Induktiv Annahme: Maximaler Wert M i 1 der Subarraysumme für (a 1,..., a i 1 ) (1 < i n) bekannt. M i 1 R i 1 scan 1 i 1 i n a i : erzeugt höchstens Intervall am Rand (Präfixsumme). R i 1 R i = max{r i 1 + a i, 0} Induktiver Maximum Subarray Algorithmus Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ). Output : max{0, max j i,j k=i a k}. M 0 R 0 for i = 1... n do R R + a i if R < 0 then R 0 if R > M then M R return M; 114 115 Analyse Theorem Der induktive Algorithmus für das Maximum Subarray Sum Problem führt Θ(n) viele Additionen und Vergleiche durch. Komplexität des Problems? Geht es besser als Θ(n)? Jeder korrekte Algorithmus für das Maximum Subarray Sum Problem muss jedes Element im Algorithmus betrachten. Annahme: der Algorithmus betrachtet nicht a i. 1 Lösung des Algorithmus enthält a i. Wiederholen den Algorithmus mit genügend kleinem a i, so dass die Lösung den Punkt nicht enthalten hätte dürfen. 2 Lösung des Algorithmus enthält a i nicht. Wiederholen den Algorithmus mit genügend grossem a i, so dass die Lösung a i hätten enthalten müssen. 116 117

Komplexität des Maximum Subarray Sum Problems Theorem Das Maximum Subarray Sum Problem hat Komplexität Θ(n). Beweis: Induktiver Algorithmus mit asymptotischer Laufzeit O(n). Jeder Algorithmus hat Laufzeit Ω(n). Somit ist die Komplexität Ω(n) O(n) = Θ(n). 118