Ich möchte erwähnen, bevor ich fortfahre, dass ich mir andere Fragen angeschaut habe, die dasselbe auf dieser Seite und auf anderen Seiten fragen. Ich hoffe, dass ich eine gute Antwort bekomme, denn mein Ziel ist ein zweifaches:
Auf den Hauptgang:
Wie ich sie bisher verstanden habe, ist eine Hash-Tabelle ein Array von Listen (oder einer ähnlichen Datenstruktur), die hoffentlich möglichst wenige Kollisionen haben, um die gelobte O (1) -Komplexität beizubehalten. Das Folgende ist mein aktueller Prozess:
Also ist mein erster Schritt, ein Array von Zeigern zu erstellen:
%Vor%Mein zweiter Schritt besteht darin, eine Hash-Funktion zu erstellen (eine sehr einfache).
%Vor%Mein dritter Schritt wäre, etwas zu erstellen, um Kollisionen zu erkennen. Dies ist der Teil, in dem ich mich gerade befinde.
Hier ist ein Pseudocode:
%Vor%Es ist relativ unelegant, aber ich bin immer noch auf der "was ist das" Bühne. Trage mit mir.
Gibt es noch etwas? Habe ich etwas vermisst oder etwas falsch gemacht?
Danke
Sie können keine leeren Slots finden und die Größe der Tabelle ändern.
Sie verpassen eine Definition für Elem
. Das ist nicht trivial, denn es hängt davon ab, ob Sie eine Verkettung oder eine Hash-Tabelle mit Suchfunktionen wünschen.
Eine Hash-Funktion erzeugt den gleichen Wert für die gleichen Daten. Ihre Kollisionsprüfung ändert jedoch diesen Wert, was bedeutet, dass der Hash-Wert nicht nur von der Eingabe, sondern auch von anderen Elementen in der Hash-Map abhängt. Das ist schlecht, da Sie fast nie in der Lage sein werden, auf das Element zuzugreifen, das Sie zuvor durch seinen Namen eingegeben haben, sondern nur über die Karte zu iterieren.
Zweitens ist Ihre Kollisionsprüfung anfällig für Überlauf- / Bereichsfehler, da Sie einfach den Hashwert erhöhen, ohne die Größe der Karte zu überprüfen (obwohl, wie ich bereits sagte, Sie dies nicht einmal tun sollten) / p>