Datenstrukturen

Werbung
Datenstrukturen
Mariano Zelke
Sommersemester 2012
Datenstrukturen
Herausforderungen für Google:
I
I
Systematisches Durchsuchen von Milliarden von Websites
Pflegen eines invertierten Index mit allen Schlüsselwörtern
I
I
Beantworten von Suchanfragen
I
I
Finden/Aktualisieren/Löschen von Schlüsselwörtern im Index
Webseiten, sortiert nach Page-Rank, Herkunft und Zeit der Anfrage
Dynamisches Vorschlagsystem für Suchbegriffe
...unmöglich ohne geschickte Datenstrukturen.
Mariano Zelke
Datenstrukturen
2/21
Abstrakte Datentypen und Datenstrukturen
Ein abstrakter Datentyp besteht aus einer Sammlung von Operationen
auf einer Menge von Objekten.
Beispiele:
1. ≈ Klasse in C++/Java/ . . .
2. Menge von Zahlen,
Operationen: Einfügen, Löschen, Mitgliedschaft testen
3. Filesystem im Computer, Objekte: Dateien und Verzeichnisse
Operationen: Dateien/Verzeichnisse erstellen, löschen, umbenennen
Eine Datenstruktur ist eine Repräsentation eines abstrakten Datentyps in
einem Computer.
Datenstrukturen für:
1. Klasse: Repräsentationen der Klasse im Computer
2. Menge: Lineare Liste, sortierte Liste, Bitvektor (bit array), . . .
3. Filesystem: fat16, fat32, ext2, ext3, ext4, hpfs, reiserfs,. . .
Mariano Zelke
Datenstrukturen
3/21
Warum abstrakte Datentypen?
In Anwendungen treten dieselben Operationen für verschiedenste
Datenmengen auf.
Aber: Gesucht ist eine möglichst effiziente Implementierung!
Beispiel:
Füge Objekte in eine Menge ein und entferne Objekte daraus geordnet
nach ihrem Alter:
1. Wenn immer das jüngste Objekt zu entfernen ist:
Verwende Datentyp Stack“, ( Keller“, Stapel“).
”
”
”
2. Wenn immer das älteste Objekt zu entfernen ist:
Verwende Datentyp Warteschlange“.
”
3. Wenn Objekte zugeordnete Prioritäten haben und immer das Objekt
mit höchster Priorität zu entfernen ist
Verwende Datentyp Prioritätswarteschlange“.
”
Mariano Zelke
Datenstrukturen
4/21
Effiziente Implementierung
Membership
Eingabe: Menge M positiver ganzer Zahlen mit |M| = n, Zahl z
Frage: z ∈ M?
Beispiel: Sei M = {12, 3, 22, 8, 1, 7, 15, 4, 6, 19, 11, 16}
1. Repräsentation von M durch ein Array
12 3 22 8 1 7 15 4 6 19 11 16
lookup(z) benötigt im schlechtesten Fall n Schritte.
2. Repräsentation von M durch ein sortiertes Array
1 3 4 6 7 8 11 12 15 16 19 22
lookup(z) mit binärer Suche in ≈ log2 n Schritten.
3. Repräsentation von M durch einen Bitvektor
1 0 1 1 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1
lookup(z) in einem Schritt.
Mariano Zelke
Datenstrukturen
5/21
Inhalt der Vorlesung
Entwirf eine möglichst effiziente Datenstruktur für einen gegebenen
abstrakten Datentyp.
I
Welche abstrakten Datentypen?
I
I
I
I
I
Was heißt Effizienz? Minimiere
I
I
I
Stack: Einfügen und Entfernen des jüngsten Schlüssels.
Warteschlangen: Einfügen und Entfernen des ältesten Schlüssels.
Prioritätswarteschlangen: Einfügen und Entfernen des wichtigsten
Schlüssels.
Wörterbücher: Einfügen, Entfernen (eines beliebigen Schlüssels) und
Suche danach.
den Speicherplatzverbrauch und
die Laufzeiten der einzelnen Operationen.
Wie verhalten sich verschiedene Implementierungen bei wachsender
Eingabelänge?
I
Mariano Zelke
Führe eine asymptotische Analyse von Laufzeit und
Speicherplatzverbrauch durch.
Datenstrukturen
6/21
Zusätzlich üben Sie:
Analysefähigkeit
I was ist das Ziel/die zentrale Idee?
I was wird vorausgesetzt?
I wie wird vorgegangen?
I was ist wesentlich/unwesentlich?
I wo genau liegen Unklarheiten?
Kommunikationsfähigkeit
I exakt und verständlich formulieren
I gezielt nachfragen und konstruktiv Ideen entwickeln
Selbständiges Arbeiten
I sich selber Wissen aneignen (habe ich das wirklich verstanden?)
I Literatur- und Materialsuche
I Arbeitseinteilung und Selbsteinschätzung
Systematisches Arbeiten
I was ist die Aufgabe?
I wie gehe ich sie an?
I wie stelle ich strukturiert und verständlich dar?
Worauf wird aufgebaut?
I
Grundlagen der Programmierung 1:
I
I
Analysis und Lineare Algebra:
I
I
I
I
Kenntnis der elementaren Datenstrukturen.
Logarithmus,
Grenzwerte und
Matrizen.
Diskrete Modellierung:
I
I
Mariano Zelke
Graphen,
Mathematische Induktion und andere Beweismethoden.
Datenstrukturen
8/21
Literatur
I
Website zur Vorlesung:
http://www.tks.informatik.uni-frankfurt.de/teaching/ss12/ds
I Skript Datenstrukturen“ von Prof. Schnitger, an dem sich diese
”
Vorlesung orientiert.
I Beamer-Folien nach der entsprechenden Vorlesung
Kapitel 3-5, 10-12 und 18 in T.H. Cormen, C.E. Leiserson, R.L. Rivest und
C. Stein: Introduction to Algorithms“, second edition, MIT Press, 2001.
”
I M. T. Goodrich, R. Tamassia und D. M. Mount: Data Structures and
”
Algorithms in C++“, John Wiley, 2003.
I
I
Kapitel 1-3 in J. Kleinberg und E. Tardos: Algorithm Design“,
”
Addison-Wesley, 2005.
I
Diese und weitere Bücher im Semesterapparat zur VL in der Bibliothek
Mariano Zelke
Datenstrukturen
9/21
Klausur
I
Klausur: Freitag, 27.7.12, 9:00 Uhr, H V und H VI im Jügelhaus,
Nachklausur: 01.10.12, 9:00 Uhr, H V im Jügelhaus.
I
Die in den Übungen erreichten Punkte werden mit einem
Maximalgewicht von 10% zu den Klausurpunkten hinzu gezählt:
Wenn in der Klausur x% und in den Übungen y % erzielt
wurden, dann wird z = x + y /10 als Gesamtpunktzahl
angerechnet.
I
Die Note hängt nur von der Gesamtpunktzahl z ab.
I
Die Klausur ist bestanden, wenn z ≥ 50.
Mariano Zelke
Datenstrukturen
10/21
Übungen
I
Heute werden zwei Übungsblätter (0. und 1.) ausgegeben
I
0. Übungsblatt: Präsenzübung, keine Abgabe, Besprechung der
Aufgaben vom 16.4. bis 27.4., freie Wahl der Übungsgruppe
Regulärer Übungsbetrieb für Blatt 1,2,. . . ab 30.4.:
I
I
I
I
Übungen finden im 2-Wochen-Rhythmus statt, Anmeldung zu
Übungsgruppen über LSF bis spätestens 13.4. 11:59 Uhr
Jeder Übungszettel wird in der Vorlesung ausgegeben und ist nach
2-wöchiger Bearbeitungszeit vor der Vorlesung zurückzugeben.
Bonuspunkte für Klausur werden nur angerechnet, wenn in Übung
vorgerechnet wurde
I
Tipp: Bearbeiten Sie die Übungen gemeinsam.
Aber: Formulieren Sie die Lösungen immer selbst!
Denn verstehen müssen Sie selbst...
I
Wir bieten Ihnen gerne unsere Unterstützung an!
I
Bitte nehmen Sie unbedingt am Übungsbetrieb teil und bearbeiten
Sie die Aufgaben, denn...
Mariano Zelke
Datenstrukturen
11/21
Übungen
... davon hängt maßgeblich der Klausurerfolg ab:
Mariano Zelke
Datenstrukturen
12/21
Webseite der Veranstaltung
http://www.tks.informatik.uni-frankfurt.de/teaching/ss12/ds
I
wichtige aktuelle Informationen – bitte schauen Sie regelmäßig nach!
I
Übungsblätter, Informationen zu Bonuspunkten
I
Logbuch: nach jeder Vorlesung Stichpunkte zum Inhalt
I
weiteres Material zur Vorlesung
I
organisatorische Informationen zu den Übungsgruppen, Notengebung,
Klausur, . . .
Mariano Zelke
Datenstrukturen
13/21
Mathematische Grundlagen
Mariano Zelke
Datenstrukturen
14/21
Die Summe der ersten n Zahlen (kleiner Gauß)
n
X
i = 1 + 2 + ... + n =
i=1
n · (n + 1)
2
Beweis: vollständige Induktion
P1 nach n
1·(1+1)
Induktionsanfang: n = 1 :
X
i=1 i = 1 =
2
Induktionsschritt: n → n
P+ 1:
Induktionsannahme: ni=1 i = n·(n+1)
2
Pn+1
Pn
n·(n+1)
+ (n + 1) wegen Ind.-Annahme
i=1 i =
i=1 i + (n + 1) =
2
=
n·(n+1)+2(n+1)
2
=
(n+2)·(n+1)
2
=
(n+1)·(n+2)
2
t
u
Als Merkhilfe: ein direktes Argument:
n
P
Auf n×n - Feld zähle die Kästchen auf und unterhalb
der Hauptdiagonalen
i:
i=1
n+
1 2 3 4
Mariano Zelke
···
n2 −n
2
=
n2 +n
2
=
n·(n+1)
2
n
Datenstrukturen
15/21
Die geometrische Summe
n
X
ai = a0 + a1 + · · · + an =
i=0
an+1 − 1
falls a 6= 1.
a−1
Beweis: vollständige Induktion
n
P0 nach
i = 1 = a0+1 −1 X
Induktionsanfang: n = 0 :
a
i=0
a−1
Induktionsschritt: n → n
+
1
P
n+1
Induktionsannahme: ni=0 ai = a a−1−1
Pn+1 i Pn
i
n+1 = an+1 −1 + an+1 wegen Ind.-Annahme
i=0 a =
i=0 a + a
a−1
=
Mariano Zelke
an+1 −1+an+2 −an+1
a−1
=
an+2 −1
a−1
Datenstrukturen
t
u
16/21
Rechnen mit Logarithmen
Seien a > 1 und x > 0 reelle Zahlen.
loga (x) ist der Logarithmus von x zur Basis a und stimmt mit y genau
dann überein, wenn ay = x gilt.
(a) loga (x · y ) = loga x + loga y .
(b) loga (x y ) = y · loga (x).
(c) aloga x = x.
(d) loga x = (loga b) · (logb x).
Was ist 4log2 n ?
I
log2 n = (log2 4) · (log4 n) mit (d).
I
4log2 n = 4(log2 4)·(log4 n) = (4log4 n )log2 4 = nlog2 4 = n2 .
Was ist b loga x ?
I
loga x = (loga b) · (logb x) mit (d).
I
b loga x = b (loga b)·(logb x) = (b logb x )loga b = x loga b .
Mariano Zelke
Datenstrukturen
17/21
Binomialkoeffizienten
Der Binomialkoeffizient n über k“ ist definiert als
”
(
n·(n−1)···(n−k+1)
n!
n
= k!·(n−k)!
falls 1 ≤ k ≤ n − 1,
1·2···k
:=
k
1
falls k = 0 oder k = n.
1. Sei S eine Menge von n Elementen.
Dann hat S genau kn Teilmengen der Größe k.
n
P
n k n−k
2. Binomischer Lehrsatz: Es gilt (a + b)n =
.
k a b
Also:
n
P
k=0
k=0
n
k
=
2n
: Eine n-elementige Menge hat 2n Teilmengen.
3. Sei Perm(S) die Menge aller Permutationen von S.
Dann ist |Perm(S)| = n!
Mariano Zelke
Datenstrukturen
18/21
Laufzeitmessung
Für welchen Rechner (welche Hardware) sollen wir die Laufzeit
berechnen?
I
Analysiere die Laufzeit auf einem abstrakten Rechner:
I
I
I
I
Der Speicher besteht aus Registern, die eine ganze Zahl speichern
können.
Eine CPU führt einfache boolesche und arithmetische Operationen
aus.
Daten werden zwischen CPU und Speicher durch (indirekte) Ladeund Speicherbefehle ausgetauscht.
Damit ist die Laufzeitberechnung für unseren abstrakten Rechner
gültig, aber wir erhalten für einen speziellen Rechner nur eine bis
auf einen konstanten Faktor exakte Schätzung.
Also:
(Analysierte bzw. geschätzte Laufzeit) = ch ·(tatsächliche Laufzeit)
für einen konstanten Wert ch
Mariano Zelke
Datenstrukturen
19/21
Laufzeitmessung
Für welche Programmiersprache und welchen Compiler (welche
Software) sollen wir die Laufzeit berechnen?
I
Wir sollten“ mit einer Assemblersprache arbeiten: Wir sind vom
”
Compiler unabhängig und haben es mit einer geringen Anzahl
verschiedener Anweisungen zu tun.
I
Aber die Programmierung ist viel zu umständlich und wir wählen
deshalb C++ bzw. Pseudocode.
I
Wenn wir die Anzahl ausgeführter C++ Befehle zählen, erhalten wir
für die tatsächliche Anzahl ausgeführter Assembler Anweisungen nur
eine Schätzung, die bis auf einen konstanten Faktor exakt ist.
Also:
(Analysierte bzw. geschätzte Laufzeit) = cs ·(tatsächliche Laufzeit)
für einen konstanten Wert cs
Mariano Zelke
Datenstrukturen
20/21
Laufzeitmessung
Ziel für unsere Laufzeitanalyse kann nur sein, die Laufzeit so
abzuschätzen, dass gilt
(Analysierte bzw. geschätzte Laufzeit) = ch · cs · (tatsächliche Laufzeit),
wobei ch und cs Konstanten sind, die von der tatsächlichen Hard- und
Software abhängen.
Mariano Zelke
Datenstrukturen
21/21
Herunterladen