So erstellen Sie eine hash-Tabelle

Möchte ich erwähnen, bevor Sie fortfahren, dass ich mich bei anderen Fragen zu Fragen, die gleiche Sache auf dieser Website sowie auf anderen Websites. Ich hoffe, dass bekomme ich eine gute Antwort, denn mein Ziel ist ein zweifaches:

  1. Linie, würde ich mag, um zu lernen, wie zum erstellen einer hash-Tabelle.
  2. Zweitens finde ich, dass eine Menge an Antworten auf Stack Overflow, neigen dazu, selbst ein gewisses Maß an wissen über ein Thema, das oft nicht da, vor allem für die neueren Typen. That being said, ich hoffe die Bearbeiten meine wichtigste Botschaft an eine Erklärung des Prozesses etwas mehr in die Tiefe, sobald ich es herausfinden ich.

Auf den Hauptgang:

Wie ich Sie verstehe, so weit, eine hash-Tabelle ist ein array von Listen oder eine ähnliche Datenstruktur), hofft, optimal, haben so wenig Kollisionen wie möglich, um ihn zu schützen lobte O(1) Komplexität. Das folgende ist mein Aktueller Prozess:

So meinen ersten Schritt erstellen Sie ein array von Zeigern:

Elem ** table;
table = new Elem*[size];//size is the desired size of the array

Mein zweiter Schritt ist die Erstellung einer Hash-Funktion( eine sehr einfache ).

int hashed = 0;
hashed = ( atoi( name.c_str() ) + id ) % size;
//name is a std string, and id is a large integer. Size is the size of the array.

Meine Dritte Schritt wäre, um etwas zu schaffen, um Kollisionen festzustellen, das ist der Teil, den ich derzeit bin.

Hier einige pseudo-code:

while( table[hashedValue] != empty )
    hashedValue++

else
    put in the list at that index.

Es ist relativ unelegant, aber ich bin immer noch an den "was ist das" - Phase. Haben Sie Geduld mit mir.

Gibt es sonst noch etwas? Habe ich irgendwas übersehen oder mache etwas falsch?

Dank

  • Sieht OK aus, irgendwie. Der hash-Wert-Indizes in einen festen array und jedes array-element ist eine Liste der tatsächlichen Werte.
InformationsquelleAutor Joshua | 2011-11-20
Schreibe einen Kommentar