Me gustaría mencionar antes de continuar que he visto otras preguntas que hacen lo mismo en este sitio y en otros sitios. Espero que pueda obtener una buena respuesta, porque mi objetivo es doble:Cómo crear una tabla hash
- En primer lugar, me gustaría aprender a crear una tabla hash.
- En segundo lugar, encuentro que muchas respuestas en Stack Overflow tienden a asumir un cierto nivel de conocimiento sobre un tema que a menudo no está presente, especialmente para los tipos más nuevos. Dicho esto, espero editar mi mensaje principal para incluir una explicación del proceso un poco más en profundidad una vez que lo descubra.
Sobre el plato principal:
Como yo los entiendo hasta ahora, una tabla hash es una serie de listas (o una estructura de datos similar) que se espera, de manera óptima, tiene el menor número de colisiones como sea posible para preservar su elogiada complejidad O (1). La siguiente es mi proceso actual:
Así que mi primer paso es crear una matriz de punteros:
Elem ** table;
table = new Elem*[size];//size is the desired size of the array
Mi segundo paso es crear una función hash (muy simple).
int hashed = 0;
hashed = (atoi(name.c_str()) + id) % size;
//name is a std string, and id is a large integer. Size is the size of the array.
Mi tercer paso sería crear algo para detectar colisiones, que es la parte que estoy actualmente.
He aquí algunos pseudo-código:
while(table[hashedValue] != empty)
hashedValue++
else
put in the list at that index.
Es relativamente poco elegante, pero todavía estoy en el "qué es este" escenario. Tengan paciencia conmigo.
¿Hay algo más? ¿Perdí algo o hice algo incorrectamente?
Gracias
Se ve bien, más o menos. El valor de hash indexa en una matriz fija, y cada elemento de la matriz es una lista de valores reales. –