Funciones hash
Convierte una llave en un entero, repartido parejo.
Una tabla nunca es mejor que su hash.
La única regla
- Mezcla la llave completa — cada byte influye en el resultado
- Rápida: O(key length), corre en cada búsqueda
- Determinista + buena avalancha (1 bit de entrada → ~la mitad de los bits cambia)
- Modo de falla: hashear solo una parte de la llave (primera letra, longitud)
Mira un hash bueno vs uno malo
FNV-1a se queda en azul parejo. El hash de primera letra prende unos buckets en rojo.
Mismas palabras, mismos buckets — lo único que cambia es la mezcla.
Distribución: pareja vs skyline
Primera letra: 51 palabras en un bucket, 11 buckets vacíos. Chi-cuadrada 509 vs 15.
Empata el hash con el trabajo
- Tabla: rápido no criptográfico — FNV, polinomial, SipHash (
hash())
- Seguridad: criptográfico — SHA-256 (
hashlib), nunca para tablas
- Aleatoriza la semilla → resiste el DoS por inundación de colisiones
Para llevar
Mezcla la llave completa, mantenla rápida. Usa hash().
Siguiente: sets y multisets — tablas hash de llaves.