In der Praxis ist es O (1), aber dies ist tatsächlich eine schreckliche und mathematisch unsinnige Vereinfachung. Die O () - Notation gibt an, wie sich der Algorithmus verhält, wenn die Größe des Problems gegen unendlich tendiert. Hashmap get / put funktioniert wie ein O (1) -Algorithmus für eine begrenzte Größe. Die Grenze ist vom Computerspeicher und vom Standpunkt der Adressierung aus ziemlich groß, aber weit von der Unendlichkeit entfernt.
Wenn man sagt, dass Hashmap get / put O (1) ist, sollte man wirklich sagen, dass die für get / put benötigte Zeit mehr oder weniger konstant ist und nicht von der Anzahl der Elemente in der Hashmap abhängt, soweit die Hashmap möglich ist auf dem eigentlichen Computersystem vorgestellt. Wenn das Problem über diese Größe hinausgeht und wir größere Hashmaps benötigen, wird nach einer Weile sicherlich auch die Anzahl der Bits, die ein Element beschreiben, zunehmen, wenn uns die möglichen beschreibbaren unterschiedlichen Elemente ausgehen. Wenn wir beispielsweise eine Hashmap zum Speichern von 32-Bit-Zahlen verwendet haben und später die Problemgröße erhöhen, sodass die Hashmap mehr als 2 ^ 32-Bit-Elemente enthält, werden die einzelnen Elemente mit mehr als 32 Bit beschrieben.
Die Anzahl der Bits, die zur Beschreibung der einzelnen Elemente benötigt werden, ist log (N), wobei N die maximale Anzahl von Elementen ist. Daher sind get und put wirklich O (log N).
Wenn Sie es mit einer Baummenge vergleichen, die O (log n) ist, dann ist die Hashmenge O (lang (max (n)) und wir glauben einfach, dass dies O (1) ist, weil bei einer bestimmten Implementierung max (n) ist fest, ändert sich nicht (die Größe der Objekte, die wir speichern, gemessen in Bits) und der Algorithmus zur Berechnung des Hash-Codes ist schnell.
Wenn schließlich das Finden eines Elements in einer Datenstruktur O (1) wäre, würden wir Informationen aus dem Nichts erstellen. Mit einer Datenstruktur von n Elementen kann ich ein Element auf n verschiedene Arten auswählen. Damit kann ich log (n) Bit-Informationen codieren. Wenn ich das in Nullbit codieren kann (das bedeutet O (1)), habe ich einen unendlich komprimierenden ZIP-Algorithmus erstellt.