Olá colegas estatísticos,
Eu tenho uma fonte gerando hashes (por exemplo, computando uma string com um carimbo de data e hora e outras informações e hash com md5) e quero projetá-la em um número fixo de buckets (digamos 100).
hash de amostra: 0fb916f0b174c66fd35ef078d861a367
O que eu pensei inicialmente era usar apenas o primeiro caractere do hash para escolher um balde, mas isso leva a uma projeção descontroladamente uniforme (ou seja, algumas letras aparecem muito raramente e outras com muita freqüência)
Então, tentei converter essa string hexa em um número inteiro usando a soma dos valores de char e, em seguida, pegue o módulo para escolher um bucket:
import sys
for line in sys.stdin:
i = 0
for c in line:
i += ord(c)
print i%100
Parece funcionar na prática, mas não sei se há algum senso comum ou resultados teóricos que possam explicar por que e até que ponto isso é verdade?
[Edit] Após algumas considerações, cheguei à seguinte conclusão: Em teoria, você pode converter o hash em um número inteiro (muito grande) interpretando-o como um número: i = h [0] + 16 * h [1] + 16 * 16 * h [2] ... + 16 ^ 31 * h [31] (cada letra representa um número hexadecimal). Então você pode modular esse grande número para projetá-lo no espaço do balde. [/Editar]
Obrigado !