2010-03-23 10 views
5

¿Cuál es una buena implementación de hashtable para C? Necesito usarlo con el compilador mpicc. La función de borrado no es necesaria.Implementación de Hashtable para C

+0

Ninguno, en realidad. Además, la tabla hash sería inmutable. – Alex

+0

Inmutable en el sentido 'una vez creado y no cambiado más tarde'. – Alex

+0

¿Se conocen los datos en tiempo de compilación? Entonces podrías usar un generador de hash perfecto como sugirió Remo.D. – quinmars

Respuesta

4

El que está en glib es muy agradable. Sin embargo, no estoy seguro de si es demasiado grande o es posible aislarlo del resto de la simplificación.

En su defecto, Pearson hashing parece ser un buen punto de partida para implementar uno propio (es una función hash optimizada para máquinas con registros de 8 bits).

+0

glib es bueno, pero es tan grande que no sugeriría incluirlo en su proyecto solo por eso. Si también necesita todas las otras características que tiene glib, acepto que ese sería el camino a seguir. –

3

Si todas las claves se conocen de antemano, puede usar un generador perfect hash para evitar la sobrecarga de espacio que está implícita en las tablas hash.

Si, por otro lado, realmente necesita una tabla hash completa, sugeriría una variación de Cuckoo Hashing (por ejemplo, la versión d-aria).

He utilizado con satisfacción una versión simplificada del Hopscotch Hashing que funciona bastante bien incluso con factores de carga más elevados.