Informatik II, SS 2016

Ähnliche Dokumente
Informatik II, SS 2018

Informatik II, SS 2014

Informatik II, SS 2016

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen

Informatik II, SS 2018

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013 Vorlesung 3, Donnerstag 7.

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen 1 Kapitel 5

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

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

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

2. Effizienz von Algorithmen

Übung Algorithmen und Datenstrukturen

Informatik I Komplexität von Algorithmen

Asymptotik und Laufzeitanalyse

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

Komplexität von Algorithmen OOPM, Ralf Lämmel

Komplexität von Algorithmen:

Programmieren und Problemlösen

Die asymptotische Notation

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 2, Donnerstag 31.

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Übung Algorithmen und Datenstrukturen

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

Datenstrukturen und Algorithmen

Grundlagen: Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

3.2. Divide-and-Conquer-Methoden

Abschnitt 7: Komplexität von imperativen Programmen

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

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

Vorlesung Datenstrukturen

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

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

Grundlagen: Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen (SS 2013)

WS 2009/10. Diskrete Strukturen

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

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

Kap. 3: Sortieren. Überblick. Unser Sortierproblem. Motivation. Laufzeitmessung. Warum soll ich hier bleiben? Sortierverfahren sind WICHTIG!!!

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen (für ET/IT)

Kap. 3: Sortieren. 4. VO DAP2 SS April 2009

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

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

Algorithmen und Datenstrukturen Tutorium I

Kap. 3: Sortieren (3)

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

Prof. Dr. Margarita Esponda

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

Abschnitt 19: Sortierverfahren

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

Informatik I Komplexität von Algorithmen

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

Einführung in die Programmierung

Übersicht. Datenstrukturen und Algorithmen. Divide-and-Conquer. Übersicht. Vorlesung 9: Quicksort (K7)

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Datenstrukturen und Algorithmen (SS 2013)

Übung Algorithmen und Datenstrukturen

Notation für das asymptotische Verhalten von Funktionen

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

Klausur Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Grundlagen: Algorithmen und Datenstrukturen

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

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

Algorithmen und Datenstrukturen Kapitel 2: Korrektheit von Algorithmen und Laufzeitanalyse rekursiver Algorithmen (mittels Rekurrenzgleichungen)

Übersicht. Einfache Verfahren MergeSort Untere Schranke QuickSort Selektieren Schnelleres Sortieren Externes Sortieren. 6 Sortieren.

Formaler. Gegeben: Elementfolge s = e 1,...,e n. s ist Permutation von s e 1 e n für eine lineare Ordnung ` '

Übung Algorithmen I

Datenstrukturen, Algorithmen und Programmierung 2

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

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

Algorithmen und Datenstrukturen Kapitel 1 Algorithmen & Algorithmenanalyse

Algorithmen und Datenstrukturen

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

3.3 Laufzeit von Programmen

Algorithmen und Datenstrukturen

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

2 Wachstumsverhalten von Funktionen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Übungen zu Algorithmentechnik WS 09/10

Übung Algorithmen und Datenstrukturen

Informatik II, SS 2018

Datenstrukturen, Algorithmen und Programmierung 2

Grundlagen der Programmierung

. Die obige Beschreibung der Laufzeit für ein bestimmtes k können wir also erweitern und erhalten die folgende Gleichung für den mittleren Fall:

Klausur Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Kapitel 1 Algorithmen & Algorithmenanalyse

Transkript:

Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 3 (27.4.2014) O-Notation, Asymptotische Analyse, Sortieren III Algorithmen und Komplexität

Selection Sort Algorithmus SelectionSort (informell): 1. Finde kleinstes Element im Array, vertausche es an 1. Stelle 2. Finde kleinstes Element im Rest, vertausche es an 2. Stelle 3. Finde kleinstes Element im Rest, vertausche es an 3. Stelle 4.... SelectionSort(A): 1: for i=0 to n-2 do 2: // find min in A[i..n-1] 3: minidx = i 4: for j=i to n-1 do 5: if A[j] < A[minIdx] then 6: minidx = j 8: swap(a[i], A[minIdx]) 2

Divide and Conquer Übersicht QuickSort: Divide Divide and Conquer: Verbreitetes Prinzip für den Algorithmenentwurf 1. Teile Eingabe in 2 oder mehrere kleinere Teilprobleme 2. Löse die Teilprobleme rekursiv 3. Kombiniere die Teillösungen zur Gesamtlösung x Sort recursively (by using quicksort) 3

Übersicht MergeSort Divide Sort recursively (by using mergesort) Merge Divide ist bei MergeSort trivial Merge (kombinieren der Lösungen) benötigt dafür Arbeit... 4

Laufzeit Zeitmessung SelectionSort n 5

Laufzeit/n Zeitmessung SelectionSort n 6

Laufzeit/n 2 Zeitmessung SelectionSort n 7

Laufzeitanalyse I Wie können wir die Laufzeit des Algorithmus analysieren? Ist auf jedem Computer unterschiedlich Hängt vom Compiler, Programmiersprache, etc. Ab Wir benötigen ein abstraktes Mass, um die Laufzeit zu messen Idee: Zähle Anzahl (Grund-)Operationen Anstatt direkt die Zeit zu messen Ist unabhängig von Computer, Compiler Ein gutes Mass für die Laufzeit, falls alle Grundoperationen etwa gleich lange brauchen: 8

Grundoperation Was ist eine Grundoperation? Einfache arithmetische Operationen +, -, *, /, % (mod), Ein Speicherzugriff Variable auslesen, Variablenzuweisung Ist das wirklich eine Grundoperation? Ein Funktionsaufruf Natürlich nur das Springen in die Funktion Intuitiv: eine Zeile Programmcode Besser: eine Zeile Maschinencode Noch besser (?): ein Prozessorzyklus Wir werden sehen:es ist nur wichtig, dass die Anzahl Grundoperation ungefähr proportional zur Laufzeit ist. 9

RAM Modell RAM = Random Access Machine Standardmodell(e), um Algorithmen zu analysieren! Grundoperationen (wie definiert ) benötigen alle eine Zeiteinheit Insbesondere sind alle Speicherzugriffe gleich teuer: Jede Speicherzelle (1 Maschinenwort) kann in 1 Zeiteinheit gelesen, bzw. beschrieben werden ignoriert insbesondere Speicherhierarchien Ist aber in den meisten Fällen eine vernünftige Annahme Alternative abstrakte Modelle existieren: um Speicherhierarchien explizit abzubilden bei riesigen Datenmengen (vgl. «Buzzword» Big Data) z.b.: Streaming-Modelle: Speicher muss sequentiell gelesen werden für verteilte/parallele Architekturen Speicherzugriff kann lokal oder über s Netzwerk sein 10

Laufzeitanalyse II Bisher: Anzahl Grundoperationen ist proportional zur Laufzeit Das können wir auch erreichen, ohne die Anzahl Grundoperationen genau zu zählen! Vereinfachung 1: Wir berechnen nur eine obere Schranke (bzw. eine untere Schranke) an die Anzahl Grundoperationen So, dass die obere/untere Schranke immer noch proportional ist Anz. Grundop. kann von div. Eigenschaften der Eingabe abhängen Länge der Eingabe, aber auch z.b. bei Sortieren: zufällig, vorsortiert, Vereinfachung 2: Wichtigster Parameter ist Grösse der Eingabe n Wir betrachten daher die Laufzeit T(n) als Funktion von n. Und ignorieren weitere Eigenschaften der Eingabe 11

Selection Sort: Analyse SelectionSort(A): 1: for i=0 to n-2 do 2: minidx = i 3: for j=i to n-1 do 4: if A[j] < A[minIdx] then 5: minidx = j 6: swap(a[i], A[minIdx]) 12

Selection Sort: Analyse T(n): Anzahl Grundop. von Selection Sort bei Arrays der Länge n Lemma: Es gibt eine Konstante c U > 0, so dass T n c U n 2 Lemma: Es gibt eine Konstante c L > 0, so dass T n c L n 2 13

Laufzeitanalyse Zusammenfassung Wir können nur eine Grösse berechnen, welche proportional zur Laufzeit ist Wir wollen auch gar nichts anderes berechnen: Analyse sollte unabhängig von Computer / Compiler / etc. sein Wir wollen Aussagen, welche auch in 10/100/ Jahren noch Gültigkeit haben Wir werden immer Aussagen der folgenden Art haben: Es gibt eine Konstante C, so dass T n C f n oder T n C f(n) Um dies zu vereinfachen / verallgemeinern gibt s die O-Notation 14

Landau-Symbole ( O-Notation ) Formalismus, um das asymptotische Wachstum von Funktionen zu beschreiben. Formale Definitionen: siehe nächste Folie Es gibt eine Konst. C, so dass T n C f(n) wird zu: T n O(f n ) Es gibt eine Konst. C, so dass T n C g(n) wird zu: T n Ω(g n ) Bei Selection Sort: 15

Landau-Symbole : Definitionen O g n f n c, n 0 > 0 n n 0 f n c g(n) Funktion f n O(g n ), falls es Konstanten c und n 0 gibt, so dass f n c g(n) für alle n n 0 Ω g n f n c, n 0 > 0 n n 0 f n c g(n) Funktion f n Ω(g n ), falls es Konstanten c und n 0 gibt, so dass f n c g(n) für alle n n 0 Θ g n O g n Ω g n Funktion f n Θ(g n ), falls es Konstanten c 1, c 2 und n 0 gibt, so dass c 1 g n f n c 2 g(n) für alle n n 0, resp. falls f n O(n) und f n Ω(n) 16

Landau-Symbole : Definitionen o g n f n c > 0 n 0 > 0 n n 0 f n c g(n) Funktion f n o(g n ), falls für alle Konstanten c > 0 gilt, dass f n c g(n) (für genug grosse n, abhängig von c) ω g n f n c > 0 n 0 > 0 n n 0 f n c g(n) Funktion f n ω(g n ), falls für alle Konstanten c > 0 gilt, dass f n c g(n) (für genug grosse n, abhängig von c) Insbesondere gilt: f n o g n f n O g n f n ω g n f n Ω g n 17

Landau-Symbole : Intuitiv f n O g n : f n " " g(n), asymptotisch gesehen f(n) wächst asymptotisch nicht schneller als g(n) f n Ω g n : f n " " g(n), asymptotisch gesehen f(n) wächst asymptotisch mindestens so schnell, wie g(n) f n Θ g n : f n " = " g(n), asymptotisch gesehen f(n) wächst asymptotisch gleich schnell, wie g(n) 18

Landau-Symbole : Intuitiv f n o g n : f n " < " g(n), asymptotisch gesehen f(n) wächst asymptotisch langsamer als g(n) f n ω g n : f n " > " g(n), asymptotisch gesehen f(n) wächst asymptotisch schneller als g(n) Falls f(n) und g(n) monoton wachsen, gilt: f n o g n f n Ω g n f n ω g n f n O g n 19

Definition über Grenzwerte (vereinfacht) Folgende Definitionen gelten für monoton wachsende Funktionen f n f n O g n, lim n g n < f n f n Ω g n, lim n g n > 0 f n f n Θ g n, 0 < lim n g n < f n f n o g n, lim n g n = 0 f n f n ω g n, lim n g n = 20

Landau-Notation : Bemerkungen Schreibweise: O g n, Ω g n, sind Mengen (von Funktionen) Korrekte Schreibweise ist deshalb eigentlich: f n O g n Sehr verbreitete Schreibweise: f n = O g n Asymptotisches Verhalten für allgemeine Grenzwerte: gleiche Schreibweise auch für Verhalten von z.b. f(x) für x 0 z.b. Taylor-Reihen: e x = 1 + x + O(x 2 ), bzw. e x = 1 + x + o x Alternative Definition für Ω g n : Ω g n f n c, n 0 > 0 n n 0 f n c g(n) Ω g n f n c > 0 n 0 > 0 n n 0 f n c g(n) Wir verwenden die 1. Definition Macht nur bei nicht-monotonen Funktionen einen Unterschied 21

Landau-Notation : Beispiele Selection Sort: Laufzeit T n, es gibt Konstanten c 1, c 2 : c 1 n 2 T n c 2 n 2 T n O n 2, T n Ω n 2, T n Θ n 2 T(n) wächst schneller als linear: T n ω(n) Weitere Beispiele: f n = 10n 3, g n = Τ n 3 1000 : f n = e x, g n = n 100 : f n = nτlog 2 n, g n = n : f n = n 1Τ256, g n = 10 ln n : f n = log 10 n, g n = log 2 n : f n = n n, g n = 2 n : 22

Analyse Bubble Sort BubbleSort(A): 1: for i=0 to n-2 do // need to repeat n-1 times 3: for j=0 to n-2-i do 4: if (A[j] > A[j+1]) then 5: swap(a[j], A[j+1]) 23

Analyse Insertion Sort InsertionSort(A): 1: for i = 1 to n-1 do 2: // prefix A[1..i] is already sorted 3: pos = i 4: while (pos > 0) and (A[pos] < A[pos-1]) do 5: swap(a[pos], A[pos 1]) 6: pos = pos - 1 24

Worst case, best case, average case Worst Case Analyse Analysiere Laufzeit T(n) für eine schlechtestmögliche Eingabe der Grösse n Wichtigste / Standard- Art der Algorithmenanlyse Best Case Analyse Analysiere Laufzeit T(n) für eine bestmögl. Eingabe der Grösse n Meistens uninteressant Average Case Analyse Analysiere Laufzeit T(n) für eine typische Eingabe der Grösse n Problem: was ist eine typische Eingabe? Standardansatz: zufällige Eingabe nicht klar, wie nahe tatsächliche Instanzen bei uniform zufälligen sind eine mögl. Alternative: smoothed analysis (werden wir nicht anschauen) 25

Wie gut ist quadratische Laufzeit? Quadratisch = 2x so grosse Eingabe 4x so grosse Laufzeit das wächst für grosse n schon ziemlich schnell Beispielrechnung: Nehmen wir an, Anz. Grundop. T n = n 2 Nehmen wir zudem an, 1 Grundop. pro Rechnerzyklus Bei einem 1Ghz-Rechner gibt das 1 ns pro Grundop. Eingabegrösse n 4 Bytes pro Zahl Laufzeit T(n) 10 3 Zahlen 4KB 10 3 2 10 9 s = 1 ms 10 6 Zahlen 4MB 10 6 2 10 9 s = 16.7 min 10 9 Zahlen 4GB 10 9 2 10 9 s = 31.7 Jahre für grosse Probleme zu langsam! 26

Analyse Merge Sort Divide Sort recursively (by using mergesort) Merge Divide ist trivial Kosten: O(1) Rekursives Sortieren: Werden wir gleich noch anschauen... Merge: Das werden wir uns zuerst anschauen... 27

Analyse Merge-Schritt MergeSortRecursive(A, start, end, tmp) 5: pos = start; i = start; j = middle 6: while (pos < end) do 7: if (i < middle) and (A[i] < A[j]) then 8: tmp[pos] = A[i]; pos++; i++ 9: else 10: tmp[pos] = A[j]; pos++; j++ 11: for i = start to end-1 do A[i] = tmp[i] // sort A[start..end-1] 28

Analyse Merge Sort Laufzeit T(n) setzt sich zusammen aus: Divide und Merge: O n 2 rekursive Aufrufe zum Sortieren von Τ n 2 und Τ n 2 Elementen Rekursive Formulierung von T(n): Es gibt eine Konstante b > 0, so dass T n T n 2 + T n 2 + b n, T 1 b Wir machen uns das Leben ein bisschen einfacher und ignorieren das Auf- und Abrunden: T n 2 T n 2 + b n, T 1 b 29