Tengo una aplicación de lenguaje C donde necesito hacer búsquedas en la tabla.Búsqueda de tablas hash: con hash perfecto, en C
Las entradas son cadenas, Todas se conocen al inicio del tiempo de ejecución. La tabla se inicializa una vez y luego se mira hacia arriba muchas veces. La tabla puede cambiar, pero es básicamente como si la aplicación comenzara de nuevo. Creo que esto significa que puedo usar un hash perfecto. Está bien consumir algo de tiempo para la inicialización del hashtable, como ocurre una sola vez.
Habrá entre 3 y 100.000 entradas, cada una única, y estimo que el 80% de los casos tendrán menos de 100 entradas. Una simple búsqueda ingenua es "lo suficientemente rápida" en esos casos. (== nadie se queja)
Sin embargo, en los casos en que hay más de 10k entradas, la velocidad de búsqueda de un enfoque ingenuo es inaceptable. ¿Cuál es un buen enfoque para entregar un buen rendimiento de búsqueda basado en hashta para cadenas en C? Supongamos que no tengo una biblioteca comercial de terceros como Boost/etc. ¿Qué algoritmo hash debería usar? ¿Cómo decido?
http://www.gnu.org/s/gperf/? –
También http://cmph.sourceforge.net/ – Nemo