Hola colegas estadísticos,
Tengo una fuente que genera hashes (por ejemplo, calcular una cadena con una marca de tiempo y otra información y hashing con md5) y quiero proyectarla en un número fijo de cubos (digamos 100).
hash de muestra: 0fb916f0b174c66fd35ef078d861a367
Lo que pensé al principio era usar solo el primer carácter del hash para elegir un cubo, pero esto conduce a una proyección salvajemente no uniforme (es decir, algunas letras aparecen muy raramente y otras muy frecuentemente)
Luego, traté de convertir esta cadena hexa en un entero usando la suma de los valores de caracteres, luego tomé el módulo para elegir un cubo:
import sys
for line in sys.stdin:
i = 0
for c in line:
i += ord(c)
print i%100
Parece funcionar en la práctica, pero no sé si hay algún sentido común o resultados teóricos que puedan explicar por qué y en qué medida esto es cierto.
[Editar] Después de pensarlo, llegué a la siguiente conclusión: en teoría, puedes convertir el hash en un entero (muy grande) interpretándolo como un número: i = h [0] + 16 * h [1] + 16 * 16 * h [2] ... + 16 ^ 31 * h [31] (cada letra representa un número hexadecimal). Entonces podría modular este gran número para proyectarlo en el espacio del cubo. [/Editar]
Gracias !