Algorithmen und Datenstrukturen

Ähnliche Dokumente
Grundlagen der Informatik

Grundlagen der Informatik 0

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen I Grundlagen

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

2. Hausübung Algorithmen und Datenstrukturen

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

VBA-Programmierung: Zusammenfassung

Einführung in die Programmierung

Abschnitt 11: Korrektheit von imperativen Programmen

Kapitel 11: Wiederholung und Zusammenfassung

Einführung in die Programmierung Wintersemester 2016/17

Datenstrukturen & Algorithmen

Abschnitt 2: Daten und Algorithmen

Java I Vorlesung Imperatives Programmieren

2. Programmierung in C

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Algorithmen und Datenstrukturen 1 Kapitel 5

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

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Algorithmen und Datenstrukturen (für ET/IT)

Objektorientierte Programmierung Studiengang Medieninformatik

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

EIDI 1 Einführung in die Informatik 1. PGdP Praktikum Grundlagen der Programmierung. Harald Räcke 2/217

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

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

3.2 Datentypen und Methoden

1. Einführung. Was ist ein Algorithmus (eine Datenstruktur)? Welche Probleme kann man damit lösen? Warum betrachten wir (effiziente) Algorithmen?

Klausur Grundlagen der Programmierung

Algorithmen und Datenstrukturen

Einführung in die Informatik I (autip)

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Praktische Eine Einführung

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

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Suchen und Sortieren

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Komplexität von Algorithmen

11. Rekursion, Komplexität von Algorithmen

Prof. Dr. Margarita Esponda

Repetitorium Informatik (Java)

Algorithmen und Datenstrukturen

Praktische Informatik 1

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen

Computeranwendung und Programmierung (CuP)

Algorithmen und Datenstrukturen

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

1 Abstrakte Datentypen

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Algorithmen und Datenstrukturen Laufzeitabschätzung

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Konzepte der Programmiersprachen

Einheit Variablen in der Programmiersprache C Variablen-Modell, Variablen-Vereinbarungen

Welche Informatik-Kenntnisse bringen Sie mit?

Sortieren II / HeapSort Heaps

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Einführung in C. EDV1-04C-Einführung 1

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

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

(08 - Einfache Sortierverfahren)

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Kapitel 1: Informationsverarbeitung durch Programme

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

2.1 Fundamentale Typen

Einstieg in die Informatik mit Java

Grundlagen und Konzepte von C Datenstrukturen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Grundlagen der Informatik I Einführung

Elementare Datentypen in C++

1 Aufgabe: Computer-Aufbau

Objektorientierte Programmierung OOP Programmieren mit Java

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

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

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Martin Unold INFORMATIK. Geoinformatik und Vermessung

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

JAVA-Datentypen und deren Wertebereich

Programmieren in Java -Eingangstest-

Algorithmen zur Datenanalyse in C++

Unterlagen. CPP-Uebungen-08/

Einführung in die Programmierung mit VBA

Einführung in die Programmierung

Prinzipien der objektorientierten Programmierung (OOP)

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Transkript:

Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare Datenstrukturen Algorithmen Rekursion Suchalgorithmen Sortieralgorithmen 2 1

Algorithmen und Datenstrukturen Kapitel 1 Grundlagen Algorithmen und Datenstrukturen Für diese Begriffe gibt es keine allgemein akzeptierten Definitionen. Verschiedene Personen (bzw. Lehrbücher) benutzen in der Praxis durchaus unterschiedliche Definitionen. 4 2

Definition Algorithmus Allgemein Unter einem Algorithmus versteht man allgemein eine mehr oder weniger genau definierte Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen. (Auch ein Kochrezept ist demnach ein Algorithmus) 5 Definition Algorithmus Formaler Ein Algorithmus ist eine endliche Folge von Anweisungen, die in einer Maschine repräsentiert und schrittweise ausgeführt werden können. (Maschine muss nicht zwangsläufig Computer bedeuten.) 6 3

Definition Algorithmus Im Rahmen dieser Vorlesung Ein Algorithmus ist ein in einer Programmiersprache angegebenes Computerprogramm, oder ein Teil davon (Funktion, Methode), welches eine bestimmte Aufgabe erfüllt. 7 Eigenschaften von Algorithmen Korrektheit Effizienz (Terminierung) 8 4

Korrektheit Wichtigste Eigenschaft! Zeige, dass der Algorithmus die gestellte Aufgabe korrekt löst. Problem: Korrektheit läßt sich nicht durch Testen beweisen ( Dijkstra) 9 Korrektheit Zitat aus 1969: Program Testing can be used very effectively to show the presence of bugs, but never to show the absence. zu deutsch: Durch Testen zeigt man die Anwesenheit von Fehlern, aber nicht deren Abwesenheit. Edsger W. Dijkstra 1930-2002 http://www.cs.utexas.edu/users/ewd/ 10 5

Korrektheit Korrektheitsbeweise von Algorithmen verlangen großen wissenschaftlichen Aufwand und stellen hohe formale Anforderungen. In der Software-Technik werden Verfahren definiert, mit deren Hilfe zielgerichtet nach Programmierfehlern gefahndet werden kann. Diese Form des Testens zeigt einen Großteil der Fehler auf, jedoch niemals alle. ( nicht Bestandteil dieser Vorlesung) 11 Korrektheit Im Rahmen dieser Vorlesung werden wir die Korrektheit der behandelten Algorithmen voraussetzen und insbesondere deren Implementierung genauer analysieren. 12 6

Effizienz Wieviel Speicherplatz wird benötigt? Wieviel Rechenzeit wird benötigt? 13 Effizienz Die Angabe von konkreten Werten für Speicherplatz und Rechenzeit ist immer vom zu Grunde liegenden System abhängig (Hardware, Betriebssystem, Programmiersprache, Compiler,...) Diese Werte verlieren ihre Aussagekraft, sobald sich das System ändert (z.b. neue Hardware, etc.) 14 7

Effizienz In dieser Vorlesung wird die Effizienz deshalb in der Regel anders betrachtet: Laufzeit/Speicherplatzbedarf in Abhängigkeit der Problemgröße besonders charakterisierender Parameter 15 Effizienz Laufzeit/Speicherplatzbedarf in Abhängigkeit der Problemgröße Wie verändert sich die Laufzeit, wenn die Problemgröße wächst? Beispiel Ein Sortieralgorithmus benötigt die Zeit t, um eine Anzahl von N Datensätzen zu sortieren. Wie ändert sich die Zeit, wenn doppelt so viele Datensätze (2*N) zu sortieren sind? 16 8

Effizienz Laufzeit/Speicherplatzbedarf in Abhängigkeit besonders charakterisierender Parameter Beispiele Bei arithmetischen Algorithmen interessiert beispielsweise die Anzahl der ausgeführten Additionen und Multiplikationen. Bei Sortieralgorithmen interessiert die Anzahl der durchgeführten Vergleiche zwischen zwei Datensätzen und die Anzahl der durchgeführten Datensatzbewegungen. 17 Terminierung Terminieren bedeutet, dass der Algorithmus in endlicher Zeit beendet wird, d.h. seine Aufgabe in endlicher Zeit erfüllt. Dies ist keine zwingende Eigenschaft, da es durchaus Beispiele für Algorithmen gibt, die niemals terminieren sollen. 18 9

Terminierung Im Rahmen der in dieser Vorlesung betrachteten Algorithmen ist eine Terminierung in endlicher Zeit jedoch oftmals erforderlich (und sinnvoll). 19 Ein Problem, mehrere Algorithmen Für ein Problem kann es mehrere Algorithmen geben, die dieses Problem lösen. Ziel Finde den Algorithmus, der das Problem am besten löst. Finde den effizientesten Algorithmus. 20 10

Effizientester Algorithmus benötigt möglichst wenig Speicherplatz Rechenzeit 21 Effizientester Algorithmus Später sehen wir z.b. verschiedene Suchalgorithmen verschiedene Sortieralgorithmen Alle Such- bzw. Sortieralgorithmen lösen dasselbe Problem, sind aber unterschiedlich effizient. 22 11

Effizientester Algorithmus Beispiel Programmierwettbewerb zum c t-puzzle Aufgabe in c t 07/2003: Schreiben Sie ein Programm, das das c't- Puzzle löst! http://www.heise.de/ct/03/07/230/default.shtml 23 c t Puzzle 12 Einzelteile ergeben richtig zusammengesetzt einen Quader mit Aufdruck des Logos Gesucht ist der schnellste Algorithmus, der alle möglichen Lösungen zum Zusammensetzen des Puzzles ermittelt. 24 12

c t Puzzle 84 c t-leser haben sich damals an dem Wettbewerb beteiligt und eine Lösung eingeschickt. schnellster Algorithmus benötigt 83 Sek. langsamster: mehrere Stunden 25 c t Puzzle Nach Wettbewerbsschluß wurde noch ein verbesserter Algorithmus entwickelt, der nur ca. 45 Sekunden benötigte. Insgesamt gibt es 409 963 verschiedene Möglichkeiten die 12 Teile zum Quader zusammen zu setzen (wenn man den Logo-Aufdruck ignoriert). Beschreibung mehrerer Lösungen in c t 14/2003 26 13

Definition Datenstruktur Eine Datenstruktur ist eine Organisationsform für eine Menge von Daten. 27 Einfluß der Datenstruktur Eine Datenstruktur hat erheblichen Einfluß auf die Effizienz, mit der sich bestimmte Operationen für die Daten ausführen lassen. Diese Operationen werden von Algorithmen ausgeführt. Die gewählte Datenstruktur hat damit Einfluß auf die Effizienz des Algorithmus. 28 14

Beispiel Datenstruktur Telefonbuch Wie ist die Datenstruktur eines Telefonbuchs aufgebaut? Welcher Algorithmus arbeitet mit dieser Datenstruktur besonders gut zusammen? (Was ist die Aufgabe dieses Algorithmus?) Wofür eignet sich diese Datenstruktur nicht? 29 Definition Elementarer Datentyp Unter einem elementaren Datentypen versteht man die Datentypen, die direkt von der zu Grunde liegenden Programmierprache zur Verfügung gestellt werden. 30 15

Elementare Datentypen Java boolean char byte short int long float double C++ bool char short int long float double 31 Benutzerdefinierte Datenstrukturen werden vom Programmierer selbst erstellt können elementare Datentypen und/oder andere Datenstrukturen enthalten 32 16

Benutzerdefinierte Datenstrukturen Ein struct in C: struct Person { char* firstname; char* lastname; int age; }; 33 Benutzerdefinierte Datenstrukturen Anwendung void main() { Person p; } p.firstname = Hans"; p.lastname = Mustermann"; p.age = 49; 34 17

Benutzerdefinierte Datenstrukturen siehe Person0.cpp sehr einfaches Beispielprogramm programmiertechnisch schlecht gelöst 35 Daten und Operationen Zu Daten werden oftmals auch Operationen definiert, die auf diesen Daten möglich sind. siehe Person1.cpp sehr einfaches Beispielprogramm programmiertechnisch etwas besser 36 18

Daten und Operationen Wenn nur noch die Operationen wichtig sein sollen und der interne Aufbau der Daten verborgen wird, so führt dies zu einem sogenannten abstrakten Datentypen. 37 Abstrakter Datentyp Unter einem Abstrakten Datentypen versteht man eine Menge von Daten, auf die nur über definierte Operationen zugegriffen werden kann, bzw. die nur über definierte Operationen manipuliert werden können. 38 19

Abstrakter Datentyp und OOP In der objektorientierten Programmierung wird das Prinzip des abstrakten Datentyps unterstützt. Eine Klasse enthält Daten (Attribute) und Operationen (Methoden). Die Attribute werden i.d.r. als private deklariert, so dass ein direkter Zugriff darauf von außen nicht möglich ist. Zugriff dann nur über Methoden. 39 Abstrakter Datentyp und OOP siehe Person2.h Person2.cpp sehr einfaches Beispielprogramm objektorientiert 40 20

Elementare Datenstrukturen Array Linked List Stack Queue Tree Werden im dritten Kapitel genauer betrachtet... 41 21