Man sagt, dass es amortisiert O(1) dauert, eine Hashtabelle zu erstellen. Daher muss das Einfügen von n Elementen O(n) sein. Das stimmt jedoch nicht für große n, da, wie ein Antwortender sagte, "alles, was man braucht, um das erwartete amortisierte O(1) zu erfüllen, ist, die Tabelle zu erweitern und jedes Mal, wenn es eine Kollision gibt, alles mit einer neuen zufälligen Hash-Funktion neu zu zerlegen."
Also: Was ist die durchschnittliche Laufzeit der Einfügung n Elemente in eine Hashtabelle? Ich weiß, dass dies wahrscheinlich von der Implementierung abhängt, also geben Sie an, von welcher Art von Implementierung Sie sprechen.
Wenn es zum Beispiel (log n) gleichmäßig verteilte Kollisionen gibt und jede Kollision O(k) zur Auflösung benötigt, wobei k die aktuelle Größe der Hashtabelle ist, dann ergibt sich diese Rekursionsbeziehung:
T(n) = T(n/2) + n/2 + n/2
(d.h. man nimmt sich die Zeit, n/2 Elemente einzufügen, dann kommt es zu einer Kollision, die n/2 Zeit in Anspruch nimmt, um sie aufzulösen, dann führt man die restlichen n/2 Einfügungen ohne Kollision durch). Am Ende ist das immer noch O(n), also prima. Aber ist das vernünftig?