Einführung in die Programmierung

Ähnliche Dokumente
Komplexität von Algorithmen

Kapitel 1: Algorithmen und ihre Analyse

Komplexität von Algorithmen:

Asymptotik und Laufzeitanalyse

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

Prof. Dr. Margarita Esponda

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

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

3.3 Laufzeit von Programmen

Algorithmen und Datenstrukturen

Einführung in die Programmierung

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

Informatik I Komplexität von Algorithmen

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

Einführung in die Programmierung

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Informatik I Komplexität von Algorithmen

2. Hausübung Algorithmen und Datenstrukturen

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

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmik Kap. 2: Laufzeit von Algorithmen

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen 1 Kapitel 5

Übung Algorithmen und Datenstrukturen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Numerische Verfahren und Grundlagen der Analysis

Datenstrukturen, Algorithmen und Programmierung 2

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

2. Effizienz von Algorithmen

WS 2009/10. Diskrete Strukturen

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

Algorithmen und Datenstrukturen

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

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

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

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

Exponentiation: das Problem

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

Kapitel 1: Informationsverarbeitung durch Programme

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

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

Grundlagen der Programmierung

Grundlagen: Algorithmen und Datenstrukturen

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

Datenstrukturen & Algorithmen

Kapitel 3: Sortierverfahren Gliederung

Übung zur Vorlesung Berechenbarkeit und Komplexität

Prof. Dr. Margarita Esponda

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Stichpunktezettel fürs Tutorium

2 Wachstumsverhalten von Funktionen

Abschnitt 19: Sortierverfahren

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

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

Vorlesung 3: Graphenalgorithmen. Markus Püschel David Steurer Peter Widmayer. PDF download goo.gl/ym3spq

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

Algorithmen und Datenstrukturen

Einführung in die Programmierung WS 2009/10. Übungsblatt 5: Typen, Variablen und einfache Methoden in Java

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

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Informatik II. Woche 15, Giuseppe Accaputo

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

Laufzeit und Komplexität

Algorithmen und Datenstrukturen (für ET/IT)

Einführung in die Programmierung

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

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen:

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

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

Komplexität von Algorithmen

4. Sortieren 4.1 Vorbemerkungen

Informatik II. 1. Einführung. Ziele der Vorlesung. Inhalte der Vorlesung. Vorlesung am D-BAUG der ETH Zürich

4 Effizienz und Komplexität 3.1 1

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

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Datenstrukturen und Algorithmen

Komplexitätsklassen THEORETISCHE INFORMATIK VORGETRAGEN VON: ELIAS DROTLEFF

Was Computer nicht berechnen können

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Einstieg in die Informatik mit Java

Kapitel 1: Informationsverarbeitung durch Programme

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

STL-Container und Laufzeit

Algebraische und arithmetische Algorithmen

8 Komplexitätstheorie

Einführung in die Informatik I

Einführung in die Programmierung

Algorithmen & Komplexität

Algorithmen und Datenstrukturen I Grundlagen

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

Übung Algorithmen und Datenstrukturen

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

Optimierungsprobleme. B. Langfeld, M. Ritter, B. Wilhelm Diskrete Optimierung: Fallstudien aus der Praxis

Übung Algorithmen und Datenstrukturen

Kapitel 7 KOMPLEXITÄT. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

Kapitel 2. Mathematische Grundlagen. Skript zur Vorlesung Einführung in die Programmierung

Kapitel 3. Folgen Körper der reellen Zahlen. Wir kennen schon den Körper Q der rationalen Zahlen: : a, b Z, b 0}. Q = { a b

Transkript:

Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme

Ressourcenbedarf von Algorithmen Algorithmen verbrauchen zwei Ressourcen: Rechenzeit Speicherplatz Im folgenden betrachten wir, wie wir messen können, wieviel Rechenzeit und Speicherplatz verbraucht werden. # 2

Laufzeitanalyse 1. Ansatz: Direktes Messen der Laufzeit (z.b. in ms). Abhängig von vielen Parametern (Rechnerkonfiguration, Rechnerlast, Compiler, Betriebssystem,...) Daher: Kaum übertragbar und ungenau. 2. Ansatz: Zählen der benötigten Elementaroperationen des Algorithmus in Abhängigkeit von der Größe n der Eingabe. Das algorithmische Verhalten wird als Funktion der benötigten Elementaroperationen dargestellt. Die Charakterisierung dieser elementaren Operationen ist abhängig von der jeweiligen Problemstellung und dem zugrunde liegenden Algorithmus. Beispiele für Elementaroperationen: Zuweisungen, Vergleiche, arithmetische Operationen, Arrayzugriffe,... # 3

Laufzeitanalyse Das Maß für die Größe n der Eingabe ist abhängig von der Problemstellung, z.b. Suche eines Elementes in einem Array: n = Länge des Arrays. Multiplikation zweier Matrizen: n = Dimension der Matrizen. Sortierung einer Liste von Zahlen: n = Anzahl der Zahlen. Laufzeit: Benötigte Elementaroperationen bei einer bestimmten Eingabelänge n. Speicherplatz: Benötigter Speicher bei einer bestimmten Eingabelänge n. # 4

Problem: Hardware-Abhängigkeit Laufzeit einzelner Elementar-Operation ist abhängig von der eingesetzten Rechner-Hardware. Frühere Rechner (incl. heutige PDAs, Mobiltelefone,...): billig : Fallunterscheidungen, Wiederholungen mittel : Rechnen mit ganzen Zahlen (Multiplikation usw.) teuer : Rechnen mit reellen Zahlen Heutige Rechner (incl. z.b. Spiele-Konsolen): billig : Rechnen mit reellen und ganzen Zahlen teuer : Fallunterscheidungen # 5

Asymptotisches Laufzeitverhalten Kleine Probleme (z.b. n = 5) sind uninteressant: Die Laufzeit des Programms ist eher bestimmt durch die Initialisierungskosten (Betriebssystem, Programmiersprache etc.) als durch den Algorithmus selbst. Interessanter: Wie verhält sich der Algorithmus bei sehr großen Problemgrößen? Wie verändert sich die Laufzeit, wenn ich die Problemgröße variiere (z.b. Verdopplung der Problemgröße)? Das bringt uns zu dem Konzept asymptotisches Laufzeitverhalten. # 6

Definition O-Notation Mit der O-Notation haben Informatiker einen Weg gefunden, die asymptotische Komplexität (bzgl. Laufzeit oder Speicherplatzbedarf) eines Algorithmus zu charakterisieren. Definition O-Notation: Seien f: und s: zwei Funktionen (s wie Schranke) Die Funktion f ist von der Größenordnung O(s), geschrieben f O(s), wenn es k und m gibt, so dass gilt: Für alle n mit n m ist f(n) k s(n). Man sagt auch: f wächst höchstens so schnell wie s. # 7

Bemerkungen zur O-Notation k ist unabhängig von n: k muss dieselbe Konstante sein, die für alle n f (n) k s(n). Existiert keine solche Konstante k, ist f nicht von der Größenordnung O(s). garantiert, dass O(s) bezeichnet die Menge aller Funktionen, die bezüglich s die Eigenschaft aus der Definition haben. Man findet in der Literatur häufig f = O(s) statt f O(s). # 8

Rechnen mit der O-Notation Elimination von Konstanten: 2 n O(n) n/2 + 1 O(n) Bei einer Summe zählt nur der am stärksten wachsende Summand (mit dem höchsten Exponenten): 2n 3 + 5n 2 + 10n + 20 O(n 3 ) O(1) O(log n) O(n) O(n log n) O(n 2 ) O(n 3 )... O(2 n ) Beachte: 1000 n 2 ist nach diesem Leistungsmaß immer besser als 0,001 n 3, auch wenn das m, ab dem die O(n 2 )-Funktion unter der O(n 3 )-Funktion verläuft, in diesem Fall sehr groß ist (m=1 Million). # 9

Wichtige Klassen von Funktionen # 10

Wichtige Klassen von Funktionen Die O-Notation hilft insbesondere bei der Beurteilung, ob ein Algorithmus für großes n noch geeignet ist bzw. erlaubt einen Effizienz-Vergleich zwischen verschiedenen Algorithmen für große n. Schlechtere als polynomielle Laufzeit gilt als nicht effizient, kann aber für viele Probleme das best-mögliche sein. # 11

Wichtige Klassen von Funktionen n n 2 n n n 2 n log(n) log(n) # 12