Informatik II. Vorlesung am D-BAUG der ETH Zürich. Felix Friedrich & Hermann Lehner FS 2018

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

Komplexität von Algorithmen

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Algorithmen und Datenstrukturen (für ET/IT)

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

Programmiertechnik II

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

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

Prof. Dr. Margarita Esponda

Laufzeit und Komplexität

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

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

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Informatik I Komplexität von Algorithmen

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

4 Effizienz und Komplexität 3.1 1

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

Algorithmen und Datenstrukturen Laufzeitabschätzung

Sortierverfahren für Felder (Listen)

Abschnitt: Algorithmendesign und Laufzeitanalyse

Klausur Datenstrukturen und Algorithmen SoSe 2012

Datenstrukturen und Algorithmen

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

Kombinatorik: Abzählverfahren (Teschl/Teschl 7) Summenregel. Allgemeiner

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Einführung in die Informatik 2

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Einführung in die Informatik 1

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

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

14. Rot-Schwarz-Bäume

Projekt Systementwicklung

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

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

Algorithmen & Datenstrukturen 1. Klausur

Abstrakte Algorithmen und Sprachkonzepte

Einstieg in die Informatik mit Java

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

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

Grundlagen der Informatik Algorithmen und Komplexität

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

Viel Spaÿ! Aufgabe 0.1. Laufzeit unter Verdoppelung (-)

13. Binäre Suchbäume

Grundlagen der Programmierung

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg

Rechnerische Komplexität

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

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Bäume, Suchbäume und Hash-Tabellen

Datenstrukturen & Algorithmen

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

SOI Die Schweizer Informatikolympiade

16. All Pairs Shortest Path (ASPS)

Grundlagen der Informatik I (Studiengang Medieninformatik)

Numerische Verfahren und Grundlagen der Analysis

Einführung in die Informatik 1

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/48

Algorithmentheorie Randomisierung. Robert Elsässer

Ü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:

MATHEMATISCHE ANALYSE VON ALGORITHMEN

Grundlagen: Algorithmen und Datenstrukturen

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

Algorithmen II Vorlesung am

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Probeklausur: Programmierung WS04/05

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Informatik II, SS 2014

Programmiertechnik II

Informatik I 4. Kapitel Suchen in sequentiellen Listen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Algorithmen und Datenstrukturen Kapitel 10

8 Diskrete Optimierung

Übung zur Vorlesung Berechenbarkeit und Komplexität

SEP 325. Notwendigkeit. häufige Situation: Programm funktioniert im Prinzip fehlerfrei, aber nicht mit gewünschter Performanz

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

4 Greedy-Algorithmen (gierige Algorithmen)

Algorithmen und Datenstrukturen 1 VL Übungstest WS 2010/ November 2010

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

2. Musterlösung. Problem 1: Least Common Ancestor

Graphen: Datenstrukturen und Algorithmen

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Grundlagen der Informatik 2 (GdI2) - Algorithmen und Datenstrukturen -

Customization (Zuschneiden)

12. September 2012 Kompexität. Analyse von Algorithmen (Ziele) Empirische Analyse Beispiel Schlussfolgerungen

JAVA - Suchen - Sortieren

Algorithmen und Datenstrukturen 2

Übungen zu Programmierung I - Blatt 8

Einführung in die Informatik

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

Teile und Herrsche Teil 2

SWP Prüfungsvorbereitung

Theoretische Informatik 1

Motivation. Formale Grundlagen der Informatik 1 Kapitel 10. Motivation. Motivation. Bisher haben wir mit TMs. Probleme gelöst/entschieden/berechnet.

Algorithmen und Datenstrukturen Suchbaum

Codierung, Codes (variabler Länge)

Transkript:

1 Informatik II Vorlesung am D-BAUG der ETH Zürich Felix Friedrich & Hermann Lehner FS 2018

23 1. Einführung Algorithmen und Datenstrukturen, erstes Beispiel

24 Ziele der Vorlesung Verständnis des Entwurfs und der Analyse grundlegender Algorithmen und Datenstrukturen. Grundlagen für das Design und die Implementation von Datenbanken.

25 Inhalte der Vorlesung Datenstrukturen / Algorithmen Begriff der Invariante, Kostenmodell, Landau Symbole Algorithmenentwurf, Induktion Suchen und Auswahl, Sortieren Wörterbücher: Hashing und Suchbäume, AVL Dynamic Programming Graphen, Kürzeste Wege, Backtracking, Maximaler Fluss Software Engineering Files and Exceptions Java Streams API Datenbanken ER-Modell, Relationales Modell, SQL

26 1.1 Algorithmen [Cormen et al, Kap. 1;Ottman/Widmayer, Kap. 1.1]

Algorithmus 27 Algorithmus: wohldefinierte Berechnungsvorschrift, welche aus Eingabedaten (input) Ausgabedaten (output) berechnet.

Beispielproblem 28 Input : Eine Folge von n Zahlen (a 1, a 2,..., a n )

Beispielproblem 28 Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : Eine Permutation (a 1, a 2,..., a n) der Folge (a i ) 1 i n, so dass a 1 a 2 a n

Beispielproblem 28 Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : Eine Permutation (a 1, a 2,..., a n) der Folge (a i ) 1 i n, so dass a 1 a 2 a n Mögliche Eingaben (1, 7, 3), (15, 13, 12, 0.5), (1)...

Beispielproblem 28 Input : Eine Folge von n Zahlen (a 1, a 2,..., a n ) Output : Eine Permutation (a 1, a 2,..., a n) der Folge (a i ) 1 i n, so dass a 1 a 2 a n Mögliche Eingaben (1, 7, 3), (15, 13, 12, 0.5), (1)... Jedes Beispiel erzeugt eine Probleminstanz. Die Performanz (Geschwindigkeit) des Algorithmus hängt üblicherweise ab von der Probleminstanz. Es gibt oft gute und schlechte Instanzen.

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming Fabrikationspipeline: Topologische Sortierung

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming Fabrikationspipeline: Topologische Sortierung Autovervollständigung: Wörterbücher/Bäume

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming Fabrikationspipeline: Topologische Sortierung Autovervollständigung: Wörterbücher/Bäume Symboltabellen: Hash-Tabellen

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming Fabrikationspipeline: Topologische Sortierung Autovervollständigung: Wörterbücher/Bäume Symboltabellen: Hash-Tabellen Der Handlungsreisende: Dynamische Programmierung, Minimal aufspannender Baum, Simulated Annealing,

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming Fabrikationspipeline: Topologische Sortierung Autovervollständigung: Wörterbücher/Bäume Symboltabellen: Hash-Tabellen Der Handlungsreisende: Dynamische Programmierung, Minimal aufspannender Baum, Simulated Annealing, Zeichnen am Computer: Linien und Kreise Digitalisieren, Füllen von Polygonen

Beispiele für Probleme in der Algorithmik 29 Tabellen und Statistiken: Suchen, Auswählen und Sortieren Routenplanung: Kürzeste Wege Algorithmus, Heap Datenstruktur DNA Matching: Dynamic Programming Fabrikationspipeline: Topologische Sortierung Autovervollständigung: Wörterbücher/Bäume Symboltabellen: Hash-Tabellen Der Handlungsreisende: Dynamische Programmierung, Minimal aufspannender Baum, Simulated Annealing, Zeichnen am Computer: Linien und Kreise Digitalisieren, Füllen von Polygonen PageRank: (Markov-Chain) Monte Carlo...

30 Charakteristik Extrem grosse Anzahl potentieller Lösungen Praktische Anwendung

31 Datenstrukturen Organisation der Daten, zugeschnitten auf die Algorithmen die auf den Daten operieren Programme = Algorithmen + Datenstrukturen.

32 Ein Traum Wären Rechner unendlich schnell und hätten unendlich viel Speicher...... dann bräuchten wir die Theorie der Algorithmen (nur) für Aussagen über Korrektheit (incl. Terminierung).

33 Die Realität Ressourcen sind beschränkt und nicht umsonst: Rechenzeit Effizienz Speicherplatz Effizienz

34 1.2 Altägyptische Multiplikation Altägyptische Multiplikation

Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 9 11 2 Auch bekannt als Russiche Bauernmulltiplikation 35

Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 9 11 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Auch bekannt als Russiche Bauernmulltiplikation 35

Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 22 4 9 11 18 5 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Auch bekannt als Russiche Bauernmulltiplikation 35

Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 22 4 44 2 9 11 18 5 36 2 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Auch bekannt als Russiche Bauernmulltiplikation 35

35 Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 22 4 44 2 88 1 9 11 18 5 36 2 72 1 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Gerade Zahl rechts Zeile streichen. 2 Auch bekannt als Russiche Bauernmulltiplikation

35 Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 22 4 44 2 88 1 9 11 18 5 36 2 72 1 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Gerade Zahl rechts Zeile streichen. 2 Auch bekannt als Russiche Bauernmulltiplikation

35 Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 22 4 44 2 88 1 9 11 18 5 36 2 72 1 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Gerade Zahl rechts Zeile streichen. 3 Übrige Zeilen links addieren. 2 Auch bekannt als Russiche Bauernmulltiplikation

35 Altägyptische Multiplikation 2 Berechnung von 11 9 11 9 22 4 44 2 88 1 99 9 11 18 5 36 2 72 1 99 1 Links verdoppeln, rechts ganzzahlig halbieren. 2 Gerade Zahl rechts Zeile streichen. 3 Übrige Zeilen links addieren. 2 Auch bekannt als Russiche Bauernmulltiplikation

36 Vorteile Kurze Beschreibung, einfach zu verstehen. Effizient für Computer im Dualsystem: Verdoppeln = Left Shift, Halbieren = Right Shift Beispiel left shift 9 = 01001 2 10010 2 = 18 right shift 9 = 01001 2 00100 2 = 4

37 Fragen Funktioniert das immer? (z.b. für negative Zahlen) Wenn nicht, wann? Wie beweist man die Korrektheit? Besser als die "Schulmethode"? Was heisst "gut"? Lässt sich Güte anordnen? Wie schreibt man das Verfahren unmissverständlich auf?

Beobachtung 38 Wenn b > 1, a Z, dann: { 2a b a b = 2 falls b gerade, a + 2a b 1 2 falls b ungerade.

Terminierung 39 a falls b = 1, a b = 2a b 2 falls b gerade, a + 2a b 1 2 falls b ungerade.

Rekursiv funktional notiert 40 a falls b = 1, f(a, b) = f(2a, b 2 ) falls b gerade, a + f(2a, b 1 2 ) falls b ungerade.

Funktion programmiert 41 // pre: b>0 // post: return a b int f(int a, int b){ if(b==1) return a; else if (b%2 == 0) return f(2 a, b/2); else return a + f(2 a, (b 1)/2); }

Korrektheit 42 a falls b = 1, f(a, b) = f(2a, b 2 ) falls b gerade, a + f(2a b 1 2 ) falls b ungerade. Zu zeigen: f(a, b) = a b für a Z, b N +.

Beweis per Induktion 43 Anfang: b = 1 f(a, b) = a = a 1. Hypothese: f(a, b ) = a b für 0 < b b Schritt: f(a, b + 1) =! a (b + 1) b {}}{ b + 1 f(2a, ) = a (b + 1) falls b ungerade, f(a, b + 1) = 2 b a + f(2a, ) = a + a b falls b gerade. }{{} 2 b

Rekursion vs. Iteration 44 // pre: b>0 // post: return a b int f(int a, int b){ if (b==1) return a; else if (b%2 == 0) return f(2 a, b/2); else return a + f(2 a, (b 1)/2); } // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; }

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b.

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res Wenn hier x = a b + res...

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res Wenn hier x = a b + res...... dann auch hier x = a b + res

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res Wenn hier x = a b + res...... dann auch hier x = a b + res b gerade

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res Wenn hier x = a b + res...... dann auch hier x = a b + res b gerade Hier gilt x = a b + res

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res Wenn hier x = a b + res...... dann auch hier x = a b + res b gerade Hier gilt x = a b + res Hier gilt x = a b + res und b = 0

45 Invarianten! // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res; } Sei x := a b. Hier gilt x = a b + res Wenn hier x = a b + res...... dann auch hier x = a b + res b gerade Hier gilt x = a b + res Hier gilt x = a b + res und b = 0 Also res = x.

Zusammenfassung Der Ausdruck a b + res ist eine Invariante. Werte von a, b, res ändern sich, aber die Invariante bleibt im Wesentlichen unverändert: Invariante vorübergehend durch eine Anweisung zerstört, aber dann darauf wieder hergestellt. Betrachtet man solche Aktionsfolgen als atomar, bleibt der Wert tatsächlich invariant Insbesondere erhält die Schleife die Invariante (Schleifeninvariante), wirkt dort wie der Induktionsschritt bei der vollständigen Induktion Invarianten sind offenbar mächtige Beweishilfsmittel! 46

Analyse 47 // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; } Altägyptische Multiplikation entspricht der Schulmethode zur Basis 2. 1 0 0 1 1 0 1 1

Analyse 47 // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; } Altägyptische Multiplikation entspricht der Schulmethode zur Basis 2. 1 0 0 1 1 0 1 1 1 0 0 1 (9)

Analyse 47 // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; } Altägyptische Multiplikation entspricht der Schulmethode zur Basis 2. 1 0 0 1 1 0 1 1 1 0 0 1 (9) 1 0 0 1 (18)

Analyse 47 // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; } Altägyptische Multiplikation entspricht der Schulmethode zur Basis 2. 1 0 0 1 1 0 1 1 1 0 0 1 (9) 1 0 0 1 (18) 1 1 0 1 1

Analyse 47 // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; } Altägyptische Multiplikation entspricht der Schulmethode zur Basis 2. 1 0 0 1 1 0 1 1 1 0 0 1 (9) 1 0 0 1 (18) 1 1 0 1 1 1 0 0 1 (72)

Analyse 47 // pre: b>0 // post: return a b int f(int a, int b) { int res = 0; while (b > 0) { if (b % 2!= 0){ res += a; b; } a = 2; b /= 2; } return res ; } Altägyptische Multiplikation entspricht der Schulmethode zur Basis 2. 1 0 0 1 1 0 1 1 1 0 0 1 (9) 1 0 0 1 (18) 1 1 0 1 1 1 0 0 1 (72) 1 1 0 0 0 1 1 (99)

Effizienz 48 Frage: Wie lange dauert eine Multiplikation von a und b? Mass für die Effizienz Gesamtzahl der elementaren Operationen: Verdoppeln, Halbieren, Test auf "gerade", Addition Im rekursiven wie im iterativen Code: maximal 6 Operationen pro Aufruf bzw. Durchlauf Wesentliches Kriterium: Anzahl rekursiver Aufrufe oder Anzahl Schleifendurchläufe(im iterativen Fall) b 2 n 1 gilt für n log 2 b. Also nicht mehr als 6 log 2 b elementare Operationen.

49 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]

50 Effizienz von Algorithmen Ziele Laufzeitverhalten eines Algorithmus maschinenunabhängig quantifizieren. Effizienz von Algorithmen vergleichen. Abhängigkeit von der Eingabegrösse verstehen.

Technologiemodell 51 Random Access Machine (RAM) Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt.

51 Technologiemodell Random Access Machine (RAM) Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt. Speichermodell: Konstante Zugriffszeit.

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

51 Technologiemodell 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.

51 Technologiemodell 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.

52 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.

53 2.2 Funktionenwachstum O, Θ, Ω [Cormen et al, Kap. 3; Ottman/Widmayer, Kap. 1.1]

Oberflächlich 54 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.

Genauer: Asymptotische obere Schranke 55 Gegeben: Funktion g : N R. 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).

Anschauung n 0 56 g(n) = n 2 f O(g)

Anschauung 56 g(n) = n 2 f O(g) h O(g)

Beispiele 57 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 2n n 2 + 100n n + n

Beispiele 57 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 n 2 + 100n n + n

Beispiele 57 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 n + n

Beispiele 57 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 ) n + n c = 2, n 0 = 100

Beispiele 57 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

Eigenschaft 58 f 1 O(g), f 2 O(g) f 1 + f 2 O(g)

Umkehrung: Asymptotische untere Schranke 59 Gegeben: Funktion g : N R. Definition: Ω(g) = {f : N R c > 0, n 0 N : 0 c g(n) f(n) n n 0 }

Beispiel 60 f Ω(g) g(n) = n n 0

Beispiel 60 h Ω(g) f Ω(g) g(n) = n n 0

Asymptotisch scharfe Schranke 61 Gegeben Funktion g : N R. Definition: Θ(g) := Ω(g) O(g). Einfache, geschlossene Form: Übung.

Beispiel 62 g(n) = n 2 f Θ(n 2 ) h(n) = 0.5 n 2

Wachstumsbezeichnungen 63 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

Kleine n 60 n 4 2 n 40 n 2 20 n ln n 2 3 4 5 6 64

Grössere n 65 1 0.8 0.6 10 6 2 n 0.4 0.2 5 10 15 20 n 4 n 2 log n

Grosse n 66 0.8 1 1020 2 n 0.6 0.4 0.2 n 4 n 2 20 40 60 80 100log n

Logarithmen! 67 1,000 n 2 800 600 400 200 n 3/2 n log n n log n 10 20 30 40 50

Beispiele 68

Beispiele 68 n O(n 2 )

Beispiele 68 n O(n 2 ) korrekt, aber ungenau:

Beispiele 68 n O(n 2 ) korrekt, aber ungenau: n O(n) und sogar n Θ(n).

Beispiele 68 n O(n 2 ) korrekt, aber ungenau: n O(n) und sogar n Θ(n).

Beispiele 68 n O(n 2 ) korrekt, aber ungenau: n O(n) und sogar n Θ(n). 3n 2 O(2n 2 )

Beispiele 68 n O(n 2 ) korrekt, aber ungenau: n O(n) und sogar n Θ(n). 3n 2 O(2n 2 ) korrekt, aber unüblich:

Beispiele 68 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 ).

Beispiele 68 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 ).

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

68 Beispiele 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:

68 Beispiele 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!

68 Beispiele 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!

68 Beispiele 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 O(n) O(n 2 ) = 2 c n n!

68 Beispiele 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 O(n) O(n 2 ) ist korrekt = 2 c n n!

68 Beispiele 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 O(n) O(n 2 ) ist korrekt = 2 c n n!

68 Beispiele 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 O(n) O(n 2 ) ist korrekt Θ(n) Θ(n 2 ) = 2 c n n!

68 Beispiele 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 O(n) O(n 2 ) ist korrekt Θ(n) Θ(n 2 ) ist falsch: = 2 c n n!

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

Nützliches 69 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).

70 Zur Notation Ü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.

71 Algorithmen, Programme und Laufzeit 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.