Kennt jemand die Antwort auf diese Frage?HashMap mit ~ 100 Millionen Schlüsseln, noch konstante Zeit?
Antwort
Ja. Um eine Hash-Karte mit 100 Millionen hinzugefügten Objekten zu durchsuchen, tun Sie Folgendes:
1) Berechnen Sie den Hash des Objekts, das Sie suchen.
2) Finden Sie diesen Eimer
3) Durchsuchen Sie den Eimer nach dem Artikel.
(1) ist unabhängig von der Größe der Hash-Map oder Anzahl der Elemente in ihm.
(2) ist O (1), unter der Annahme, dass ein Standard-Hashmapp als ein Array verknüpfter Listen implementiert ist.
(3) benötigt eine Zeitmenge, die sich auf die Anzahl der Elemente im Bucket bezieht, die ungefähr (Anzahl der Elemente, die zum Hash hinzugefügt wurden)/(Anzahl der Buckets). Dieser Teil beginnt bei O (1), wird aber sehr langsam zunehmen, wenn die Anzahl der Artikel die Anzahl der Buckets stark übersteigt.
Für fast jeden Zweck können Hash-Maps sowohl für das Einfügen als auch für das Suchen mit sehr großen Datensätzen als O (1) betrachtet werden, solange Sie mit einer ausreichend großen Anzahl von Buckets beginnen.
Ja, noch konstante Zeit (amortisiert).
was amortisiert bedeutet – SuperString
In der Theorie ... Memory Paging könnte ein Problem sein. Unwahrscheinlich, aber möglich. –
Amortisiert bedeutet, dass einige einzelne Inserts eine längere Zeit benötigen als andere, aber die durchschnittliche Zeit bleibt konstant. –
+1 gute Antwort, Punkt (3) ist wichtig – Paolo
Und vorausgesetzt, der Hash ist gleichmäßig verteilt für Ihren Datensatz. –
gibt es eine Möglichkeit, die Anzahl der Buckets in C++ zu erhöhen, so dass jeder Bucket nur 1 Element hat? – SuperString