next up previous contents
Next: Universelles Hashing Up: Hashing Previous: Chainingverfahren

Hashing mit offener Adressierung

Beispiele: Bei dieser Methode werden die Elemente nicht in der Liste, sondern direkt in der Hash-Tabelle gespeichert. Wird bei Insert oder IsElement , angewendet auf Schlüssel k, ein Element mit Schlüssel $\neq k$ an der Adresse h(k) gefunden, so wird auf deterministische Weise eine alternative Adresse berechnet. Für jeden Schlüssel $k\in U$ wird somit eine Reihenfolge (Sondierungsfolge), in der alle slots in T[ ] betrachtet werden, um k zu speichern bzw. zu finden, festgelegt. Dieser Vorgang heißt sondieren.

Sondieren:

Sei $s(j,k) : [0..m-1] \times U \rightarrow [0..m-1]$;
Definiere $h(j,k)= \left(h(k)-s(j,k)\right) \text{\underline{mod} } m$ ;$(0\leq j \leq m-1)$;
Starte mit h(k), dann (falls (h(k)) belegt) Index $\left(h(k)-s(1,k)\right) \text{\underline{mod} } m$;
Problem: Sei h(k) = h(k') für 2 Schlüssel $k,k'\in S \subset U$. Werde zunächst k eingefügt, dann k', dann k gelöscht. Wie findet man k' (Beachte: k' steht nicht unmittelbar an h(k'))?
Lösungsvorschlag: Markiere k als gelöscht! Wenn Speicher gebraucht wird, k überschreiben. Alternativ: Hashtabelle neu aufbauen/überarbeiten.

Beispiele für Sondierungen:
next up previous contents
Next: Universelles Hashing Up: Hashing Previous: Chainingverfahren
Abbas-Bardia Kabiri-Jarghouyeh
3/3/1999