Programme manipulieren Mengen von Objekten. Die Mengen werden in der Regel
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Programme manipulieren Mengen von Objekten. Die Mengen werden in der Regel PowerPoint PPT Presentation


  • 77 Views
  • Uploaded on
  • Presentation posted in: General

Programme manipulieren Mengen von Objekten. Die Mengen werden in der Regel in den meisten Anwendungen laufend vergrößert, verkleinert oder nach bestimmten Elementen durchsucht. Jedes Element x einer Menge K besitzt einen Schlüssel k. Typische Operationen auf diesen dynamischen Mengen sind:

Download Presentation

Programme manipulieren Mengen von Objekten. Die Mengen werden in der Regel

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programme manipulieren mengen von objekten die mengen werden in der regel

  • Programme manipulieren Mengen von Objekten. Die Mengen werden in der Regel

  • in den meisten Anwendungen laufend vergrert, verkleinert oder nach bestimmten

  • Elementen durchsucht. Jedes Element x einer Menge K besitzt einen Schlssel k.

  • Typische Operationen auf diesen dynamischen Mengen sind:

  • Search(K,k)Suche ein Element x von K mit Schlssel k.

  • Insert(K,x)Fge das Element x in K ein.

  • Delete(K,x)Entferne das Element x aus K.

  • Minimum(K)Suche das (ein) Element von K mit minimalem Schlssel.

  • Maximum(K)Suche das (ein) Element von K mit maximalem Schlssel.

  • Predessor(K,x)Suche das Element, dessen Schlssel in der Ordnung

  • von K dem Schlssel von x vorangeht

  • (nchst kleinere Schlssel).

  • Successor(K,x)Suche das Element, dessen Schlssel in der Ordnung

  • von K auf den Schlssel von x folgt

  • (nchst grere Schlssel).

Eine dynamische Menge, die diese Operationen untersttzt,

bezeichnet man als Wrterbuch (dictionary).


Programme manipulieren mengen von objekten die mengen werden in der regel

Keine der angegebenen Datenstrukturen ermglicht gleichzeitig effizientes Suchen, Einfgen und Lschen!


Programme manipulieren mengen von objekten die mengen werden in der regel

  • Eine Hash-Tabelle ist eine Datenstruktur, die nur die Operationen

  • Suchen, Einfgen und Entfernen effizient untersttzt.

  • Sei U das Universum aller Schlssel.

  • Sei T ein Feld der Gre m.

  • Eine Abbildung h von U nach T = { 0, 1, 2, , m-1} heit Hash-Funktion:


Programme manipulieren mengen von objekten die mengen werden in der regel

U

k1

K

h(k1)

k4

k5

h(k4)

k2

k3

h(k2) = h(k5)

Kollision

h(k3)

Sei K U die Menge der zu speichernden Schlssel.

h(ki) ist der Hash-Wert von ki

T

k1

k4

?

k3

Das Element ki wird im Feld T unter dem Index h(ki) gespeichert.


Programme manipulieren mengen von objekten die mengen werden in der regel

T

U

k1

0

0

0

k4

k1

k4

k3

K

0

k1

h(k1)

k4

0

k5

h(k4)

k4

k2

k3

?

h(k2) = h(k5)

0

0

k5

Kollision

0

k3

h(k3)

0

0

0

  • Hashing macht dann Sinn, wenn |K| << |U|.

  • Fr die Gre m des Feldes T sollte gelten: m = c |K|.

  • Hash-Funktionen sollten keine oder nur wenige Kollisionen verursachen.

  • Kollisionen kann man unter anderem mit Chaining-Techniken auflsen:

    • Chaining: T enthlt Zeiger auf Listen.

    • Falls die entsprechenden Listen leer sind,

    • zeigen die Zeiger auf NULL (0).

T


Programme manipulieren mengen von objekten die mengen werden in der regel

T

U

k1

0

0

0

k2

k1

k4

k3

K

k4

k5

k2

k3

0

k5

Wirdefinieren eine Klasse ChainedHashTable mit den Methoden:

void insert( int ki )Fge ki am Kopf der Liste ein, auf die T[h(ki)] zeigt.

void search( int ki ) Suche nach ki in der Liste, auf die T[h(ki)] zeigt.

void delete( int ki ) Lsche ki aus der Liste, auf die T[h(ki)] zeigt.

Die worst-case Laufzeit von insert ist O(1).

Die worst-case Laufzeiten von search und

delete sind proportional zu den Lngen

der entsprechenden Listen.


Programme manipulieren mengen von objekten die mengen werden in der regel

Wie effizient ist Hashing mit Chaining?

Gegeben eine Hash-Tabelle mit m Slots (also ein Feld T der Gre m),

die n = |K| Elemente speichert.

Falls alle Elemente gleichmig ber die Slots verteilt sind, dann ist jede

Liste = n/m ( = load factor) lang.

Worst-Case-Analyse:

Alle n Elemente in die gleiche Liste

O(n)

Average Performance:

Wie gut verteilt die Hash-Funktion die Elemente ber die Slots?


Programme manipulieren mengen von objekten die mengen werden in der regel

Gegeben eine Hash-Tabelle mit m Slots, die n = |K| Elemente speichert.

Einfaches uniformes Hashing:

Wir nehmen an, dass jedes vorgegebene Element mit der gleichen Wahr-

scheinlichkeit in einen der m Slots von der Hash-Funktion abgebildet wird.

Fr j = 0, 1, ...., m-1 bezeichen wir mit lj die Lnge der Liste T[ j ]:

Der Durchschnittswert von lj (erwartete Lnge der Liste) ist


Programme manipulieren mengen von objekten die mengen werden in der regel

Gegeben eine Hash-Tabelle mit m Slots, die n = |K| Elemente speichert.

Einfaches uniformes Hashing:

Wir nehmen an, dass jedes vorgegebene Element mit der gleichen Wahr-

scheinlichkeit in einen der m Slots von der Hash-Funktion abgebildet wird.

Wenn wir in der Hash-Tabelle nach ki suchen, so mssen wir

(1) h(ki) berechnen: Zeit O(1)

  • Falls ki nicht in der Liste T[h(ki)] gespeichert ist, so mssen wir die

  • gesamte Liste durchsuchen: erwartete Zeit O()

Falls ki in der Liste T[h(ki)] gespeichert ist, so mssen wir die Liste

bis zum Schlssel ki durchsuchen: erwartete Zeit ?

nchste Seite


Programme manipulieren mengen von objekten die mengen werden in der regel

Gegeben eine Hash-Tabelle mit m Slots, die n = |K| Elemente speichert.

Einfaches uniformes Hashing:

Die Zahl der Elemente, die whrend einer erfolgreichen Suche nach einem Element ki getestet werden, ist um eins grer als die Zahl der Elemente vor ki in der Liste.

Die Elemente vor ki wurden alle spter eingefgt, da man immer am

Listenanfang einfgt.

Um die erwartete Anzahl von untersuchten Elementen zu bestimmen,

betrachten wir den Durchschnitt aller n gespeicherten Elemente.

Sei ki das i-te Element, das in die Hash-Tabelle eingefgt wurde.

Wir definieren nun die folgenden Zufallsvariablen:

nchste Seite


Programme manipulieren mengen von objekten die mengen werden in der regel

falls h(ki) = h(kj)

sonst

Wir berechnen nun den zu erwartenden durchschnittlichen Arbeitsaufwand

fr den Fall, dass der zu suchende Schlssel ki in der Liste enthalten ist:


Programme manipulieren mengen von objekten die mengen werden in der regel

Satz [1]:

In einer Hash-Tabelle, in der Kollisionen mit Chaining aufgelst werden,

bentigt eine Suche (unter der Annahme: einfaches uniformes Hashing)

im Durchschnitt erwartete Zeit (1+).


Programme manipulieren mengen von objekten die mengen werden in der regel

Welche Eigenschaften sollte eine gute Hash-Funktion besitzen?

Eine gute Hash-Funktion sollte die Annahme ber einfaches uniformes Hashing erfllen, d.h., jedes Element sollte ungefhr mit der gleichen Wahrscheinlichkeit in irgend einen der m Slots abgebildet werden.

Leider ist es in der Regel nicht mglich diese Bedingung zu berprfen, da man selten die Wahrscheinlichkeitsverteilung der gezogenen Elemente (Schlssel) kennt und da diese Schlssel gewhnlich nicht unabhngig voneinander gezogen werden.


Programme manipulieren mengen von objekten die mengen werden in der regel

Die Divisions-Methode

Beispiel: m = 12 k = 100 => h(k) = 4.

Man vermeide m = 2p (Zweierpotenz) zu whlen!

Eine Primzahl, die nicht zu nah zu einer exakten

Zweierpotenz ist, ist oft eine gute Wahl!


Programme manipulieren mengen von objekten die mengen werden in der regel

Die Multiplikations-Methode

arbeitet in zwei Schritten:

Schritt 1: Zunchst multiplizieren wir den Schlssel k

mit einer Konstanten A, 0 < A < 1, und extrahieren

die Stellen hinter dem Komma (Punkt)

kA kA= kA mod 1.

Schritt 2: Dann multiplizieren wir mit m und runden ab:

Der Wert von m ist bei diesem Verfahren unkritisch!

Gewhnlich whlt man m als eine Zweierpotenz

m = 2p (p Z).


Programme manipulieren mengen von objekten die mengen werden in der regel

s

*

r0

r1

h(k)

Sei w die Wortgre (Zahl der Bits). Wir nehmen an, dass k in ein Wort passt.

wobei s eine ganze Zahl mit

Wir multiplizieren nun k mit s und erhalten einen 2w-Bit Wert

k

Sei m = 2p.

Die ersten p Bits von r0 sind der Hash-Wert h(k) von k:

p Bits von r0

Knuth schlgt fr A den folgenden Wert vor:


Programme manipulieren mengen von objekten die mengen werden in der regel

Universelles Hashing:

Ein bsartiger Gegner kann die Schlssel immer so whlen, dass jede

vorgegebene Hash-Funktion alle Schlssel in den gleichen Slot abbildet

(Suchzeit (n)).

Jede fest vorgegebene Hash-Funktion kann durch einen solchen Angriff

zum Worst-Case-Verhalten gezwungen werden.

Solche Angriffe knnen verhindert werden, in dem man die Hash-Funktion

zufllig aus einer Menge von mglichen Hash-Funktionen (diese sollten unabhngig von der Schlsselmenge sein) whlt.

Dieser Ansatz wird als universelles Hashing bezeichnet.


Programme manipulieren mengen von objekten die mengen werden in der regel

Definition [1]:

Sei H eine endliche Menge von Hash-Funktionen:

H heit universell, wenn fr jedes Paar ki , kj von Schlsseln

mit ki kj gilt:

d.h., die Zahl der Funktionen hH mit h(ki) = h(kj) ist hchstens #H/m.

oder anders formuliert: bei zuflliger Wahl der Hash-Funktion hH gilt:

p(h(ki) = h(kj)) 1/m


Programme manipulieren mengen von objekten die mengen werden in der regel

Satz [2]:

Sei H eine universelle Menge von Hash-Funktionen und sei h eine zufllig gewhlte Hash-Funktion aus H.

Verwenden wir h, um eine Menge von n Schlsseln in eine Hash-Tabelle T der Gre m mittels der Chaining-Technik zu speichern, so gilt:

  • Falls ki nicht in der Tabelle gespeichert ist, so ist die erwartete Lnge E[ lh(ki) ] der Liste von h(ki) hchstens .

  • Ist ki in der Tabelle gespeichert, dann ist die erwartete Lnge E[ lh(ki) ] hchstens 1+.


Programme manipulieren mengen von objekten die mengen werden in der regel

falls h(ki) = h(kj)

sonst

Beweis von Satz [2]:

Fr jedes Paar ki und kj von Schlsseln definieren wir eine Zufallsvariable

Aus der Definition einer universellen Menge von Hash-Funktionen folgt:

Ein Paar kollidiert mit Wahrscheinlichkeit kleiner gleich 1/m.

Zu jedem Schlssel ki definieren wir uns eine Zufallsvariable


Programme manipulieren mengen von objekten die mengen werden in der regel

Es gilt:

Es folgt eine Fallunterscheidung: ki in T gespeichert oder nicht?

Fall [1]: ki T:

und


Programme manipulieren mengen von objekten die mengen werden in der regel

Fall [2]: ki T: Da Yi den Schlssel ki nicht einschliet, ist

und


Programme manipulieren mengen von objekten die mengen werden in der regel

Korollar [1]:

Mit Hilfe der Kombination von universellem Hashing und Chaining kann

man in einer Tabelle mit m Slots eine beliebige Folge von n INSERT-,

SEARCH- und DELETE-Operationen, die O(m) INSERT-Operationen

enthlt, in erwarteter Zeit (n) ausfhren.

Beweis:

Da die Zahl der INSERTs von der Grenordnung O(m) ist, ist = O(1).

INSERT-Operationen O(1)

DELETE-Operationen O(1)

Satz [2] SEARCH-Operationen O(1+) = O(1) erwartet

Also bentigt man fr alle n Operationen erwartete Zeit (n).


  • Login