Offene Adressierung (1)

Werbung
Offene Adressierung (1)
 Hashing mit Kollisionsvermeidung weist Objekt mit
gegebenen Schlüssel feste Position in Hashtabelle zu.
 Bei Hashing durch offene Adressierung wird Objekt mit
Schlüssel keine feste Position zugewiesen.
 Position abhängig von Schlüssel und bereits belegten
Positionen in Hashtabelle.
 Für neues Objekt wird erste freie Position gesucht. Dazu
wird Hashtabelle nach freier Position durchsucht.
 Reihenfolge der Suche hängt vom Schlüssel des
einzufügenden Objekts ab.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
1
Offene Adressierung (2)
 Keine Listen zur Kollisionsvermeidung. Wenn Anzahl
eingefügter Objekte ist m, dann sind keine weiteren
Einfügungen mehr möglich.
 Listen zur Kollisionsvermeidung möglich, aber Ziel von
offener Adressierung ist es, Verfolgen von Verweisen
zu vermeiden.
 Da keine Listen benötigt werden, kann die Hashtabelle
vergrößert werden.
 Suchen von Objekten in der Regel schneller, da keine
Listen linear durchsucht werden müssen.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
2
Offene Adressierung (3)
 Laufzeit für Einfügen nur noch im Durchschnitt (1).
 Entfernen von Objekten schwierig, deshalb
Anwendung von offener Adressierung oft nur, wenn
Entfernen nicht benötigt wird.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
3
Hashfunktionen bei offener Adressierung
 Hashfunktion legt für jeden Schlüssel fest, in welcher
Reihenfolge für Objekte mit diesem Schlüssel nach
freier Position in Hashtabelle gesucht wird.
 Hashfunktion h von der Form
h : U  0,1, , m  1  0,1, , m  1.
m:=Größe der Hashtabelle.
 Verlangen, dass für alle Schlüssel k die Folge
hk ,0, hk ,1, , hk , m  1 eine Permutation der
Folge 0,1, , m  1 ist.

hk ,0, hk ,1, , hk , m  1 heißt Testfolge bei
Schlüssel k.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
4
Offene Adressierung - Illustration
79
69
98
72
50
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
5
Analyse von offener Adressierung (1)
Definition 13.4: Nehmen wir an, dass für jeden Schlüssel
jede der m! Permutationen der Folge (0,1,...,m-1)
mit gleicher Wahrscheinlichkeit die Testfolge ist,
so nennen wir dieses uniformes offenes Hashen.
Satz 13.5 : Ist der Lastfaktor einer Hashtabelle bei
uniformen offenem Hashing , so ist die erwartete
Anzahl von Tests bei einer nicht erfolgreichen Suche
1/(1- ).
Korollar 13.6: Ist der Lastfaktor einer Hashtabelle bei
uniformen offenem Hashing , so ist die erwartete
Anzahl von Tests bei einer Einfügung 1/(1- ).
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
6
Analyse von offener Adressierung (2)
Satz 13.7: Ist der Lastfaktor einer Hashtabelle bei
uniformen offenem Hashing , so ist bei einem
zufälligen Suchobjekt die erwartete Anzahl von Tests
bei einer erfolgreichen Suche höchstens
1  1 
ln
.
α 1 α 
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
7
Hashing – Zusammenfassung (1)
 Hashing ist eine einfache Methode Wörterbücher zu
implementieren.
 Hashing unterstützt also Einfügen, Entfernen und Suchen
von Objekten.
 Einfügen benötigen im worst-case konstante Laufzeit.
 Suchen und Entfernen benötigt bei geeigneten Annahmen
im Erwartungswert ebenfalls konstante Zeit.
 In der Praxis ist Hashing sehr erfolgreich.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
8
Hashing – Zusammenfassung (2)
 Haben zwei Varianten kennen gelernt:
1. Hashing mit Kollisionsverwaltung durch Listen.
2. Offene Adressierung zur Kollisionsvermeidung.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
9
Universelles Hashen – Idee
 Bei jeder Hashfunktion gibt es schlechte Eingaben, d.h.,
eine Folge von Einfügeoperationen, so dass Suche Zeit
linear in der Anzahl der gespeicherten Objekte benötigt.
Es müssen Objekte und Schlüssel so gewählt werden,
dass alle Hashwerte identisch sind.
 Lösung besteht darin, nicht eine Hashfunktion zu wählen,
sondern eine ganze Menge von Hashfunktionen.
Unabhängig von Schlüsseln wird dann eine der
Hashfunktionen ausgewählt. Führt zu universellem
Hashing.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
10
Universelles Hashen - Definition
Definition 13.8: Sei H eine endliche Menge von Funktionen
von U nach 0,1, , m  1. Die Menge H heisst
universell, wenn für je zwei Schlüssel k , l mit k  l
gilt:
Die Anzahl der Funktionen h  H mit hk   hl  ist
H
höchstens
.
m
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
11
Ausblick – Perfektes Hashen
 Soll nur Einfügen und Suchen unterstützt werden und
werden alle Objekte zu Beginn eingefügt, so kann
Hashing verbessert werden.
 n Objekte werden zu Beginn in Zeit n eingefügt.
 Jede Suche benötigt danach im worst-case Zeit 1.
 Idee wie bei Hashing mit Kollisionsverwaltung. Allerdings
werden nicht Listen zur Kollisionsverwaltung benutzt,
sondern wieder Hashtabellen.
 Verfahren wird perfektes Hashing genannt.
SS 2009
Datenstrukturen und Algorithmen 13. Hashing
12
14. Elementare Graphalgorithmen
 Graphen sind eine der wichtigsten Modellierungskonzepte
der Informatik
 Graphalgorithmen bilden die Grundlage vieler
Algorithmen in der Praxis
 Zunächst kurze Wiederholung von Graphen.
 Dann Darstellungen von Graphen
 Schließlich einfache Graphalgorithmen:
Breiten- und Tiefensuche, Zusammenhangskomponenten,
Minimalspannende Bäume
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
13
Wiederholung Graphen – Gerichtete Graphen
 Ein gerichteter Graph G ist ein Paar (V,E), wobei V
eine endliche Menge ist und E  V  V .
 Elemente aus V heißen Knoten, Elemente aus E
heißen Kanten. Entsprechend heißt V Knotenmenge
und E heißt Kantenmenge von G.
 Kanten sind geordnete Paare von Knoten. Kanten der
Form (u,u), u  V , sind zugelassen und heißen
Schleifen.
 Ist u, v   E , so sagen wir, dass die Kante von u nach
v führt. Sagen auch, dass u und v adjazent sind.
Müssen dann aber noch Richtung berücksichtigen.
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
14
Illustration gerichteter Graph
V  1,2,3,4,5,6
E  1,2, 2,2, 2,4 , 2,5 , 4,1, 4,5 , 5,4 , 6,3 
SS 2009
1
2
3
4
5
6
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
15
Wiederholung Graphen – Ungerichtete Graphen
 Ein ungerichteter Graph G ist ein Paar (V,E), wobei V
eine endliche Menge ist und E eine Menge von
2-elementigen Teilmengen von V ist.
 Elemente aus V heißen Knoten, Elemente aus E
heißen Kanten. Entsprechend heißt V Knotenmenge
und E heißt Kantenmenge von G.
 Formal haben Kanten die Form u, v mit u, v  V .
Schreiben aber wie bei gerichteten Graphen Kanten
als Paare (u,v), unterscheiden dabei aber nicht
zwischen (u,v) und (v,u). Kanten der Form (u,u)
sind nicht zugelassen.
 Ist u, v   E , so sagen wir, dass u und v adjazent sind.
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
16
Illustration ungerichteter Graph
V  1,2,3,4,5,6
E  1,2, 1,5 , 2,5 , 6,3 
SS 2009
1
2
3
4
5
6
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
17
Darstellung von Graphen – Adjazenzlisten (1)
 Die Adjazenzlisten-Darstellung eines Graphen
G=(V,E) besteht aus einem Array Adj von V Listen.
Pro Knoten u enthält Adj damit genau eine Liste
Adju.
 Für alle u  V enthält Adju alle Knoten, die zu u
adjazent sind. Äquivalent, Adju enthält alle Knoten
v, so dass u, v   E .
 Knoten in Adju sind in beliebiger Reihenfolge
gespeichert.
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
18
Darstellung von Graphen – Adjazenzlisten (2)
 Ist G gerichtet, so enthalten alle Listen in Adj
zusammen genau E Einträge.
 Ist G ungerichete, so enthalten alle Listen in Adj
zusammen genau 2 E Einträge, denn eine Kante
(u,v) führt zu Eintrag v in Adju und zu Eintrag
u in Adjv .
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
19
Darstellung von ungerichteten Graphen –
Adjazenzlisten
2
1
3
5
1
2
3
4
5
SS 2009
4
2
1
2
2
4
5
5
4
5
1
/
3
4
/
/
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
3
2
/
/
20
Darstellung von gerichteten Graphen –
Adjazenzlisten
1
2
3
4
5
6
1
2
3
4
5
6
SS 2009
2
5
6
2
4
6
4
/
5
/
/
/
/
/
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
21
Darstellung von Graphen – Adjazenzmatrix
 Für die Adjazenzmatrix-Darstellung eines Graphen
nehmen wir an, dass die Knoten in V mit den
Zahlen von 1, , V nummeriert sind.
 Die Adjazenzmatrix von G ist dann eine V  V Matrix
A  a ij  mit
 1, falls i, j   E
a ij  
.
sonst
0,
 Ist G ein ungerichteter Graph, so ist die Matrix A
symmetrisch, d.h. für alle (i,j) gilt a ij  a ji .
 .
 Adjazenmatrix benötigt immer Speicher  V
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
22
Darstellung von ungerichteten Graphen Adjazenzmatrix
2
1
3
5
SS 2009
4
1
2
3
4
5
1
0
1
0
0
1
2
1
0
1
1
1
3
0
1
0
1
0
4
0
1
1
0
1
5
1
1
0
1
0
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
23
Darstellung von gerichteten Graphen - Adjazenzmatrix
SS 2009
1
2
3
4
5
6
1
2
3
4
5
6
1
0
1
0
1
0
0
2
0
0
0
0
1
0
3
0
0
0
0
1
1
4
0
1
0
0
0
0
5
0
0
0
1
0
0
6
0
0
0
0
0
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
24
Vergleich der Darstellungen
 Die Adjazenzlisten-Darstellung ist besser, wenn E
2
viel kleiner ist als V , also bei dünn besetzten
Graphen.
 Die Adjazenzmatrix-Darstellung ist besser, wenn E
2
etwa so groß ist wie V , also bei dicht besetzten
Graphen.
 Mit Adjazenzmatrix kann bei je zwei Knoten u,v in
konstanter Zeit überprüft werden, ob u, v   E .
 Die meisten Graphenalgorithmen in dieser Vorlesung
benutzen allerdings Adjazenzlisten.
SS 2009
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
25
Herunterladen