Datenstrukturen - fbi.h

Werbung
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
Herunterladen