Datenstrukturen Sommersemester 2010 Steffen Lange 1/1, Folie 1 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Organisatorisches Vorlesung wöchentlich; zwei Blöcke Folien im Netz (/* bitte zur Vorlesung mitbringen */) Übungsblätter im Netz (/* bei Bedarf */) http://www.fbi.h-da.de/~slange Anregungen / Kommentare / Fragen per e-mail: slange@fbi.h-da.de per Telefon: 06151 16 8417 1/1, Folie 2 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Literatur T. Ottmann, P. Widmayer, Algorithmen und Datenstrukturen, BI Wissenschaftsverlag, 1990. H. Reß, G. Viebeck, Datenstrukturen und Algorithmen in C++, Hanser Verlag, 2003. R. Klein, Algorithmische Geometrie, 2. Auflage, Springer Verlag 2005. U. Schöning, Algorithmik, Spektrum Akademischer Verlag, 2001. Th.H. Cormen, Ch.E. Leiserson, R. Rivest, C. Stein, Algorithmen - Eine Einführung, 2. Auflage, Oldenbourg Verlag, 2007. 1/1, Folie 3 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Aufgabenstellung Ein großes Wirtschaftsmagazin will eine Analyse der Börsenentwicklung der letzten 5 Jahre erstellen... Dabei soll u.a. für jede Aktie nachträglich ein bester Einkaufstag und Verkaufstag festgestellt werden.... Das Wirtschaftsmagazin hat Informationen über die Börsennotierungen gekauft. Für jede Aktie gibt es eine Zahlenfolge. Die erste Zahl ist der Kurs der Aktie am ersten Börsentag und jede folgende Zahl gibt in der Reihenfolge der Börsentage die absolute Kursveränderung gegenüber dem Vortag an.... Anhand der gegebenen Zahlenfolge soll der im gegebenen Zeitraum durch einen einmaligen Kauf und Verkauf der Aktie maximal erzielbare Gewinn bestimmt werden. 1/1, Folie 4 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Beispiel Daten für die Aktie xyz Kurs der Aktie am 0. Tag: 120 Tag 1 2 3 4 5 6... K-änd. -0.5 2-1 1 3.5-13... Aufgabe... Anhand der gegebenen Zahlenfolge soll der im gegebenen Zeitraum durch einen einmaligen Kauf und Verkauf der Aktie maximal erzielbare Gewinn bestimmt werden. 1/1, Folie 5 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Beispiel Daten für die Aktie xyz Kurs der Aktie am 0. Tag: 120 Tag 1 2 3 4 5 6... K-änd. -0.5 2-1 1 3.5-13... Einkaufstag: 0 Verkaufstag: 1 Gewinn: -0.5 Einkaufstag: 0 Verkaufstag: 5 Gewinn: 5.0 Einkaufstag: 0 Verkaufstag: 2 Gewinn: 1.5 Einkaufstag: 1 Verkaufstag: 5 Gewinn: 5.5 1/1, Folie 6 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Beispiel Daten für die Aktie xyz Kurs der Aktie am 0. Tag: 120 Tag 1 2 3 4 5 6... K-änd. -0.5 2-1 1 3.5-13... Lösungsansatz... finde Tage i und k (/* 0 < i k */), so daß die Summe der Kursänderungen für die Tage i, i+1,..., k maximal ist... offenbar ist dann der Tag i-1 der beste Einkaufstag und der Tag k der beste Verkaufstag 1/1, Folie 7 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
algorithmische Fragestellung finde einen möglichst effizienten Algorithmus zur Lösung des folgenden algorithmischen Problems (/* die Anzahl der benötigten Vergleiche V(n) und der benötigten Additionen A(n) soll klein sein */) es sei a[1],...,a[n] eine Folge rationaler Zahlen für alle Paare (i,k) mit 1 i k n sei f(i,k) wie folgt definiert: k f(i,k) = Σ a[j] j=i zulässige Eingabe: Folge a[1],...,a[n] von rationalen Zahlen zulässige Ausgabe: bestimme z = max { f(i,k) 1 i k n } 1/1, Folie 8 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Algorithmus 1 (/* normal */) 1. Berechne nacheinander für jedes zulässige Paar (i,k) den Wert von f(i,k) (/* benutze dabei, daß f(i,k+1) = f(i,k) + a[k+1] gilt */) 2. Bestimme ein Paar (i,k) für das f(i,k) maximal ist und gib f(i,k) aus. Analyse von Algorithmus 1 A(n) =... = 1/2*(n*(n-1)) V(n) =... = 1/2*(n*(n+1)) - 1 T(n) = A(n) + V(n) = n 2-1 1/1, Folie 9 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Algorithmus 2 (/* divide and conquer */) a[1],...,a[n] sei eine Folge rationaler Zahlen, wobei n eine Zweierpotenz ist für alle zulässigen Paare (i,k) seien die Werte C rechts (i,k) und C links (i,k) wie folgt definiert: C rechts (i,k) = max { f(j,k) i j k } C links (i,k) = max { f(i,j) i j k } für alle zulässigen Paare (i,k) sei C max (i,k) wie folgt definiert: C max (i,k) = max { f(j,m) i j m k } C max (1,8) = 8 Tag 1 2 3 4 5 6 7 8 K-änd. -0.5 2-1 1 3.5-13 3 5 C rechts (1,4) = 2 C links (5,8) = 3.5 1/1, Folie 10 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Algorithmus 2 (/* divide and conquer; Berechnung von c max (1,n) */) 1. Falls n = 1, so gib a[n] aus. 2. Falls n > 1, so gehe gehe wie folgt vor: Berechne mit diesem Algorithmus C max (1,n/2) und C max (n/2+1,n). Berechne C rechts (1,n/2) und C links (n/2+1,n). Bestimme M = max { C max (1,n/2),C max (n/2+1,n),c rechts (1,n/2)+C links (n/2+1,n) } und gib M aus. Analyse von Algorithmus 2 T(n) = 2*T(n/2) + 2n - 1 =... = 2n*log(n) - n + 1 1/1, Folie 11 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Algorithmus 3 (/* clever */) 1. Setze Max = max { a[1],0 } und Max* = Max. 2. Für z = 2,...,n: Bestimme Max* = max { Max*+a[z],0 }. Max = max { Max*,Max } 3. Falls Max > 0, so gib Max aus. Sonst bestimme z = max { a[1],...,a[n] } und gib z aus. Schleifeninvariante... für jedes z mit 2 z n gilt: Max = max { C max (1,z),0 } Max* = max { C rechts (1,z),0 } 1/1, Folie 12 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Algorithmus 3 (/* clever */) 1. Setze Max = max { a[1],0 } und Max* = Max. 2. Für z = 2,...,n: Bestimme Max* = max { Max*+a[z],0 }. Max = max { Max*,Max } 3. Falls Max > 0, so gib Max aus. Sonst bestimme z = max { a[1],...,a[n] } und gib z aus. Analyse von Algorithmus 3 A(n) = n - 1 V(n) 1 + 2*(n - 1) + 1 + n - 1 = 3n - 1 T(n) = A(n) + V(n) 4n - 2 1/1, Folie 13 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Vergleich der Algorithmen Anzahl der Elemente normal divide & conquer clever 4 (= 2 2 ) 15 13 14 16 (=2 4 ) 255 113 62 64 (=2 6 ) 4095 705 254 256 (=2 8 ) 65535 3841 1022 1024 (=2 10 ) 1048575 19457 4094 1/1, Folie 14 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Zielstellungen Kenntnis von Entwurfsmethoden für effiziente Algorithmen und Datenstrukturen für wichtige Probleme Kenntnis grundlegender Algorithmen und Datenstrukturen Verständnis für die Wechselwirkung zwischen Datenstrukturen und Algorithmen Fähigkeit, die Effizienz von Algorithmen zu analysieren 1/1, Folie 15 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen
Gliederung 1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie 1/1, Folie 16 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen