Datenstrukturen und Algorithmen

Ähnliche Dokumente
Datenstrukturen & Algorithmen

Datenstrukturen und Algorithmen

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

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

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Algorithmen und Datenstrukturen (für ET/IT)

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Kapitel 3: Sortierverfahren Gliederung

Kapitel 1: Informationsverarbeitung durch Programme

Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

2. Hausübung Algorithmen und Datenstrukturen

Abschnitt: Algorithmendesign und Laufzeitanalyse

Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen (für ET/IT)

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

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

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Tutorübungen

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

Algorithmen und Datenstrukturen (für ET/IT)

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

Abschnitt 7: Komplexität von imperativen Programmen

Elementare Sortierverfahren

Abschnitt 19: Sortierverfahren

Komplexität von Algorithmen

Informatik II Sortieren

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1

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

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Algorithmen und Datenstrukturen

3. Übungsblatt zu Algorithmen I im SoSe 2017

3.2. Divide-and-Conquer-Methoden

Algorithmen und Datenstrukturen

Ideen und Konzepte der Informatik

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

Grundlagen der Programmierung (Vorlesung 24)

Algorithmen & Komplexität

Grundlagen: Algorithmen und Datenstrukturen

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

Kapitel 1: Informationsverarbeitung durch Programme

Einführung in die Informatik Turing Machines

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Programmieren und Problemlösen

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

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

Einführung in die Informatik Turing Machines

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)

Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

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

Lösungsvorschlag Serie 2 Rekursion

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

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

1 Algorithmische Grundlagen

Aufgabe (Schreibtischtest, lexikographische Ordnung)

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Turing-Maschinen: Ein abstrakes Maschinenmodell

Transkript:

Datenstrukturen und Algorithmen VO 708.031 D&A: 1. Einführung robert.legenstein@igi.tugraz.at 1

Organisatorisches VO (708.031) & UE (708.032) bei beiden extra anmelden, zwei Zeugnisse Vortragende: VO: Robert Legenstein (robert.legenstein@igi.tugraz.at) UE: Gernot Griesbacher (griesbacher@igi.tugraz.at) Homepage: http://www.igi.tugraz.at/lehre/d&a/ws14 Newsgroup: tu-graz.lv.datenalgo D&A: 1. Einführung robert.legenstein@igi.tugraz.at 2

Ablauf der VO Do. 11:15 12:45 Folien und Hilfsblätter werden online gestellt (Inoffizielles) Skriptum im CopyShop- Infelldgasse erhältlich Homepage: Literatur, Java Applets D&A: 1. Einführung robert.legenstein@igi.tugraz.at 3

Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische Grundprinzipien 3. Sortierverfahren 4. Halden 5. Suchen in linearen Feldern 6. Bäume D&A: 1. Einführung robert.legenstein@igi.tugraz.at 4

Kapitel 1 Einführung und Grundlagen D&A: 1. Einführung robert.legenstein@igi.tugraz.at 5

1. Einführung und Grundlagen Warum Datenstrukturen und Algorithmen? Grundlagen Was ist ein Algorithmus? Was ist eine Datenstruktur? Beispiele: Einfache Sortieralgorithmen InsertionSort Asymptotische Schranken zur Laufzeitanalyse Elementare Datenstrukturen D&A: 1. Einführung robert.legenstein@igi.tugraz.at 6

Warum Datenstrukturen und Algorithmen? D&A ist eine Kernkompetenz jedes Informatikers (Softwareentwicklers, Telematikers, ) Informatik = Computer Science Die Wissenschaft des (automatisierten) Rechnens. Man rechnet mit Algorithmen. Flut an Daten, z.b. Videos im Internet, sollen "effizient" verarbeitet werden. Algorithms are at the heart of every nontrivial computer application [K. Mehlhorn and P. Sanders] Online verfügbar, siehe HP D&A: 1. Einführung robert.legenstein@igi.tugraz.at 7

Warum Datenstrukturen und Algorithmen? Algorithmendesign Programmieren Schrittweiser Prozess der Software-Entwicklung (Wasserfall-Modell, Royce 1970]: D&A: 1. Einführung robert.legenstein@igi.tugraz.at 8

Warum Datenstrukturen und Algorithmen? Algorithmendesign Programmieren Analysieren des Problems: was ist gegeben? was ist gesucht? welche Rahmenbedingungen? Abschätzen der grundsätzlichen Machbarkeit. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 9

Warum Datenstrukturen und Algorithmen? Algorithmendesign Programmieren Entwickeln einer Lösungsidee: skizzieren der erforderlichen Schritte dies ist ein kreativer Prozess! aber: wir werden Tools (=Lösungsmethoden) kennenlernen D&A: 1. Einführung robert.legenstein@igi.tugraz.at 10

Warum Datenstrukturen und Algorithmen? Algorithmendesign Programmieren Transformieren der Lösungsidee: in eine algorithmische Form Ausformulieren der Lösungsidee in algorithmischer Form Dies ist noch kein Programm! D&A: 1. Einführung robert.legenstein@igi.tugraz.at 11

Warum Datenstrukturen und Algorithmen? Algorithmendesign & Analyse Wichtige Fragen der Analyse von Algorithmen: Wie schnell ist mein Algorithmus (Programm)? Wie kann ich ihn schneller machen? Wie kann ich beweisen, dass er immer so schnell läuft? Wie kann ich den maximalen Speicherverbrauch abschätzen bzw. reduzieren? Wie kann ich sicher sein dass mein Algorithmus korrekt ist? D&A: 1. Einführung robert.legenstein@igi.tugraz.at 12

Warum Datenstrukturen und Algorithmen? Warum sollten Sie D&A beherrschen? Weil Sie nicht nur programmieren wollen, sondern Probleme algorithmisch lösen. Weil Sie effiziente Lösungen für Probleme suchen. Weil Effiziente Algorithmen sehr mächtig sein können. Das Imperium basiert auf PageRank, einem Algorithmus zur Informationssuche im www. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 13

1. Einführung und Grundlagen Warum Datenstrukturen und Algorithmen? Grundlagen Was ist ein Algorithmus? Was ist eine Datenstruktur? Beispiele: Einfache Sortieralgorithmen InsertionSort Asymptotische Schranken zur Laufzeitanalyse Elementare Datenstrukturen D&A: 1. Einführung robert.legenstein@igi.tugraz.at 14

1. Einführung u. Grundlagen Was ist ein Algorithmus? Addition zweier Dezimalzahlen: D&A: 1. Einführung robert.legenstein@igi.tugraz.at 15

1. Einführung u. Grundlagen Was ist ein Algorithmus? Bsp: Addition zweier n-stelliger Dezimalzahlen c = a + b Idee: Wir summieren die Stellen mit Übertrag Schritt 1: Summiere die niederwertigsten Stellen. Einerstelle des Ergebnisses ist Einerstelle von c. Behalte Zehnerstelle des Ergebnisses als Übertrag. Schritt 2 bis n: Summiere alle weiteren Stellen (i-te Stelle im i-ten Schritt) zusammen mit dem Übertrag Einerstelle des Ergebnisses ist i-te Stelle von c. Behalte Zehnerstelle des Ergebnisses als Übertrag. Schritt n+1: Falls Übertrag vorhanden, stelle ihn an die höchstwertige Stelle von c. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 16

1. Einführung u. Grundlagen Definition von Algorithmen Genaue Definition schwierig Ein Algorithmus ist ein Verfahren zur Lösung eines Problems (im Unterschied zu seiner Implementation!) Grobe Definition: Ein Algorithmus ist eine endliche Folge von Anweisungen, die die Lösung eines bestimmten Problems erlaubt. Jede Anweisung hat eine klare Bedeutung und kann mit endlichem Aufwand und in endlicher Zeit ausgeführt werden. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 17

1. Einführung u. Grundlagen Was ist eine Datenstruktur? Bsp: Addition zweier n-stelliger Dezimalzahlen c = a + b Frage: Wie speichern wir die Zahlen a, b, c, wie greifen wir auf die Stellen zu? z.b.: Speichere a, b, c, jeweils in einem linearen Feld (Array) A, B, C, wobei A[i] die i-te Stelle der Zahl a ist A[1] A[2] A[3]. A[n-1] A[n] a =321 1 2 3 0 D&A: 1. Einführung robert.legenstein@igi.tugraz.at 18

Definition von Datenstrukturen Definition: Eine Datenstruktur ist eine bestimmte Art Daten zu verwalten und zu verknüpfen, damit man in geeigneter Art und Weise auf sie zugreifen und diese manipulieren kann. Datenstrukturen sind immer mit speziellen Operationen verbunden (z.b.: i-tes Element, Einfügen, Entfernen, Maximum, Nachfolger, ) Diese Operationen sind wiederum durch Algorithmen implementiert. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 19

Interaktion Datenstrukturen Algorithmen 04.10.2008 helmut.hauser@igi.tugraz.at

Datenstrukturen und Algorithmen können nicht getrennt voneinander betrachtet werden Algorithmen und Datenstrukturen gehen Hand in Hand Ein Algorithmus (Methode, Verfahren, Rezept) nimmt bestimmte Daten als Input und transformiert diese nach festen Regeln in einen Output Dabei greift der Algorithmus auf Daten zu, die in einer Datenstruktur organisiert sind D&A: 1. Einführung robert.legenstein@igi.tugraz.at 21

1. Einführung u. Grundlagen Formulierung in Pseudocode Bsp: Addition zweier n-stelliger Dezimalzahlen c = a + b Idee: Wir summieren die Stellen mit Übertrag Sum(A,B): // Input: A: Array[1..n], B: Array[1..n], kodieren a,b // Output: C: Array[1..n+1], kodiert c = a+b 1: carry 0 2: FOR i 1 TO n 3: (res, carry) = FullAdd(A[i],B[i],carry) 4: C[i] res 5: C[n+1] carry 6: RETURN C D&A: 1. Einführung robert.legenstein@igi.tugraz.at 22

Analyse von Algorithmen Wir wollen Algorithmen und Datenstrukturen systematisch analysieren und vergleichen. Was ist ein guter Algorithmus? Er muss korrekt sein, d.h. das richtige Ergebnis für alle möglichen Inputinstanzen liefern. Er muss schnell sein. Er soll wenig Ressourcen (Zeit, Speicher, Bandbreite, CPUs, logische Gatter, ) benötigen. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 23

1. Einführung u. Grundlagen Wie schnell ist unser Algorithmus? Bsp: Addition zweier n-stelliger Dezimalzahlen c = a + b Sum(A,B): // Input: A: Array[1..n], B: Array[1..n], kodieren a,b // Output: C: Array[1..n+1], kodiert c = a+b 1: carry 0 2: FOR i 1 TO n 3: (res, carry) = FullAdd(A[i],B[i],carry) 4: C[i] res 5: C[n+1] carry 6: RETURN C T(n) = d+k n (d,k sind Konstanten) D&A: 1. Einführung robert.legenstein@igi.tugraz.at 24

Wir wollen wissen wie viel Zeit (allg.: Ressourcen) der Algorithmus in Abhängigkeit der Inputgröße benötigt. Abstraktion des Algorithmus (und der Datenstruktur) (Unabhängig von der eigentlichen Implementierung Sprache, OS, Protokolle, Hardware etc.) Mathematische Werkzeuge: O-Notation, Kombinatorik, Wahrscheinlichkeitstheorie, etc. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 25

Food For Thought Gibt es für jedes mathematisch beschreibbare Problem einen korrekten Algorithmus? Nein: Halteproblem [Alan Turing, 1936] Gibt es für jedes berechenbare Problem einen effizienten Algorithmus? Nein: Nichthandhabbare (intractable) Probleme NP-Vollständigkeit [Cook, 1972] D&A: 1. Einführung robert.legenstein@igi.tugraz.at 26

1. Einführung und Grundlagen Warum Datenstrukturen und Algorithmen? Grundlagen Was ist ein Algorithmus? Was ist eine Datenstruktur? Beispiele: Einfache Sortieralgorithmen InsertionSort Asymptotische Schranken zur Laufzeitanalyse Elementare Datenstrukturen D&A: 1. Einführung robert.legenstein@igi.tugraz.at 27

1 Annahmen Sortieren von Zahlenfolgen: Input: eine Sequenz von n Zahlen a, a2,, 1 Output: eine Permutation der Inputsequenz sodass a a 1 2 a n a n a, a2,, 1 a n Instanz des Sortierproblems: Input: 31,41,59,26,41,58 Output: 26,31,41,41,58, 59 Ein Algorithmus ist korrekt, wenn er für jede Instanz des Inputs einen korrekten Output liefert. D&A: 1. Einführung robert.legenstein@igi.tugraz.at 28

2 Formulierung (Idee) Sortieren durch Einfügen (InsertionSort) D&A: 1. Einführung robert.legenstein@igi.tugraz.at 29

Formulierung: InsertionSort Arbeitet in n-1 (= Anzahl der Zahlen-1) Durchgängen Nach dem i-ten Durchgang sind die Zahlen 1..i+1 sortiert. Im i-ten Durchgang wird die (i+1)-te Zahl von links betrachtet und solange nach links verschoben bis sie in die Sortierung passt D&A: 1. Einführung robert.legenstein@igi.tugraz.at 30

3 Pseudo Code Pseudo Code ist präziser als verbale Formulierungen allerdings nicht so präzise wie eine spezielle Implementierung (z.b. in Java oder C++). Viele Definitionen existieren. Wir verwenden eine Definition angelehnt an Java Code. Kommentare //Mein Kommentar Einrückungen Dienen zur Strukturierung der Anweisungen D&A: 1. Einführung robert.legenstein@igi.tugraz.at 31

3 Pseudo Code Schleifen FOR <variable-increment-definition> <actions> REPEAT <actions> UNTIL <condition> WHILE <condition> DO <actions> D&A: 1. Einführung robert.legenstein@igi.tugraz.at 32

3 Pseudo Code Bedingte Anweisung IF <condition> THEN <true-actions> [ELSE <false-actions>] Ein- und Ausgabe input <variable> (brauchen wir nicht) output <variable text> print <variable text> D&A: 1. Einführung robert.legenstein@igi.tugraz.at 33

3 Pseudo Code Algorithmen Deklaration Algorithm name(param1, param2,...) : //Input: Beschreibung der Eingabevariablen //Output: Beschreibung der Ausgabevariablen... weitere Anweisungen... Rückgabewert: RETURN value D&A: 1. Einführung robert.legenstein@igi.tugraz.at 34

Lösungsvorschlag: InsertionSort Pseudocode: Input: lineares Feld A[1..n] Output: aufsteigend sortiertes lineares Feld A[1..n] InsertionSort(A, n) 1: FOR i = 2 TO n 2: h = A[i] 3: j = i - 1 4: WHILE j>0 AND h<a[j] DO 5: A[j+1] = A[j] 6: j = j - 1 7: A[j+1] = h 8: RETURN A http://en.wikipedia.org/wiki/insertion_sort D&A: 1. Einführung robert.legenstein@igi.tugraz.at 35

Zusammenfassung Design und Analyse von Algorithmen -> zentrales Thema in der Informatik Algorithmen und Datenstrukturen können nicht getrennt voneinander behandelt werden, Definitionen. Wir wollen wissen wie viel Zeit (allg.: Ressourcen) der Algorithmus in Abhängigkeit der Inputgröße benötigt. Analyse-Vorgehensweise: Annahme->Formulierung ->Pseudocode->Analyse D&A: 1. Einführung robert.legenstein@igi.tugraz.at 36

Danke für Ihre Aufmerksamkeit D&A: 1. Einführung robert.legenstein@igi.tugraz.at 37