2009-12-23 13 views

Respuesta

14

Sí. Para buscar un mapa hash con 100 millones de elementos agregados, haga esto:

1) Calcule el hash del objeto que está buscando.
2) Encuentra ese cubo
3) Busca a través de ese cubo para el artículo.

(1) es independiente del tamaño del mapa hash o la cantidad de elementos que contiene.
(2) es O (1), asumiendo un hashmap estándar implementado como una matriz de listas enlazadas.
(3) toma una cantidad de tiempo relacionada con la cantidad de elementos en el depósito, que debe ser aproximadamente (número de elementos agregados al hash)/(número de segmentos). Esta parte comenzará en O (1), pero aumentará muy lentamente a medida que el número de elementos comience a exceder en gran medida la cantidad de cubetas.

Para casi cualquier propósito, los mapas hash se pueden considerar O (1) tanto para la inserción como para la recuperación, incluso con conjuntos de datos muy grandes, siempre que comience con un número suficientemente grande de cubos.

+0

+1 buena respuesta, el punto (3) es importante – Paolo

+8

y siempre que el hash esté distribuido uniformemente para su conjunto de datos. –

+0

¿hay alguna manera de aumentar el número de cubos en C++ para que cada cubo solo tenga 1 elemento? – SuperString

7

Sí, aún tiempo constante (amortizado).

+0

lo que significa amortizado – SuperString

+1

En teoría ... La paginación de memoria podría ser un problema. Poco probable pero posible. –

+1

Amortizado significa que algunas inserciones individuales pueden tomar más tiempo que otras, pero el tiempo promedio permanece constante. –

Cuestiones relacionadas