Datenstrukturen Zusammenfassung der zweiten

Werbung
Datenstrukturen
Zusammenfassung der zweiten Hälfte
der Vorlesung
Sommersemester 2010
Isolde Adler
Ankündigung
Zusammenfassung 2. Teil
Seminar-Ankündigung
• WS 2010/11: BSc-Seminar zu aktuellen Themen der theoretischen
Informatik:
Perlen der theoretischen Informatik“ (ATThI-BS)
”
• Für Studierende mit besonderem Interesse an theoretischer
Informatik.
• in Vorträgen werden Highlights der theoretischen Informatik
vorgestellt
• Ziele: Kenntnis zentraler und aktueller Methoden und Verfahren der
theoretischen Informatik, Einübung von Literatursuche und -analyse,
Präsentationstechniken
• Anmeldung bis Donnerstag, 15.7.2010 im LSF
Isolde Adler
Datenstrukturen 2010
2/15
Ankündigung
Zusammenfassung 2. Teil
Ablauf der Klausur
• Bitte tragen Sie sich (falls noch nicht geschehen) in die Listen ein
• Seien Sie zur Klausur spätestens um 9:00 da.
• Außer einem dokumentenechten Schreibstift sind keine weiteren
Hilfsmittel zugelassen. (Insbesondere: Kein Vorlesungsskript, keine
mitgebrachten Notizen, kein von Ihnen mitgebrachtes Papier, kein
Taschenrechner, kein Handy. Bitte beachten Sie, dass ein während
der Klausur eingeschaltetes Handy als Betrugsversuch gewertet
wird.)
• Schreibpapier wird von uns bereitgestellt.
• Die Sitzordnung wird von uns festgelegt und kurz vor Beginn der
Klausur bekanntgegeben.
Checkliste – zur Klausur müssen Sie mitbringen:
• einen dokumentenechten Schreibstift
• einen gültigen Lichtbildausweis (z.B. Ihre Goethe-Card oder Ihren
Personalausweis)
• Ihren Studierendenausweis (... es sei denn, Sie sind als
Schülerstudent für die Veranstaltung angemeldet)
Isolde Adler
Datenstrukturen 2010
3/15
Ankündigung
Zusammenfassung 2. Teil
Zur Vorbereitung der Klausur
• Der Stoff bis einschließlich der Vorlesung am 29.6. ist
klausurrelevant.
• Wiederholen Sie die einfachen Übungsaufgaben.
• Lernen Sie auf jeden Fall die Definitionen der behandelten
Datenstrukturen auswendig.
• Nutzen Sie auch das Logbuch auf der Webseite für einen Überblick
über die Themen
• Machen Sie sich einen Spickzettel – bringen sie ihn aber nicht mit in
die Klausur.
• Lernen Sie auch in kleinen Gruppen: stellen Sie sich gegenseitig
Klausuraufgaben!
Repititorium vor der Nachklausur: Fr, 24.9.2010 und Mo, 27.9.2010
10:00-12:00 und 13:30-15:30, Magnus-Hörsaal.
Isolde Adler
Datenstrukturen 2010
4/15
Ankündigung
Zusammenfassung 2. Teil
Zweiter Teil der Vorlesung
Was ist wichtig?
Isolde Adler
Datenstrukturen 2010
5/15
Ankündigung
Zusammenfassung 2. Teil
Der abstrakter Datentyp Wörterbuch“
”
Operationen:
insert(x), remove(x) und lookup(x).
Binäre Suchbäume:
• speichern die Schlüssel in den Knoten eines Binärbaums.
• Wesentlich: die binäre Suchbaumordnung: alle im linken Teilbaum
eines Knoten v gespeicherten Schlüssel sind kleiner als der von v
gespeicherte Schlüssel ist. Alle im rechten Teilbaum von v
gespeicherten Schlüssel sind größer.
• Mit der binären Suchbaumordnung kann ein Schlüssel schnell
gefunden werden, indem die namensgebende Binärsuche
durchgeführt wird. Die Dauer einer
lookup-Operation/remove-Operation im worst-case proportional zur
Tiefe.
• die Tiefe eines binären Suchbaums mit n Schlüsseln ist blog2 nc im
best-case, n − 1 im worst-case und O(log2 n) im Erwartungsfall.
Isolde Adler
Datenstrukturen 2010
6/15
Ankündigung
Zusammenfassung 2. Teil
AVL-Bäume
Ein AVL-Baum ist ein binärer Suchbaum mit Höhenbalancierung
• In der Höhenbalancierung wird verlangt, dass sich, für jeden Knoten
v , die Höhe des linken und rechten Teilbaums von v um höchstens
eins unterscheiden.
• Die lookup-Operation wird wie für binäre Suchbäume mit binärer
Suche ausgeführt.
• Die remove-Operation wird im Wesentlichen umgangen und durch
einen lazy remove“ ersetzt.
”
• Links- und Rechtsrotationen sind die wesentlichen Hilfsmittel in der
Ausführung der insert-Operation. Während im Zick-Zick und
Zack-Zack Fall nur eine Rotation pro Iteration auszuführen ist,
müssen im Zick-Zack und Zack-Zick Fall zwei Rotationen ausgeführt
werden.
• Die Ausführungszeiten von insert, remove und lookup sind für einen
AVL-Baum mit n Schlüsseln durch O(log2 n) beschränkt.
Isolde Adler
Datenstrukturen 2010
7/15
Ankündigung
Zusammenfassung 2. Teil
Splay-Bäume
• Binäre Suchbäume als Grundstruktur. Implementiere lookup, insert
und remove durch eine einzige Operation, die Splay-Operation.
• Wenn nach einem Schlüssel x gefragt wird, dann wird der Schlüssel
durch die Splay-Operation zur Wurzel gebracht,
Suchpfad-Eigenschaft: die Knoten auf dem Suchpfad rücken der
Wurzel um fast die Hälfte näher.
• Nachfolgende Operationen für andere Schlüssel werden Schlüssel x
langsam tiefer und tiefer nach unten drücken.
Wenn aber nach einiger Zeit Schlüssel x wieder abgefragt wird, wird
er sofort wieder zur Wurzel gebracht.
• Wenn zwischen sukzessiven Anfragen nach x nicht zuviel Zeit
vergeht, ist jede Abfrage schnell, da x nicht tief im Baum sitzt.
Wenn n Splay-Operationen (in einem anfänglich leeren Splay-Baum)
durchgeführt werden, beträgt die worst-case Laufzeit O(n log2 n).
Die Laufzeit einer einzelnen Operation kann allerdings bis zu O(n)
Schritte verschlingen.
Isolde Adler
Datenstrukturen 2010
8/15
Ankündigung
Zusammenfassung 2. Teil
(a, b)-Bäume
. . . implementieren Wörterbücher für externe Speicher: Die Anzahl der
Festplattenzugriffe ist durch O(loga n) beschränkt, wenn n Schlüssel
gespeichert werden.
• Jeder Knoten eines (a, b)-Baums hat höchstens b Kinder. Mit
Ausnahme der Wurzel und der Blätter haben alle anderen Knoten
mindestens a Kinder.
Alle innneren Knoten mit genau c Kindern speichern eine sortierte
Folge von genau c − 1 Schlüsseln. Diese Schlüssel erlauben eine
gezielte Ansteuerung der c Teilbäume während einer Suche.
Alle Blätter speichern mindestens a − 1 und höchstens b − 1
Schlüssel.
• Bei insert: ein Knoten mit zu vielen, also b Schlüsseln, wird in zwei
Knoten aufgeteilt und ein trennender Schlüssel an den Vater
abgegeben. Der Vater hat jetzt möglicherweise zu viele Schlüssel,
aber wir haben das Problem nach oben geschoben“.
”
Isolde Adler
Datenstrukturen 2010
9/15
Ankündigung
Zusammenfassung 2. Teil
(a, b)-Bäume – remove
In der Ausführung einer remove-Operation unterscheidet man die
Methoden des Schlüsselklaus bzw. der Fusion.
• Hat ein Knoten v zuwenige, also a − 2 Schlüssel, wird zuerst ein
Schlüsselklau versucht: Hat ein Geschwisterknoten w von v
genügend viele, also a Schlüssel, dann wird der v und w trennende
Schlüssel des Vaters vom Kind v “geklaut“.
• Ist w ein rechter Geschwisterknoten, dann übergibt w seinen
kleinsten Schlüssel an den Vater und seinen linkesten Teilbaum an v .
Ist w ein linker Geschwisterknoten, dann übergibt w seinen größten
Schlüssel an den Vater und seinen rechtesten Teilbaum an v .
• Wenn aber jeder Geschwisterknoten nur a − 1 Kinder hat, dann wird
v mit einem Geschwisterknoten w verschmolzen; der v und w
trennende Schlüssel des Vaters wird dem neuen Knoten hinzugefügt.
Wir haben damit, wie bei AVL-Bäumen, das Problem nach oben
verschoben, da der Vater jetzt einen Schlüssel verloren hat.
Isolde Adler
Datenstrukturen 2010
10/15
Ankündigung
Zusammenfassung 2. Teil
Hashing
Der Auslastungsfaktor λ = mn spielt eine wichtige Größe: n ist die
Anzahl der in der Hashtabelle eingefügten Schlüssel und m ist die Größe
der Hashtabelle.
Hashing mit Verkettung
• alle Kollisionen, also alle Schlüssel x mit Hashwert h(x) = i, werden
in eine sortierte Liste eingefügt.
• Die erwartete Länge einer Liste ist durch 1 + λ beschränkt und
damit ist die erwartete Laufzeit einer insert, remove oder
lookup-Operation durch O(1) + λ beschränkt.
• Eine erfolgreiche Hashfunktion ist h(x) = x mod m. Hier sollte m
eine Primzahl sein, die genügend weit von einer Zweierpotenz
entfernt ist.
Isolde Adler
Datenstrukturen 2010
11/15
Ankündigung
Zusammenfassung 2. Teil
Hashing mit offener Addressierung
• Es wird direkt in die Tabelle gehasht.
• Benutze dazu eine Folge h0 , h1 , . . . , hm−1 von Hashfunktionen: Ist
•
•
•
•
der ite Versuch des Einfügens von Schlüssel x an Position hi (x)
nicht erfolgreich gewesen, dann wird die Position hi+1 (x) im
nächsten Versuch getestet.
Insbesondere verwendet man die folgende Daumenregel: Ist der
Auslastungsfaktor auf 21 angestiegen, dann lade die Tabelle in eine
neue Tabelle doppelter Größe.
Im linearen Austesten verwendet man die Folge
hi (x) = x + i mod m
im doppelten Hashing benutzt man Hashfunktionen
f (x) = x mod m und g (x) = x mod m∗ und setzt
hi (x) = f (x) + i · (m∗ − g (x)) mod m.
1
Die Zeit für eine erfolglose Suche ist durch O( 1−λ
) beschränkt. Als
Konsequenz sollte man zu große Auslastungsfaktoren vermeiden.
Im linearen Austesten besteht die Gefahr der Klumpenbildung,
allerdings sind die einzelnen Hashfunktionen wesentlicher schneller
auswertbar als für das doppelte Hashing.
Isolde Adler
Datenstrukturen 2010
12/15
Ankündigung
Zusammenfassung 2. Teil
Cuckoo-Hashing
Zwei Hashtabellen T1 und T2 und zwei Hashfunktionen h1 und h2 .
• Insert(x): Wiederhole bis zu M mal,
• Speichere x in Tabelle T1 und Zelle h1 (x) ab.
• Wenn die Zelle h1 (x) in Tabelle T1 durch einen Schlüssel y belegt
war, dann füge y in Tabelle T2 und Zelle h2 (y ) ein.
• Wenn die Zelle h2 (y ) in Tabelle T2 durch einen Schlüssel z belegt
war, dann setze x = z und beginne eine neue Iteration.
• Lookup(x): Überprüfe Zelle h1 (x) in Hashtabelle T1 und
gegebenenfalls Zelle h2 (x) in Hashtabelle T2 : O(1)
• Remove(x): Wenn x vorhanden ist, dann entferne x aus Zelle h1 (x)
in Hashtabelle T1 oder aus Zelle h2 (x) in Hashtabelle T2 : O(1).
Isolde Adler
Datenstrukturen 2010
13/15
Ankündigung
Zusammenfassung 2. Teil
Universelles Hashing
Bei Hashing mit Verkettung/mit offener Adressierung: worst-case Θ(n).
Idee: wähle aus einer Menge H von Hashfunktionen zufällig eine Funktion.
(Inuition: für eine zufällig gewählte Funktion ist es schwerer, Folgen von
Operationen zu konstruieren, die eine schlechte Laufzeit aufweisen.)
• Sei H c-universell. Dann gibt es keine zwei Schlüssel, die mit
Wahrscheinlichkeit >
c
m
in die gleiche Zelle gehasht werden.
• c-universelle Klassen von Hashfunktionen ermöglichen für jede Folge
von Operationen mit hoher Wahrscheinlichkeit effizientes Hashing
(bei kleinem c):
• Jede Folge von n Operationen wird von
einer c-universellen Klasse in
c n
erwarteter Zeit höchstens n 1 +
(linear, falls n = O(m)) .
2m
bearbeitet
• Wir haben eine c-universelle Klasse von Hashfunktionen für kleines c
kennengelernt (welche?).
Isolde Adler
Datenstrukturen 2010
14/15
Ankündigung
Zusammenfassung 2. Teil
Perfektes Hashing
• Eine Hashfunktion h : U → {0, ..., m − 1} heißt perfekt für S ⊆ U,
falls h(x) 6= h(y ) ∀x, y ∈ S, x 6= y .
• Wenn also alle Operationen nur Operanden aus S verwenden,
werden sie jeweils in Zeit O(1) ausgeführt.
• Perfekte Hashfunktionen sind dort besonders gut geeignet, wo ein
festes S im vorraus bekannt ist (z. B. in einem Interpreter oder
Compiler die Menge der Schlüsselworte der Programmiersprache).
• . . . mit quadratischem/linearen Speicherplatzbedarf
P2P
Information Retrieval
Isolde Adler
Datenstrukturen 2010
15/15
Herunterladen