Algorithmen & Komplexität

Ähnliche Dokumente
Algorithmen & Komplexität

Algorithmen und Datenstrukturen. Organisatorisches. Christian Komusiewicz Ernst-Abbe-Platz 2, R3315

Algorithmen und Komplexität, Teil II: Berechenbarkeit und Komplexität

Berechenbarkeit und Komplexität

Vorlesung Datenstrukturen

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

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

Zeitkomplexität (1) Proseminar Theoretische Informatik. Proseminar Theoretische Informatik: Lisa Dohrmann 1

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Tutorium I

Algorithmen & Komplexität

Grundlagen der Programmierung (Vorlesung 24)

Informatik II, SS 2014

Algorithmen und Datenstrukturen

Kapitel 3: Sortierverfahren Gliederung

Algorithmen & Komplexität

3.3 Laufzeit von Programmen

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

Rautavistische Algorithmen + Datenstrukturen, Berechenbarkeit, Komplexitätstheorie

Übung zur Vorlesung Berechenbarkeit und Komplexität

Theoretische Informatik 1

Algorithmen und Datenstrukturen

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Kapitel 1 Einleitung. Definition: Algorithmus nach M. Broy: aus: Informatik: Eine grundlegende Einführung, Band 1, Springer-Verlag, Berlin

Grundlagen: Algorithmen und Datenstrukturen

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

Stabilitätsabschätzungen Vorlesung vom

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Datenstrukturen, Algorithmen und Programmierung 2

Informatik II, SS 2016

Berechenbarkeit und Komplexität Vorlesung 11

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Informatik II, SS 2014

Programmieren und Problemlösen

Informatik II, SS 2018

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Theoretische Informatik 1

Auswählen nach Rang (Selektion)

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Kapitel 2: Sortier- und Selektionsverfahren Gliederung

Informatik I Komplexität von Algorithmen

Übung Algorithmen und Datenstrukturen

Karlsruher Institut für Technologie. Klausur Algorithmen I

Quicksort ist ein Divide-and-Conquer-Verfahren.

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Sommersemester Dr. Tobias Lasser. 1 Organisation

Algorithmen und Datenstrukturen (für ET/IT)

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Algorithmen und Datenstrukturen 1 Kapitel 5

Algorithmen I - Tutorium 28 Nr. 3

Einführung in die Informatik I

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

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

Informatik I. Informatik I Was haben wir gelernt? 28.2 Algorithmusbegriff Was geht nicht? 28.1 Was haben wir gelernt?

Datenstrukturen und Algorithmen

Komplexität von Algorithmen

Theoretische Informatik

Modul Algorithmik, T-Katalog

Algorithmen & Komplexität

Algorithmen und Berechnungskomplexität I

Algorithmische Mathematik I

1936 von Alan Turing zum theoretischen Studium der Berechenbarkeit eingeführt Besteht aus

3. RAM als Rechnermodell

Algorithmen und Datenstrukturen (für ET/IT)

Technische Universität München SoSe 2018 Fakultät für Informatik, I Mai 2018 Dr. Stefanie Demirci

Algorithmen und Datenstrukturen Übung #4 BFS/DFS, Wachstum von Funktionen

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Personen. Termine. Vorlesung. Sommersemester Dr. Tobias Lasser

Grundlagen: Algorithmen und Datenstrukturen

1 Algorithmische Grundlagen

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

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

DAP2 Probeklausur. Matrikelnummer Vorname Nachname. Datum: 24. Juli C. Sohler A. Krivo²ija, A. Rey, H. Sandvoÿ

Heapsort. Ziel: Sortieren Feld A[1..n]von nschlüsseln in O(n log n)worst case Zeit(so wie Mergesort), aber ohne Zusatzspeicher(so wie Quicksort).

1 Einführung: Algorithmen. Algorithmen und Datenstrukturen WS 2012/13. Pro f. Dr. Sán do r Fe k e te

Lösungen zur 1. Klausur. Einführung in Berechenbarkeit, formale Sprachen und Komplexitätstheorie

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

Informatik I: Einführung in die Programmierung

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Logik und diskrete Strukturen

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

4. Sortieren 4.1 Vorbemerkungen

Einführung in die Programmierung

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Personen. Termine. Vorlesung. Sommersemester Dr. Tobias Lasser

Algorithmen und Datenstrukturen

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Wintersemester 2012/13. Dr. Tobias Lasser. 1 Organisation

Theoretische Informatik 1

Übung Algorithmen und Datenstrukturen

Informatikgrundlagen (WS 2016/2017)

Transkript:

Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik

Was ist ein Algorithmus? Ein Algorithmus ist eine eindeutige Handlungsvorschrift, [bestehend] aus endlich vielen, wohldefinierten (Wikipedia) Einzelschritten.

Algorithmen Beispiele Kräuter-Omelette Eier aufschlagen und mit Salz und Pfeffer würzen. 50 Gramm in Stückchen geschnittene kalte Butter und Kräuter zufügen. Solange verquirlen, bis sich Eiweiß und Eigelb verbunden haben. Restliche Butter in einer Pfanne erhitzen, sobald sie schäumt, Eimasse zugeben und stocken lassen. Omelette zusammenklappen und sofort servieren.

Algorithmen Beispiele

Algorithmen der Vorlesung Algorithmen zur Lösung von Problem auf Computern

Algorithmen Beispiele Grösster gemeinsamer Teiler ggt(n,m) if n < m then swap(n,m); if m n then return m else return ggt(m, n mod m); Beispiel: ggt(102,66) = ggt(66,36) = ggt(36, 30) = ggt(30,6) = 6; Probe: 102= 2*3*17; 66=2*3*11;

Was bedeutet Komplexität?

Komplexitätsbegriff der Vorlesung Berechenbarkeitstheorie: Eine Funktion heisst berechenbar, wenn mittels einer abstrakten und/oder mechanischen Vorgehensweise zu gegebenen Eingaben ihre Ausgabe bestimmt werden kann. Komplexitätstheorie: Stellt zusätzlich die Frage nach der Effizienz der Berechnung.

Algorithmen & Komplexität ca. 300 v. Chr: Euklids Algorithmus ca. 800 n. Chr: Der persische Mathematiker alchoresmi veröffentlicht eine Aufgabensammlung für Kaufleute, die später als Liber Algorithmi erscheint Algorithmus: Kunstwort aus alchoresmi und arithmos (griech. Zahl) 1936: Alan Turing: erste formale Definition von Berechenbarkeit ( Turingmaschine ) Church sche These: Jedes intuitiv berechenbare Problem kann durch eine Turingmaschine gelöst werden.

Inhalt der Vorlesung 1. Einführung: Was ist ein Algorithmus? 2. Beispiele effizienter Algorithmen 3. Algorithmische Grundprinzipien 4. Effiziente Datenstrukturen 5. Komplexitätstheorie 6. Ausblick

Wieso ist die Vorlesung wichtig? Algorithmen sind wichtig für die Praxis Algorithmische Ideen und Beweisstrategien nehmen vermehrt Einzug in die Mathematik Algorithmische Beweise erfordern eine andere / neue Herangehensweise Theoretische Informatik und Mathematik haben eine immer grössere Schnittmenge (Geometrie, Kombinatorik, Algebra, )

Übungen, Testate, Klausur Übungsleitung: Ralph Keusch, Florian Meier Webseiten der Vorlesung: www.cadmo.ethz.ch/education/lectures/hs16/ac Übungsblätter: Ausgabe: dienstags über die Webseite der Vorlesung (ab heute!) Abgabe: in der folgenden Woche in der Pause der Vorlesung Testat: an der ETH probeweise für drei Jahre abgeschafft Empfehlung: - nutzen Sie die Möglichkeit für Feedback - geben Sie jede Woche die Übungen ab Klausur: innerhalb der Prüfungsperiode, Hilfsmittel: 10 handbeschriebene Blätter

Literatur Cormen, Leiserson, Rivest, Stein (Introduction to Algorithms) Kleinberg, Tardos (Algorithm Design) Ottmann, Widmayer (Algorithmen und Datenstrukturen) Arora, Barak (Computational Complexity) Skript: Abgabe in der Pause für CHF 10,00. (identisch zu letztem Jahr)

1. Was ist ein Algorithmus? Wie beschreibt man einen Algorithmus? Wie misst man die Laufzeit eines Algorithmus? Wie beweist man seine Korrektheit?

Beispiel Szenario: Gegeben: n=109 Zahlen a1,,an; Aufgabe: Sortiere sie! Alternative Formulierungen: - Schreibe ein Programm, das 109 Zahlen einliest und sie sortiert wieder ausgibt. - Entwerfe einen Algorithmus Sort(a,n), der die Elemente in einem Feld a[ ] der Länge n sortiert.

1. Ansatz: BubbleSort

BubbleSort: C++ Programm void bubble_sort (vector<int>& array) { int numsorted = 1; int n = int(array.size()); while (numsorted < n) { for (int i = numsorted; i > 0; --i) if (array[i] < array[i-1]) swap (array[i], array[i-1]); ++numsorted; } }

BubbleSort: intuitives Programm BubbleSort: for i=2 to n do for j = i downto 2 do if a[j] < a[j-1] then swap(a[j],a[j-1]);

MergeSort - Beispiel 2 7 14 15 18 21 24 32 7 14 18 21 14 21 7 18 2 15 24 32 2 32 15 24

Welcher Algorithmus ist besser? BubbleSort oder MergeSort

Welcher Algorithmus ist besser? Naheliegende Antwort: BubbleSort ist viel besser, denn er lässt sich viel einfacher implementieren! Aber: Das Implementieren lohnt sich nicht, denn der Algorithmus ist für unsere Zwecke völlig unbrauchbar!!

BubbleSort: Aufwandsabschätzung BubbleSort: Anzahl Vergleiche: n-1 mal Wie viele Vergleiche werden durchgeführt?.i-1 Vergl for i=2 to n do for j = i downto 2 do if a[j] < a[j-1] then swap(a[j],a[j-1]);

BubbleSort: Aufwandsabschätzung (2) Anzahl Vergleiche für n zu sortierende Elemente: Unser Szenario: n=109 Annahme: 104 MIPS Rechner Programm benötigt 1.5 Jahre Millionen Instruktionen pro Sekunde Sek.

MergeSort - Beispiel 2 7 14 15 18 21 24 32 14 21 7 18 2 15 24 32 2 32 n Vergleiche pro Zeile 15 24 log2 n Zeilen 7 14 18 21

MergeSort: Aufwandsabschätzung (2) Anzahl Vergleiche für n zu sortierende Elemente: Unser Szenario: n=109 Annahme: 104 MIPS Rechner Programm benötigt 3 Sek. Millionen Instruktionen pro Sekunde Sek.

Algorithmen Ziel der Vorlesung Lerne, gegeben ein Szenario/Aufgabenstellung, dafür einen passenden Algorithmus zu - entwickeln und zu - analysieren

Wie analysiert man einen Algorithmus? Ziele: Zeige, dass der Algorithmus korrekt ist. D.h., zeige dass er für alle (erlaubten) Eingaben das richtige Ergebnis liefert. Bestimme, die Laufzeit des Algorithmus. Wie?? Was für ein Rechner?? abstrakter Rechner: Random Access Machine Welche Eingaben?? z.b. Worst Case Analyse: zeige dass Alg. für alle Eingaben einer gegebenen Länge höchstens soundso lange läuft.

Das Rechenmodell: Was ist wichtig? 1. Wir haben einen Speicher auf den wir mit Operationen zugreifen können. 2. Eine gewisse, kleine Menge von Basis-Operationen. 3. Es ist möglich, das Rechenmodell formal zu definieren. Speicher M-3 M-2 M-1 M0 M1 M2 M3 2 8

Random Access Machine

RAM vs. heutiger Computer grösserer Befehlssatz Instruktionen werden geschickt verzahnt ausgeführt ( pipelining ) moderne Programmiersprachen bieten high level Zugang Aber: Modelle im Prinzip sehr ähnlich, Laufzeiten verhalten sich ähnlich

Was heisst ähnlich?? Vorlesung/Algorithmentheorie: Wir analysieren Laufzeit von Algorithmen nur bis auf einen konstanten Faktor genau.

Beispiel: BubbleSort BubbleSort: for i=2 to n do for j = i downto 2 do if a[j] < a[j-1] then swap(a[j],a[j-1]); Beobachtung: Laufzeit ist proportional zur Anzahl Vergleich. Wir zählen nur die Anzahl Vergleiche.

Notation Schreibweise für bis auf konstanten Faktor genau bzw. für proportional zu Gross-Oh-Notation

Landau-Symbole

Beispiel x2 x2-20*x+100*log(x) 5*x*log(x)

Beispiel x2 x2-20*x+100*log(x) 5*x*log(x)

Wie misst man die Laufzeit?? Anzahl arithmetischer Operationen bis auf einen konstanten Faktor genau aber für welche Eingabe?? Idee: Worst Case Analyse Beispiel: BubbleSort hat Laufzeit O(n2) MergeSort hat Laufzeit O(n log n)

Algorithmen-Klassifikation

Achtung: Man kann schummeln!! Berechnung von n! x := 1 for j = 1 to n do x = x * j; return(x) Anzahl Multiplikationen: n Länge der Ausgabe: log2(n!) n log2(n) Es ist unrealistisch, dass man in n Schritten n log2(n) Bits schreiben kann!!

Erklärung die Länge der Eingabe ist log2n die vom Algorithmus berechneten Zahlen sind aber (exponentiell) viel grösser In diesem Fall muss man statt der Anzahl arithmetischer Operationen die Anzahl Bit-Operationen zählen. Problem tritt in der Vorlesung nicht auf wir zählen Anzahl arithmetischer Operationen.

Graphenalgorithmen

Szenario Gegeben: Flugplan einer Airline Aufgabe: Schreibe ein Programm, das Anfragen der Form Kann man von A nach B mit höchstens einmal umsteigen gelangen? beantwortet.

Modellierung

Graph Ein Graph G ist ein Tupel (V,E), wobei V eine (endliche) nichtleere Menge von Knoten ist. Die Menge E ist eine Teilmenge der zweielementigen Teilmengen von V, also E { {x,y} : x,y V, x y}. Die Elemente der Menge E bezeichnet man als Kanten.

Einige spezielle Graphenklassen (I) Vollständiger Graph Kn #edges(kn) = n(n-1)/2 Kreis Cn #edges(cn) = n Pfad Pn #edges(pn) = n #vertices(p ) = K 5 C 6 P 4

Einige spezielle Graphenklassen (II) Vollständiger bipartiter Graph Kn,n K3, 3 Q Hyperwürfel Qd 3