TU Wien:Algorithmen und Datenstrukturen 1 VU (Raidl)/Übungen SS09/Beispiel 21

Aus VoWi
Zur Navigation springen Zur Suche springen

Eine Hashtabelle soll bis zu 7500 Einträgen aufnehmen. Die Schlüssel sind Zahlen im Bereich [0, 10000]. Der Hashwert wird mit der Divisions-Rest-Methode ermittelt, und die Kollisionsbehandlung erfolgt mittels Double Hashing.

(a) Geben sie für jede der folgenden Zahlen an, ob sie eine gute Wahl für die Tabellengröße m wäre und begründen Sie Ihre Entscheidung:

8192, 7499, 35537, 7507, 8999

(b) Bestimmen Sie für eine geeignete Wahl der Tabellengröße aus (a) entsprechende Funktionen und .

(c) Warum ist die folgende Funktion eine schlecht Wahl ?

Wie kann das Problem der Hashfunktion behoben werden?

Frage (a)[Bearbeiten | Quelltext bearbeiten]

7499: ist kleiner als m, deswegen zu wenig Platz -> ungeeignet

7507: nur ein bisschen größer als m, hohe Anzahl von Kollisionen -> ungeeignet

8192: von der Größe her möglich, jedoch eine 2er-Potenz -> ungeeignet

35537: Zu groß, jedoch Primzahl -> aufgrund der Größe ungeeignet

8999: Zahl ~20% größer als m, Primzahl -> geeignet

Frage (b)[Bearbeiten | Quelltext bearbeiten]

= k mod 8999

= 1 + (k mod 8997)

Frage (c)[Bearbeiten | Quelltext bearbeiten]

Die Funktionen sind eine schlechte Wahl da die Funktionen von einander anhängig sein müssen. laut Tutor: durch erster Sondierungsschritt auf 0 , => ungünstig

Beweis:

h(4,1) = + 1 * = + m - = m => m mod m = 0 -> ineffizient