Ein besonderes Merkmal einer HashMap ist, dass ihr Verhalten im Gegensatz zu beispielsweise ausgeglichenen Bäumen wahrscheinlich ist. In diesen Fällen ist es normalerweise am hilfreichsten, über die Komplexität im Hinblick auf die Wahrscheinlichkeit des Eintretens eines Worst-Case-Ereignisses zu sprechen. Bei einer Hash-Karte ist dies natürlich der Fall bei einer Kollision in Bezug darauf, wie voll die Karte gerade ist. Eine Kollision ist ziemlich einfach abzuschätzen.
p Kollision = n / Kapazität
Bei einer Hash-Karte mit nur einer bescheidenen Anzahl von Elementen ist es daher ziemlich wahrscheinlich, dass mindestens eine Kollision auftritt. Mit der Big O-Notation können wir etwas überzeugenderes tun. Beachten Sie, dass für jede beliebige feste Konstante k gilt.
O (n) = O (k · n)
Mit dieser Funktion können wir die Leistung der Hash-Map verbessern. Wir könnten stattdessen über die Wahrscheinlichkeit von höchstens 2 Kollisionen nachdenken.
p Kollision x 2 = (n / Kapazität) 2
Das ist viel niedriger. Da die Kosten für die Behandlung einer zusätzlichen Kollision für die Leistung von Big O nicht relevant sind, haben wir einen Weg gefunden, die Leistung zu verbessern, ohne den Algorithmus tatsächlich zu ändern! Wir können dies verallgemeinern
p Kollision xk = (n / Kapazität) k
Und jetzt können wir eine beliebige Anzahl von Kollisionen ignorieren und am Ende eine verschwindend geringe Wahrscheinlichkeit für mehr Kollisionen haben, als wir berücksichtigen. Sie könnten die Wahrscheinlichkeit auf ein beliebig kleines Niveau bringen, indem Sie das richtige k auswählen, ohne die tatsächliche Implementierung des Algorithmus zu ändern.
Wir sprechen darüber, indem wir sagen, dass die Hash-Map mit hoher Wahrscheinlichkeit O (1) -Zugriff hat