¿Se puede construir una función hash "buena" usando CRC32C como base?

Dado que SSE 4.2 (partes Intel Core i7 e i5) incluye una instrucción CRC32, parece razonable investigar si uno podría construir una función hash de propósito general más rápida. De acuerdo aesta solo 16 bits de un CRC32 se distribuyen uniformemente. Entonces, ¿qué otra transformación se aplicaría para superar eso?

Actualizar ¿Qué tal esto? Solo 16 bits son adecuados para un valor hash. Multa. Si su mesa es 65535 o menos, entonces genial. De lo contrario, ejecute el valor CRC a través de la instrucción Nehalem POPCNT (conteo de población) para obtener el número de bits establecido. Luego, utilícelo como índice en una matriz de tablas. Esto funciona si su tabla está al sur de las entradas de 1 mm. Apuesto a que es más barato / más rápido que las funciones hash de mejor rendimiento. Ahora esoGCC 4.5 tiene un CRC32 intrínseco, debería ser fácil de probar ... si solo tuviera el abundante tiempo libre para trabajar en él.

David

Respuestas a la pregunta(4)

Su respuesta a la pregunta