Kurs:Algorithmen und Datenstrukturen/Vorlesung/Hashtabellen Aufwand

Aus testwiki
Version vom 26. Februar 2016, 12:11 Uhr von imported>Dirk Hünniger (hsrw)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Vorlage:Navigationsleiste/Algorithmen und Datenstrukturen


Aufwand

Auf dieser Seite wird der Aufwand von Hashtabellen behandelt.

Bei geringer Kollisionswahrscheinlichkeit beträgt der Aufwand beim Suchen O(1) und beim Einfügen ebenfalls O(1). Das Löschen bei den Sondierverfahren hat zwei mögliche Aufwandsklassen. Wenn nur die Einträge als gelöscht markiert werden, beträgt der Aufwand O(1), aber wenn ein Rehashen der gesamten Tabelle notwendig ist, dann beträgt der Aufwand O(n).

Verkettete Überläufer

Der Füllgrad (load factor) beträgt α=m/N wobei m die Anzahl der gespeicherten Elemente ist und N die Anzahl der Buckets. Bei erfolgloser Suche, das heißt bei Hashing mit Überlauflisten, beträgt der Aufwand Θ(1+α) Bei der erfolgreichen Suche ist der Aufwand ebenfalls in dieser Größenordnung.

Sondieren

Der Aufwand beim Suchen beträgt 11α

Typische Werte sind 110.5=2

und 110.9=10

Die exakte Analyse basiert auf der Aufsummierung der Wahrscheinlichkeiten, dass i Elemente das Bucket i belegen bei einer Gleichverteilung.


Die Wahrscheinlichkeiten basieren auf dem Füllgrad α. Wenn das Bucket belegt ist, ist die Wahrscheinlichkeit α. Wenn das Bucket und das sondierte Bucket belegt sind, dann beträgt die Wahrscheinlichkeit α2.

1+α+α2+α3+...=11α

Bei der erfolgreichen Suche ist der Aufwand besser, hat aber die gleiche Größenordnung. Bei einer mittleren Anzahl von Sondierungen über alle Schlüssel beträgt der Aufwand

1αln(11α)

Für ein α nahe 1 gilt 1α1

Bei α=0.99 gilt, dass 100 Sondierungen für eine erfolglose Suche gebraucht werden und in 100= 5 erfolgreiche Suchen.


Discussion