Datenstrukturen & Algorithmen VO 708.031 05.10.2006 helmut.hauser@igi.tugraz.at Um was geht es? Datenstrukturen Algorithmen 05.10.2006 helmut.hauser@igi.tugraz.at Algorithmus Versuch einer Erklärung: Ein Algorithmus nimmt bestimmte Daten als Input und transformiert diese nach festen Regeln in einen sinnvollen Output. Versuch einer 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. 05.10.2006 helmut.hauser@igi.tugraz.at Algorithmus - Beispiele - Bedienungsanleitung zum Zusammenbau eines Möbels (Teilschritte auch wieder Algorithmen!) - detailliertes Kochrezept - einfache mathematische Funktionen (addieren, subtrahieren, sin, exp, logische Vergleiche …) - Komplexere Operation: Sortieren, Suchen, Kodieren, Optimieren,… - Kombination daraus (zuerst ordnen und dann suchen) 05.10.2006 helmut.hauser@igi.tugraz.at Algorithmus Wichtige Eigenschaft: modular – können daher kombiniert werden. Basis von Algorithmen (Bausteine) in D&A • Sortieralgorithmen • Suchalgorithmen • Algorithmen zur Manipulation von Datenstrukturen • und andere… 05.10.2006 helmut.hauser@igi.tugraz.at Datenstruktur 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. Immer verbunden mit speziellen Operationen (Einfügen, Entfernen, Sortieren, Maximum, Nachfolger,…) = wieder Algorithmen 05.10.2006 helmut.hauser@igi.tugraz.at Datenstrukturen - Beispiele • Lineare Felder • Hashtabellen • Stapel (stacks) • Bäume • Schlangen (queue) • Graphen • Halden (heaps) • Sonderformen Komplexe Kombinationen möglich: • Baum aus Halden • Eine Schlange aus Bäumen •… 05.10.2006 helmut.hauser@igi.tugraz.at Um was geht es? Wir wollen Algorithmen und Datenstrukturen systematisch analysieren und vergleichen. Was ist ein guter Algorithmus? • Er muss das richtige Ergebnis für alle möglichen Inputs liefern. • Er muss schnell sein. • Er soll wenig Ressourcen (Speicher, Bandbreite, CPUs, logische Gatter,…) benötigen. 05.10.2006 helmut.hauser@igi.tugraz.at Analyse von Algorithmen Wir wollen wissen wie viel Zeit und Ressourcen der Algorithmus in Abhängigkeit der Inputgröße benötigt. Abstraktion des Algorithmus (und der Datenstruktur) (Unabhängig von der eigentlichen Implementation – Sprache, OS, Protokolle, Hardware etc.) Mathematische Werkzeuge: O-Notation, Kombinatorik, Wahrscheinlichkeitstheorie, etc. 05.10.2006 helmut.hauser@igi.tugraz.at Analyse - Vorgehensweise 05.10.2006 1 Annahmen (Input,…) 2 Verbale Formulierung (Idee) 3 Abstraktion - Pseudocode 4 Schrittweise Analyse 5 Fallunterscheidung helmut.hauser@igi.tugraz.at Ein erstes Beispiel Durchschnittwerts von Zahlen Annahme: Daten liegen als lineares Feld A[n] vor. Die Länge n ist bekannt. (Nur Integerzahlen) Verbale Formulierung: In einer Schleife gehe ich alle Daten durch und summiere diese auf. Zum Schluss dividiere ich durch die Anzahl der Werte. Pseudocode: 05.10.2006 DURCHSCHNITT (A) 1: Summe = 0 2: FOR i = 1 TO n 3: Summe = Summe + A[i] 4: RETURN (Summe/n) helmut.hauser@igi.tugraz.at Analyse der Laufzeit Zählen der elementaren Schritte: • • • • • Zuweisung Arithmetische Operation Einfache Funktionen Vergleiche Indirekte Adressierung a = b , c = 3.0 +,-,*,/ sqrt(x), ln(x) =, <, >, ≥, ≤ A[i], B[k+1] Alle Schritte brauchen dabei bestimmte, aber konstante Zeiten. 05.10.2006 helmut.hauser@igi.tugraz.at Ein zweites Beispiel Sortieren durch Einfügen (Insertion-Sort) Pseudocode: 05.10.2006 INSERTION-SORT(A) 1: FOR i=2 TO n 2: h=A[i] 3: j=i-1 4: WHILE A[j]>h AND j>0 DO 5: A[j+1]=A[j] 6: j=j-1 7: A[j+1]=h helmut.hauser@igi.tugraz.at Sortieren durch Einfügen Pseudocode Zeit-Kosten INSERTION-SORT (A) 1: FOR i=2 TO n 2: h=A[i] 3: j=i-1 4: WHILE A[j]>h AND j>0 DO 5: A[j+1]=A[j] 6: j=j-1 7: A[j+1]=h 05.10.2006 helmut.hauser@igi.tugraz.at Anzahl c1 n-1 c2 n -1 c3 c4 n -1 c5 c6 c7 n t i 2 i n i 2 (ti 1) (t 1) n -1 n i 2 i Fallunterscheidungen Gründe für „worst case“ Analyse: • Entspricht der oberen Schranke – keine Überraschungen •„worst case“ kommt häufig vor (z.B. Suchen nach nicht gespeicherten Daten) • Mittlerer Fall oft ordnungsmäßig nicht besser. • oft sehr einfach am Pseudocode ablesbar Gründe für eine „best case“ Analyse: • Entspricht der unteren Schranke • Wenn der bester Fall wahrscheinlicher ist Gründe für eine „average case“ Analyse: • um eine durchschnittliche Performace zu analysieren • zusätzliches Wissen über die Inputwahrscheinlichkeitsverteilung nötig • meist komplizierter in der Analyse 05.10.2006 helmut.hauser@igi.tugraz.at Vergleich zweier Ordnungen Sortieren des Grazer Telefonbuchs: 300.000 Einträge Alter PC: 1 MIPS Andere Sortieralgorithmen Insertion Sort n2 = 90 Milliarden Schritte 90.000 sec. = 25 h > 1 Tag Supercomputer : 500 Mflops (IBM 9021-720) 05.10.2006 n ld n ≈ 5,5 Mio. Schritte 5.5 sec. n2 = 180 sec !!! helmut.hauser@igi.tugraz.at Vergleich zweier Ordnungen Sortieren des NYC Telefonbuchs: 8.000.000 Einträge Alter PC: 1 MIPS Andere Sortieralgorithmen Insertion Sort n ld n ≈ 183 Mio.Schritte 183 sec. n2 = 6.4*1013 Schritte 416.67 Tage Supercomputer : 500 Mflops (IBM 9021-720) 05.10.2006 n2 = 35 Stunden !! helmut.hauser@igi.tugraz.at Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. ( Donnerstag, 12.Okt.2006, 11:15, i13 ) 05.10.2006 helmut.hauser@igi.tugraz.at