Die Leute sagen, es dauert amortisiert O (1) in eine Hash-Tabelle zu setzen. Daher müssen n Elemente O (n) sein. Das stimmt jedoch nicht für große n, da ein Beantworter sagte: "Alles, was Sie benötigen, um das erwartete amortisierte O (1) zu erfüllen, ist, die Tabelle zu erweitern und alles mit einer neuen zufälligen Hash-Funktion zu wiederholen, wenn eine Kollision auftritt."Laufzeit zum Einfügen von n Elementen in eine leere Hash-Tabelle
Also: Was ist die durchschnittliche Laufzeit von Einfügen von n Elementen in eine Hash-Tabelle? Mir ist klar, dass dies wahrscheinlich von der Implementierung abhängig ist. Erwähnen Sie daher, von welcher Art von Implementierung Sie sprechen.
Zum Beispiel, wenn es (log n) mit gleichem Abstand Kollisionen und jede Kollision nimmt O (k) zu lösen, wobei k die aktuelle Größe der Hash-Tabelle ist, dann würden Sie diese Rekursion haben:
(das heißt, Sie nehmen sich die Zeit, n/2 Elemente einzufügen, dann haben Sie eine Kollision, n/2 zu lösen, dann machen Sie die restlichen n/2 Einsätze ohne eine Kollision). Dies endet immer noch in O (n), also yay. Aber ist das vernünftig?
Beachten Sie, dass Sie in vielen Implementierungen die erwartete Größe der vollständigen Hashmap angeben können. Wenn n bekannt ist, bevor Sie mit dem Füllen der Map beginnen, ist die erwartete Laufzeit immer noch O (1). – gnud
@gnud, das war mein genauer Punkt; Das erneute Laden ist nur notwendig, wenn Sie die ursprüngliche Größe falsch erhalten (oder die nachfolgende Größe falsch erhalten und erneut aufbereitet werden müssen usw.). –
Ja, ich weiß - du hast über das Schätzen der Größe zum zweiten Mal geschrieben. Ich dachte, ich sollte erwähnen, dass es oft möglich ist, die Größe beim ersten Mal anzugeben =) – gnud