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

Aus VoWi
Zur Navigation springen Zur Suche springen

(a) Gegeben ist eine Hashtabelle in Form eines Feldes mit der festgelegten Größe . Jedes Element dieses Feldes besteht aus folgenden Komponenten:

  • enthält den Schlüssel des Datensatzes;
  • enthält die eigentlichen Daten;
  • enthält einen der folgenden Werte:
    • enthält einen gültigen Datensatz;
    • ist frei und war nie besetzt;
    • war schon besetzt, ist aber wieder frei.

Schreiben Sie eine Prozedur in Pseudocode, welche diese Hashtabelle für die Verwendung mit korrekt und vollständig initialisiert, aber auch keine überflüssigen Zuweisungen vornimmt.

(b) Nehmen Sie an, dass eine Hashfunktion existiert, die aus einem Schlüssel einen Hashindex für die oben deklarierte Tabelle berechnet. Schreiben Sie eine Prozedur in Pseudocode, die den Datensatz mit dem Schlüssel aus der Tabelle entfernt, falls er enthalten ist. Zur Behandlung von Kollisionen wird lineares Sondieren mit konstanter Schrittweite verwendet.

Beispiel (a)[Bearbeiten | Quelltext bearbeiten]

Initalisierung
Feld := neues Feld(m);
für i = 0,.., m - 1 {
  feld.zustand := frei;
}

Beispiel (b)[Bearbeiten | Quelltext bearbeiten]

 Entferne(feld, k, c)
 m := Länge von Feld;
 b := h(k);
 solange feld[b].zustand != frei {
   wenn feld[b].key = k {
     feld[b].zustand := wiederfrei;
     retourniere "Element gelöscht";
   }
   b := (b + c mod m);
 }
 retourniere "Element nicht gefunden";