Hier ist eine Erklärung für Laien.
Nehmen wir an, Sie möchten eine Bibliothek mit Büchern füllen und sie nicht nur hineinstecken, sondern sie auch bei Bedarf leicht wiederfinden können.
Sie entscheiden also, dass, wenn die Person, die ein Buch lesen möchte, den Titel des Buches und den genauen Titel zum Booten kennt, dies alles ist, was es braucht. Mit dem Titel sollte die Person mit Hilfe des Bibliothekars in der Lage sein, das Buch leicht und schnell zu finden.
Also, wie kannst du das machen? Natürlich können Sie eine Art Liste darüber führen, wo Sie jedes Buch abgelegt haben, aber dann haben Sie das gleiche Problem wie beim Durchsuchen der Bibliothek. Sie müssen die Liste durchsuchen. Zugegeben, die Liste wäre kleiner und einfacher zu durchsuchen, aber Sie möchten trotzdem nicht nacheinander von einem Ende der Bibliothek (oder Liste) zum anderen suchen.
Sie möchten etwas, das Ihnen mit dem Titel des Buches sofort den richtigen Platz bietet. Sie müssen also nur zum richtigen Regal gehen und das Buch in die Hand nehmen.
Aber wie geht das? Nun, mit ein wenig Voraussicht, wenn Sie die Bibliothek füllen, und viel Arbeit, wenn Sie die Bibliothek füllen.
Anstatt nur damit zu beginnen, die Bibliothek von einem Ende zum anderen zu füllen, entwickeln Sie eine clevere kleine Methode. Sie nehmen den Titel des Buches und führen es durch ein kleines Computerprogramm, das eine Regalnummer und eine Steckplatznummer in diesem Regal ausspuckt. Hier platzieren Sie das Buch.
Das Schöne an diesem Programm ist, dass Sie später, wenn eine Person zurückkommt, um das Buch zu lesen, den Titel erneut durch das Programm führen und dieselbe Regalnummer und Steckplatznummer zurückerhalten, die Sie ursprünglich erhalten haben wo sich das Buch befindet.
Das Programm wird, wie bereits erwähnt, als Hash-Algorithmus oder Hash-Berechnung bezeichnet und verwendet normalerweise die eingegebenen Daten (in diesem Fall den Titel des Buches) und berechnet daraus eine Zahl.
Nehmen wir zur Vereinfachung an, dass jeder Buchstabe und jedes Symbol in eine Zahl umgewandelt und alle zusammengefasst werden. In Wirklichkeit ist es viel komplizierter, aber lassen wir es vorerst dabei.
Das Schöne an einem solchen Algorithmus ist, dass er, wenn Sie immer wieder dieselbe Eingabe eingeben, jedes Mal dieselbe Zahl ausspuckt.
Ok, so funktioniert also im Grunde eine Hash-Tabelle.
Technisches folgt.
Erstens gibt es die Größe der Zahl. Normalerweise liegt die Ausgabe eines solchen Hash-Algorithmus in einem Bereich einer großen Anzahl, der normalerweise viel größer ist als der Platz, den Sie in Ihrer Tabelle haben. Nehmen wir zum Beispiel an, wir haben Platz für genau eine Million Bücher in der Bibliothek. Die Ausgabe der Hash-Berechnung könnte im Bereich von 0 bis 1 Milliarde liegen, was viel höher ist.
Also, was machen wir? Wir verwenden eine sogenannte Modulberechnung, die im Grunde besagt, dass Sie jedes Mal, wenn Sie die gewünschte Zahl (dh die eine Milliarde) gezählt haben, aber in einem viel kleineren Bereich bleiben möchten, jedes Mal, wenn Sie die Grenze dieses kleineren Bereichs erreichen, bei dem Sie begonnen haben 0, aber Sie müssen verfolgen, wie weit Sie in der großen Sequenz gekommen sind.
Angenommen, die Ausgabe des Hash-Algorithmus liegt im Bereich von 0 bis 20, und Sie erhalten den Wert 17 aus einem bestimmten Titel. Wenn die Größe der Bibliothek nur 7 Bücher beträgt, zählen Sie 1, 2, 3, 4, 5, 6, und wenn Sie 7 erreichen, beginnen Sie wieder bei 0. Da wir 17 Mal zählen müssen, haben wir 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3 und die endgültige Zahl ist 3.
Natürlich wird die Modulberechnung nicht so durchgeführt, sondern mit Division und einem Rest. Der Rest der Division von 17 durch 7 ist 3 (7 geht 2 mal in 17 bei 14 und die Differenz zwischen 17 und 14 ist 3).
So legen Sie das Buch in Steckplatz Nummer 3.
Dies führt zum nächsten Problem. Kollisionen. Da der Algorithmus keine Möglichkeit hat, die Bücher so zu platzieren, dass sie die Bibliothek genau füllen (oder die Hash-Tabelle, wenn Sie so wollen), berechnet er ausnahmslos eine zuvor verwendete Zahl. Wenn Sie im Sinne der Bibliothek das Regal und die Steckplatznummer erreichen, in die Sie ein Buch legen möchten, befindet sich dort bereits ein Buch.
Es gibt verschiedene Methoden zur Behandlung von Kollisionen, darunter das Ausführen der Daten in eine weitere Berechnung, um einen weiteren Punkt in der Tabelle zu erhalten ( doppeltes Hashing ) oder einfach, um einen Platz in der Nähe des Platzes zu finden, den Sie erhalten haben (dh direkt neben dem vorherigen Buch, wobei der Slot angenommen wird war auch als lineare Sonde bekannt ). Dies würde bedeuten, dass Sie etwas graben müssen, wenn Sie versuchen, das Buch später zu finden, aber es ist immer noch besser, als einfach an einem Ende der Bibliothek zu beginnen.
Schließlich möchten Sie möglicherweise irgendwann mehr Bücher in die Bibliothek aufnehmen, als die Bibliothek zulässt. Mit anderen Worten, Sie müssen eine größere Bibliothek erstellen. Da der genaue Platz in der Bibliothek anhand der exakten und aktuellen Größe der Bibliothek berechnet wurde, müssen Sie möglicherweise nach der Berechnung der Plätze neue Plätze für alle Bücher finden, wenn Sie die Größe der Bibliothek ändern hat sich verändert.
Ich hoffe, diese Erklärung war etwas bodenständiger als Eimer und Funktionen :)