Filter: 2013-10-27

Hashtabelle

Hashtabellen finden sehr oft ihren Weg in Anwendungen, bei denen es wichtig ist, bei einer relativ konstanten Laufzeit, Datensätze mit Hilfe eines Schlüssels zu finden.

Beispiel (Quellcode): hashtable.cpp
Download (Quellcode): hashtable.zip

Beschreibung

Hashtabellenübersetzung Die Funktion einer Hashtabelle ist sehr einfach. Die Schlüsselwerte werden mit einer Konvertierungsfunktion (Hashfunktion) in einen Wert gewandelt, der direkt als Index für ein Datenfeld benutzt wird. Durch die Verringerung des Schlüssels auf einen kleineren Wertebereich, kann es zu Kollisionen kommen. Das heißt auch, dass die Werte keine eindeutige Referenz für den Schlüssel sind. Somit muss, in der Designphase des Endproduktes, schon drauf geachtet werden, wie mit Kollisionen umgegangen werden soll. Da gibt es gleich einen ganzen Schwung an Möglichkeiten:

  1. Ignorieren. Je nach Bedarf der Anwendung, kann der neue Schlüssel wichtiger sein als ein Älterer, z.B. oft bei Kompressionssuchbäumen oder statistischen Daten.

  2. Datenfeld erweitern. Um die Kollisionen…

Fragmentiertes Datenfeld

Fragmentierte Datenfelder, also Datenfelder mit leeren Feldern, können je nach Aufgabengebiet auftreten. Wenn die Möglichkeit nicht besteht, das Feld durch verwerfen der leeren Zellen, zu verdichten, aber die leeren Felder wiederbenutzt werden soll, kann das hier beschriebene System helfen. Natürlich können leere Felder immer mit einer linearen Suche auf dem Datenfeld gefunden werden. Das lineare Verfahren hat aber seine Schwächen, spätestens bei großen Datenfeldern könnte die Suchzeit für sinnvollere Aufgaben verwendet werden.

Beispiel (Quellcode): fragmentedobjectallocator.cpp
Download (Quellcode): fragmentedobjectallocator.zip

Beschreibung

Wenn aus einem fragmentierten Datenfeld ein Feld gelöscht wird, kann dessen Index in eine Warteschlange oder einen Stapelspeicher geschrieben werden. Beim Anfordern eines neuen Feldes, wird nur der letzte Eintrag aus diesem Stapelspeicher zurückgegeben. Da beim Start noch kein Feld angefordert wurde und eine Ersterstellung des kompletten Stapels riesen Arbeit wäre, k…