Kapitel 1: Algorithmen und ihre Analyse

Ähnliche Dokumente
Komplexität von Algorithmen

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

2. Algorithmenbegriff

Übung Algorithmen und Datenstrukturen

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Algorithmen und Datenstrukturen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Komplexität von Algorithmen:

Einführung in die Informatik Algorithms

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 Effizienz und Funktionenklassen

Kapitel 1: Informationsverarbeitung durch Programme

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

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

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

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

Ordnen Sie die folgenden Funktionen nach ihrer asymptotischer Komplexität in aufsteigender Reihenfolge: i=1 4i + n = 4 n. i=1 i + 3n = 4 ( n(n+1)

Übung Algorithmen und Datenstrukturen

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

WS 2009/10. Diskrete Strukturen

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

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

4 Effizienz und Komplexität 3.1 1

Grundlagen: Algorithmen und Datenstrukturen

Übung zur Vorlesung Berechenbarkeit und Komplexität

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

Programmieren I. Kapitel 5. Kontrollfluss

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

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

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

11. Rekursion, Komplexität von Algorithmen

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

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

Algorithmen und Datenstrukturen

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

2. Effizienz von Algorithmen

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

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

Informatik I Komplexität von Algorithmen

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

Komplexität von Algorithmen OOPM, Ralf Lämmel

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

Wann sind Codes eindeutig entschlüsselbar?

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Praktische Grenzen der Berechenbarkeit

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

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

Einführung in die Informatik I

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

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

Theoretische Informatik: Berechenbarkeit und Formale Sprachen

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Theoretische Grundlagen der Informatik

Verifizierende Testverfahren

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

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

Algorithmen und Datenstrukturen

Programmierkurs Java

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

Entwurf von Algorithmen - Kontrollstrukturen

Algorithmen & Datenstrukturen Blatt 4

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

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

2. Programmierung in C

Einführung in die Programmierung Wintersemester 2011/12

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

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

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

8 Komplexitätstheorie

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Informatik 1. Teil 1 - Wintersemester 2012/2013. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

Javakurs für Anfänger

Grundlagen der Informatik I (Studiengang Medieninformatik)

Anweisungen und Kontrollstrukturen

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

Grundlagen der theoretischen Informatik

Klausur Grundlagen der Programmierung

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

Informatik I Komplexität von Algorithmen

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Algorithmen und Datenstrukturen Tutorium I

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

Transkript:

LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Algorithmen und Datenstrukturen Kapitel 1: Algorithmen und ihre Analyse Skript zur Vorlesung Algorithmen und Datenstrukturen Sommersemester 2015 Ludwig-Maximilians-Universität München (c) PD Dr. Matthias Renz 2015, basierend auf dem Skript von Prof. Dr. Martin Ester, Prof. Dr. Daniel A. Keim, Dr. Michael Schiwietz und Prof. Dr. Thomas Seidl

Der Begriff des Algorithmus I Algorithmus (Definition): präzise, endliche Verarbeitungsvorschrift Elementaroperationen werden von einer mechanisch oder elektronisch arbeitenden Maschine durchgeführt. Abfolge der einzelnen Verarbeitungsschritte müssen eindeutig hervorgehen. Wahlmöglichkeiten sind zugelassen, deren Auswahl jedoch genau festliegen muss. Ausführung eines Algorithmus (Prozess) geschieht durch ein Ausführungsorgan (Prozessor) Abarbeitung der spezifizierten Elementaroperationen werden in der festgelegten Reihenfolge abgearbeitet. Algorithmen und Datenstrukturen 2

Beispiele für Alltagsalgorithmen Prozess Algorithmus Typische Schritte im Algorithmus Pullover stricken Strickmuster Stricke Rechtsmasche, stricke Linksmasche Modellflugzeug bauen Montageanleitung Leime Teil A an den Flügel B Kuchen backen Rezept Nimm 3 Eier, schaumig schlagen Kleider nähen Schnittmuster Nähe seitlichen Saum Beethovensonate spielen Notenblatt Ähneln Algorithmen, sind aber selten exakt ausformuliert. Häufig sind Teile enthalten, die mehrdeutig interpretiert werden können. Hier in der Vorlesung: nur Computer-Algorithmen Verwendung von Java zur Notation Algorithmen und Datenstrukturen 3

Der Begriff des Algorithmus II Durch einen Algorithmus werden mittels einer Reihe von Anweisungen Objekte manipuliert, um von einer spezifischen Eingabe eine spezifische Ausgabe zu erhalten. Formal: Ein Algorithmus beschreibt eine Abbildung f: E A E: Menge der zulässigen Eingabedaten A: Menge der Ausgabedaten. aber: Nicht jede Abbildung f: E A lässt sich durch einen Algorithmus realisieren (Berechenbarkeit!) Algorithmen und Datenstrukturen 4

Typische Eigenschaften von Algorithmen I Abstrahierung: Ein Algorithmus löst eine Klasse von Problemen Wahl eines konkreten, aktuell zu lösenden Problems aus dieser Klasse erfolgt über geeignete Wahl von Parametern Finitheit: Statische Finitheit: Beschreibung eines Algorithmus besitzt eine endliche Länge. Dynamische Finitheit: Algorithmus darf zu jedem Zeitpunkt nur endlich viel Platz belegen. endliche Datenstrukturen und Zwischenergebnisse Algorithmen und Datenstrukturen 5

Typische Eigenschaften von Algorithmen II Terminierung: Algorithmen sind terminierend, die für jede Eingabe nach endlich vielen Schritten ein Resultat liefern und anhalten, ansonsten sind sie nicht-terminierend. Beispiele für nicht-terminierende Algorithmen: Betriebssysteme, Überwachung von Anlagen, Verkehrsampeln, Befehlsholezyklus in CPU Determinismus: Algorithmen sind deterministisch, wenn zu jedem Zeitpunkt ihrer Ausführung höchstens eine Möglichkeit der Fortsetzung besteht, ansonsten sind sie nichtdeterministisch. Algorithmen und Datenstrukturen 6

Typische Eigenschaften von Algorithmen III Determiniertheit: Normalerweise liefert ein Algorithmus stets das gleiche Ergebnis, wenn er mit den gleichen Eingabewerten und Startbedingungen wiederholt wird. Nicht-determinierte Algorithmen können nützlich sein, wenn exakte Lösungsalgorithmen eine hohe Komplexität haben heuristische Methoden (Verzicht auf erschöpfende Bearbeitung aller Fälle) Ein terminierender, deterministischer Algorithmus ist immer determiniert. Ein terminierender, nicht-deterministischer Algorithmus kann determiniert oder nicht-determiniert sein. Algorithmen und Datenstrukturen 7

Motivation Algorithmen als Problemlösung: Entwicklung neuer Algorithmen zur Behebung ungelöster Probleme/Aufgaben Steigerung der Effizienz von Algorithmen: Entwicklung möglichst guter Algorithmen. Fragestellungen der Informatik bei Algorithmen: Man kann beweisen, dass es zu jedem Algorithmus unendlich viele, äquivalente Algorithmen gibt, die die gleiche Aufgabe lösen. Dabei interessant für Informatiker: Suche nach schnelleren oder kompakteren Algorithmen Beweis, dass es solche nicht geben kann Algorithmen und Datenstrukturen 8

Grundlegende Bestandteile von Algorithmen I Zur Ausführung eines Algorithmus benötigt man verschiedene Arten von Kontrollstrukturen: Sequenz (Folge von Anweisungen) Zu einem Zeitpunkt wird nur ein Schritt ausgeführt Jeder Schritt wird genau einmal ausgeführt Die Schritte werden nacheinander ausgeführt Mit der Beendigung des letzten Schrittes endet der gesamte Algorithmus In Java: {<Anweisung>; <Anweisung>;...; <Anweisung>;} Algorithmen und Datenstrukturen 9

Grundlegende Bestandteile von Algorithmen II Selektion (Auswahl, bedingte Anweisung) Einfache Form: Pseudo-Code: Falls Bedingung dann Sequenz Java: if (<Bedingung>) <Sequenz> Bedingte Anweisung mit Alternative (allgemeine Form) Pseudo-Code: Falls Bedingung dann Sequenz 1 sonst Sequenz 2 Java: if (<Bedingung>) <Sequenz 1> else <Sequenz 2> Anmerkung: Einfache Form ist Spezialfall der allgemeinen Form Algorithmen und Datenstrukturen 10

Grundlegende Bestandteile von Algorithmen III Mehrfachauswahl: Pseudo-Code: Falls Bedingung 1 dann Anweisung(en) Bedingung 2 dann Anweisung(en) Bedingung n dann Anweisung(en) sonst Anweisung(en) Java: switch (<Ausdruck>) { case (<Konstante 1>): <Anweisung>,..., <Anweisung>; break; case (<Konstante 2>): <Anweisung>,..., <Anweisung>; break;... case (<Konstante n>): <Anweisung>,..., <Anweisung>; break; default: <Anweisung>,..., <Anweisung>; Algorithmen und Datenstrukturen 11

Grundlegende Bestandteile von Algorithmen IV Iteration (Wiederholung, Schleife) Erste Form der Iteration: Pseudo-Code: Wiederhole Sequenz bis Bedingung {Abbruchbedingung} Java: do <Sequenz> while (!<Bedingung>) Zweite Form der Iteration: Pseudo-Code: Solange Bedingung Sequenz {Rumpf der Schleife} Java: while (<Bedingung>) <Sequenz> Unterschiede: Bei der zweiten Form wird die Bedingung vor der Ausführung des Rumpfes geprüft (wichtig, falls Bedingung vor dem Eintritt in die Schleife geprüft werden soll) Algorithmen und Datenstrukturen 12

Grundlegende Bestandteile von Algorithmen V Iteration (Wiederholung, Schleife) Spezialfall: Endlosschleife Pseudo-Code: Wiederhole Sequenz immer Java: while (true) <Sequenz> Anmerkungen: Unbeabsichtigte Endlosschleifen entstehen häufig, weil die Abbruchbedingung nicht korrekt formuliert wurde. Sequenz, Selektion und Iteration genügen, um jeden Algorithmus auszudrücken! Algorithmen und Datenstrukturen 13

Effizienz und Komplexität Effizienz als wichtiges Kriterium zum Vergleich verschiedener Algorithmen zur Lösung ein und desselben Problems. Wird bestimmt durch den benötigten Aufwand des Algorithmus (seine Komplexität) in Abhängigkeit einer speziellen Eingabesituation Wesentliche Effizienzkriterien: Die Laufzeit des Algorithmus Der benötigte Speicherplatz Laufzeit ist in der Regel das wichtigste Kriterium Häufig: Trade-Off bei der Optimierung eines dieser beiden Kriterien dahingehend, dass das andere Kriterium verschlechtert wird. Algorithmen und Datenstrukturen 14

Laufzeitanalyse I 1. Ansatz: Direktes Messen der Laufzeit (z.b. Millisekunden) abhängig von vielen Parametern (Rechenkonfiguration, Rechnerlast, Compiler, Betriebssystem, Programmiertricks, u.a.) Daher kaum übertragbar und ungenau 2. Ansatz: Zählen der benötigten Elementaroperationen in Abhängigkeit von der jeweiligen Größe der Eingabe Algorithmische Verhalten wird als Funktion der benötigten Elementaroperationen dargestellt Charakterisierung ist abhängig von der jeweiligen Problemstellung und dem zugrundliegenden Algorithmus Beispiele für Elementaroperationen: Zuweisungen, Vergleiche, arithmetische Operationen, Zeigerdereferenzierungen, Arrayzugriffe Algorithmen und Datenstrukturen 15

Laufzeitanalyse II Maß für die Größe der Eingabe ist abhängig von der Problemstellung Beispiel: Problem: Suche eines Elementes in einer Liste Multiplikation zweiter Matrizen Sortierung einer Liste von Zahlen Größe der Eingabe: Anzahl der Elemente Dimension der Matrizen Anzahl der Zahlen Algorithmen und Datenstrukturen 16

Beispiel: Laufzeitanalyse I 13 7 5 23 8 18 17 31 3 11 9 30 24 27 21 19 int seqsearch(int[] a, int x) { int i = 0, high = a.length - 1; while ((i <= high) && (a[i]!= x)) i++; if (i <= high) return i; else return -1; } Wesentliche Operationen (Grundoperationen): Ausführungen der while-schleife Diese Anzahl ist abhängig von: Größe des Arrays (n; fest vorgegeben) Position des gesuchten Elementes im Array (variabel) Algorithmen und Datenstrukturen 17

Laufzeitanalyse III Wir unterscheiden daher zwischen: dem durchschnittlichen Zeitbedarf T n eines Algorithmus, charakterisiert durch die durchschnittliche Anzahl A n benötigter Grundoperationen für alle Eingaben der Größe n. Den Zeitbedarf im schlechtesten Fall T worst n, charakterisiert durch A worst n, die Anzahl benötigter Grundoperationen im schlechtesten Fall aller Eingaben der Größe n. Algorithmen und Datenstrukturen 18

Laufzeitanalyse VI Sei E n die Menge aller möglichen Eingaben der Größe n und a e, e E n, die Anzahl von Grundoperationen, die ein gegebener Algorithmus bei Eingabe von e ausführt. Sei weiterhin p e die Wahrscheinlichkeit, mit der die Eingabe e auftritt ( e En p e = 1). Dann gilt: A n = p e a e e E n A worst n = max a e Algorithmen und Datenstrukturen 19

Beispiel: Laufzeitanalyse II Sei q die Wahrscheinlichkeit, dass x im Array vorhanden ist und sei jede Position für x gleichwahrscheinlich. Bezeichne weiterhin e i, 0 i n 1, die Menge aller Eingaben mit x = A[i] und entsprechend e n die Menge aller Eingaben, die x nicht enthalten. Dann gilt: p e i = q n, 0 i n 1 und p e n = 1 q Algorithmen und Datenstrukturen 20

Beispiel: Laufzeitanalyse III Hieraus ergibt sich: A n = e E n p e a e = n n i=0 p e i a e i = = q n i + 1 q n = q n i=1 = q n + 1 + 1 q n 2 n 1 q i=0 n n + 1 2 n i + 1 + 1 q n = + 1 q n = Im Fall q = 1: A n = n+1 2 Im Fall q = 1 2 : A worst n = max a e i A n = n+1 4 + n 2 3 4 n 0 i n = n Algorithmen und Datenstrukturen 21

Landau-Symbole Durch Weglassen multiplikativer und additiver Konstanten wird allein das Wachstum der Laufzeitfunktion T n betrachtet. Man erhält eine von der Programmumgebung und anderen äußeren Einflussgrößen unabhängige Charakterisierung der (asymptotischen) Komplexität des Algorithmus. Die Komplexität kann durch asymptotische obere und untere Schranken definiert werden. Landau-Symbole Algorithmen und Datenstrukturen 22

Definition Landau-Symbol Θ Sei g: R R eine Funktion. Das Landau-Symbol Θ g ist definiert als die Menge Θ g { f: R R c 1 > 0, c 2 > 0, n 0 N, so dass n n 0 : 0 c 1 g n f n c 2 g n } Gebräuchliche Schreibweise: f = Θ g oder f n = Θ g n statt f Θ g g ist die asymptotische obere und untere Schranke von f. Oft ist jedoch nur die obere Schranke interessant. Algorithmen und Datenstrukturen 23

Definition Landau-Symbol O Sei g: R R eine Funktion. Das Landau-Symbol O g ist definiert als die Menge O g { f: R R c > 0, n 0 N, so dass n n 0 : 0 f n c g n } Gebräuchliche Schreibweise: f = O g oder f n = O g n statt f O g g ist die asymptotische obere Schranke von f. ( f wächst höchstens so schnell wie g ) aus f = Θ g folgt f = O g. Algorithmen und Datenstrukturen 24

Definition Landau-Symbol Ω Analog lässt sich die untere Schranke (Landau-Symbol Ω) definieren. Ferner existieren die Landau-Symbole o und ω, welche hier nicht weiter vorgestellt werden. Beispiele für f = Θ g, f = O g und f = Ω g : Mit dieser Notation gilt: T n = O A n sowie T worst n = O A worst n Im Beispiel ist also: T n = O q n+1 2 + 1 q n = O n und T worst n = O n Algorithmen und Datenstrukturen 25

Vergleich der Landau-Symbole VL-Titel 26

Alternative Definition Landau-Symbol O Obere Schranke (Landau Symbol O) über die Existenz von Grenzwerten definierbar: Funktionen bei der Laufzeitanalyse meist monoton wachsend von 0 verschieden Betrachtung des Quotienten f n g n. Nach Definition gilt für f = O g f n g n c, n n 0. f n Existiert Grenzwert lim n g n (d.h. < ) f = O g. Algorithmen und Datenstrukturen 27

Rechnen mit der O-Notation Optimalität von Algorithmen: Ein Algorithmus A ist eine (worst-case) optimale Lösung eines gegebenen Problems, falls für jeden Lösungsalgorithmus B aus der Algorithmenklasse von B gilt: A T worst B = O T worst Rechnen mit der O-Notation: Elimination von Konstanten: n 2 n = O n, + 1 = O n 2 Bilden oberer Schranken: 2 n = O n 2, 3 = O log n Algorithmen und Datenstrukturen 28

Wichtige Klassen von Funktionen Sprechweise Typische Algorithmen O 1 Konstant O logn Logarithmisch Suchen auf einer Menge O n Linear Bearbeiten jedes Elementes einer Menge O n logn Gute Sortierverfahren, z.b. Heapsort O n log 2 n O n 2 Quadratisch Primitive Sortierverfahren O n k, k 2 Polynomiell O 2 n Exponentiell Backtracking-Algorithmen Algorithmen und Datenstrukturen 29