2012-05-29 16 views
11

Estoy buscando una función de hash de alta velocidad con buena distribución (es decir, casi uniforme) para su uso en la implementación de una tabla hash.Algoritmo de hash para la implementación de la tabla hash

La tabla hash se usará exclusivamente para almacenar valores con una clave entera.

¿Puedo simplemente utilizar los pocos bits más pequeños del número entero como el hash?

e.g clave int = n & 15; y crea una matriz con 16 espacios para almacenarlos.

¿Alguna recomendación?

+12

No existe la función hash perfecta. Sin embargo, si desea algunos algoritmos con el código fuente correspondiente, consulte aquí: http://partow.net/programming/hashfunctions/index.html –

+0

Tomar los bits más bajos es probablemente lo peor que se puede hacer. (pero: todo depende del rango de valores que esperas en tu clave int) Intenta mezclar también los bits superiores, o multiplica con un número lo suficientemente grande (impar, principal). Sepa qué esperar y medirlo. – wildplasser

+0

Publique su comentario como respuesta y lo aceptaré. –

Respuesta

3

Se puede ver aquí xxhash

Su función hash mencionado es muy rápido, pero es muy malo también. Si quieres una función hash "estúpida", tal vez puedas considerar el módulo.

Ejemplo:

int key = item % size_of_hash_table 
+2

¿Por qué es "malo"? –

Cuestiones relacionadas