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