Hier ist eine Erklärung für den Laien.
Nehmen wir an, Sie wollen eine Bibliothek mit Büchern füllen und sie nicht einfach nur hineinstopfen, sondern Sie wollen sie auch leicht wiederfinden, wenn Sie sie brauchen.
Sie beschließen also, dass es ausreicht, wenn die Person, die ein Buch lesen möchte, den Titel des Buches kennt, und dazu noch den genauen Titel, dann sollte das genügen. Mit dem Titel sollte die Person mit Hilfe des Bibliothekars in der Lage sein, das Buch leicht und schnell zu finden.
Wie kann man das also machen? Nun, man kann natürlich eine Art Liste führen, in der man festhält, wo man jedes Buch abgelegt hat, aber dann hat man das gleiche Problem wie bei der Suche in der Bibliothek, man muss die Liste durchsuchen. Zugegeben, die Liste wäre kleiner und leichter zu durchsuchen, aber man will trotzdem nicht von einem Ende der Bibliothek (oder Liste) zum anderen suchen.
Sie wollen etwas, das Ihnen mit dem Titel des Buches sofort die richtige Stelle anzeigt, so dass Sie nur noch zum richtigen Regal schlendern und das Buch in die Hand nehmen müssen.
Aber wie kann das geschehen? Nun, mit ein wenig Voraussicht, wenn man die Bibliothek füllt, und einer Menge Arbeit, wenn man die Bibliothek füllt.
Anstatt die Bibliothek einfach von einem Ende zum anderen aufzufüllen, haben Sie sich eine clevere Methode ausgedacht. Sie nehmen den Titel des Buches, lassen ihn durch ein kleines Computerprogramm laufen, das eine Regalnummer und eine Platznummer in diesem Regal ausspuckt. Dort platzieren Sie das Buch.
Das Schöne an diesem Programm ist, dass Sie später, wenn eine Person das Buch erneut lesen möchte, den Titel noch einmal in das Programm eingeben und dieselbe Regal- und Steckplatznummer zurückerhalten, die Sie ursprünglich erhalten haben, und das Buch befindet sich dort.
Das Programm wird, wie bereits von anderen erwähnt, als Hash-Algorithmus oder Hash-Berechnung bezeichnet und funktioniert in der Regel so, dass es die eingegebenen Daten (in diesem Fall den Titel des Buches) nimmt und daraus eine Zahl errechnet.
Der Einfachheit halber nehmen wir an, dass sie einfach jeden Buchstaben und jedes Symbol in eine Zahl umwandelt und alle zusammenzählt. In Wirklichkeit ist es viel komplizierter, aber lassen wir es erst einmal dabei bewenden.
Das Schöne an einem solchen Algorithmus ist, dass er immer wieder dieselbe Zahl ausspuckt, wenn man ihn immer wieder mit derselben Eingabe füttert.
Ok, so funktioniert also eine Hashtabelle.
Es folgt der technische Teil.
Erstens ist da die Größe der Zahl. In der Regel liegt die Ausgabe eines solchen Hash-Algorithmus innerhalb eines Bereichs einer großen Zahl, die in der Regel viel größer ist als der Platz, der in Ihrer Tabelle zur Verfügung steht. Nehmen wir zum Beispiel an, dass wir in der Bibliothek Platz für genau eine Million Bücher haben. Die Ausgabe der Hash-Berechnung könnte im Bereich von 0 bis eine Milliarde liegen, also viel höher.
Was sollen wir also tun? Wir verwenden die so genannte Modulusberechnung, die im Grunde besagt, dass man, wenn man bis zu der gewünschten Zahl gezählt hat (z. B. die eine Milliarde), aber innerhalb eines viel kleineren Bereichs bleiben wollte, jedes Mal, wenn man die Grenze dieses kleineren Bereichs erreicht, wieder bei 0 anfängt, aber man muss verfolgen, wie weit man in der großen Folge gekommen ist.
Angenommen, die Ausgabe des Hash-Algorithmus liegt im Bereich von 0 bis 20 und Sie erhalten den Wert 17 von einem bestimmten Titel. Wenn die Bibliothek nur 7 Bücher umfasst, zählt man 1, 2, 3, 4, 5, 6, und wenn man bei 7 angelangt ist, fängt man wieder bei 0 an. 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.
Die Berechnung von Modulen erfolgt natürlich nicht auf diese Weise, sondern durch Division und einen Rest. Der Rest der Division von 17 durch 7 ist 3 (7 geht zweimal in 17 zu 14 und die Differenz zwischen 17 und 14 ist 3).
Sie legen das Buch also in das Fach Nummer 3.
Dies führt zum nächsten Problem. Kollisionen. Da der Algorithmus keine Möglichkeit hat, die Bücher so zu verteilen, dass sie die Bibliothek (oder die Hashtabelle, wenn Sie so wollen) genau füllen, wird er unweigerlich eine Zahl berechnen, die schon einmal verwendet wurde. In der Bibliothek bedeutet das: Wenn Sie zu dem Regal und der Nummer des Fachs kommen, in das Sie ein Buch stellen wollen, befindet sich dort bereits ein Buch.
Es gibt verschiedene Methoden zur Behandlung von Kollisionen, einschließlich der Durchführung einer weiteren Berechnung, um einen anderen Platz in der Tabelle zu erhalten ( Doppelhashing ), oder einfach einen Platz in der Nähe des Ihnen zugewiesenen Platzes zu finden (d. h. direkt neben dem vorherigen Buch, vorausgesetzt der Platz war frei, auch bekannt als lineare Abtastung ). Das würde zwar bedeuten, dass Sie etwas suchen müssen, wenn Sie das Buch später finden wollen, aber es ist immer noch besser, als einfach an einem Ende der Bibliothek anzufangen.
Irgendwann möchten Sie vielleicht mehr Bücher in die Bibliothek stellen, als diese zulässt. Mit anderen Worten: Sie müssen eine größere Bibliothek bauen. Da der exakte Platz in der Bibliothek anhand der exakten und aktuellen Größe der Bibliothek berechnet wurde, muss man bei einer Größenänderung der Bibliothek möglicherweise neue Plätze für alle Bücher finden, da sich die Berechnung zur Ermittlung der Plätze geändert hat.
Ich hoffe, diese Erklärung war ein bisschen bodenständiger als Eimer und Funktionen :)