Kapitel 1: Motivation / Grundlagen Datenstrukturen Sommersemester 2010 Steffen Lange 1/1, Folie 1 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen 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 • • 1/1, Folie 2 per e-Mail: per Telefon: © 2010 Prof. Steffen Lange [email protected] 06151–16 –8417 - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Literatur • • • • • 1/1, Folie 3 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. © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel 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 Kapitel 1: Motivation / Grundlagen Einführendes Beispiel 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 Kapitel 1: Motivation / Grundlagen Einführendes Beispiel Beispiel – Daten für die Aktie xyz • 1/1, Folie 6 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 € © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel 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 Kapitel 1: Motivation / Grundlagen Einführendes Beispiel 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 1/1, Folie 8 zulässige Eingabe: • Folge a[1],...,a[n] von rationalen Zahlen zulässige Ausgabe: • bestimme z = max { f(i,k) | 1≤ i ≤ k ≤ n } © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel Algorithmus 1 (/* normal */) 1. 2. 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 */) Bestimme ein Paar (i,k) für das f(i,k) maximal ist und gib f(i,k) aus. Analyse von Algorithmus 1 • • • 1/1, Folie 9 A(n) = ... = 1/2*(n*(n-1)) V(n) = ... = 1/2*(n*(n+1)) - 1 T(n) = A(n) + V(n) = n2 - 1 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel 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 Crechts(i,k) und Clinks(i,k) wie folgt definiert: • Crechts(i,k) = max { f(j,k) | i ≤ j ≤ k } • Clinks(i,k) = max { f(i,j) | i ≤ j ≤ k } für alle zulässigen Paare (i,k) sei Cmax(i,k) wie folgt definiert: • Cmax(i,k) = max { f(j,m) | i ≤ j ≤ m ≤ k } Cmax(1,8) = 8 Tag 1 2 3 4 5 6 7 8 K-änd. -0.5 2 -1 1 3.5 -13 3 5 Crechts(1,4) = 2 1/1, Folie 10 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Clinks(5,8) = 3.5 Kapitel 1: Motivation / Grundlagen Einführendes Beispiel Algorithmus 2 (/* divide and conquer; Berechnung von cmax(1,n) */) 1. 2. Falls n = 1, so gib a[n] aus. Falls n > 1, so gehe gehe wie folgt vor: • • • Berechne mit diesem Algorithmus Cmax(1,n/2) und Cmax(n/2+1,n). Berechne Crechts(1,n/2) und Clinks(n/2+1,n). Bestimme M = max { Cmax(1,n/2),Cmax(n/2+1,n),Crechts(1,n/2)+Clinks(n/2+1,n) } und gib M aus. Analyse von Algorithmus 2 • 1/1, Folie 11 T(n) = 2*T(n/2) + 2n - 1 = ... = 2n*log(n) - n + 1 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel Algorithmus 3 (/* clever */) 1. 2. 3. Setze Max = max { a[1],0 } und Max* = Max. Für z = 2,...,n: • Bestimme Max* = max { Max*+a[z],0 }. • Max = max { Max*,Max } 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: • • 1/1, Folie 12 Max = max { Cmax(1,z),0 } Max* = max { Crechts(1,z),0 } © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel Algorithmus 3 (/* clever */) 1. 2. Setze Max = max { a[1],0 } und Max* = Max. Für z = 2,...,n: • Bestimme Max* = max { Max*+a[z],0 }. • Max = max { Max*,Max } Falls Max > 0, so gib Max aus. Sonst bestimme z = max { a[1],...,a[n] } und gib z aus. 3. Analyse von Algorithmus 3 • • • 1/1, Folie 13 A(n) = n - 1 V(n) ≤ 1 + 2*(n - 1) + 1 + n - 1 = 3n - 1 T(n) = A(n) + V(n) ≤ 4n - 2 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Einführendes Beispiel Vergleich der Algorithmen 1/1, Folie 14 Anzahl der Elemente normal divide & conquer clever 4 (= 22) 15 13 14 16 (=24) 255 113 62 64 (=26) 4095 705 254 256 (=28) 65535 3841 1022 1024 (=210) 1048575 19457 4094 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Zielstellungen • • • • 1/1, Folie 15 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 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 1: Motivation / Grundlagen Gliederung 1. 2. 3. 4. 5. 6. 1/1, Folie 16 Motivation / Grundlagen Sortierverfahren Elementare Datenstrukturen / Anwendungen Bäume / Graphen Hashing Algorithmische Geometrie © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen