Hallo Statistiker,
Ich habe eine Quelle, die Hashes generiert (z. B. das Berechnen eines Strings mit einem Zeitstempel und anderen Informationen und das Hashing mit md5) und ich möchte es in eine feste Anzahl von Buckets projizieren (z. B. 100).
Beispiel-Hash: 0fb916f0b174c66fd35ef078d861a367
Was ich zuerst dachte, war, nur das erste Zeichen des Hashs zu verwenden, um einen Eimer auszuwählen, aber dies führt zu einer wild ungleichmäßigen Projektion (dh einige Buchstaben erscheinen sehr selten und andere sehr häufig).
Dann habe ich versucht, diese Hexa-Zeichenfolge mit der Summe der Zeichenwerte in eine Ganzzahl umzuwandeln, und dann mit dem Modulo einen Bucket ausgewählt:
import sys
for line in sys.stdin:
i = 0
for c in line:
i += ord(c)
print i%100
Es scheint in der Praxis zu funktionieren, aber ich weiß nicht, ob es einen gesunden Menschenverstand oder theoretische Ergebnisse gibt, die erklären könnten, warum und inwieweit dies zutrifft.
[Bearbeiten] Nach einigem Überlegen kam ich zu folgendem Schluss: Theoretisch können Sie den Hash in eine (sehr große) Ganzzahl umwandeln, indem Sie ihn als Zahl interpretieren: i = h [0] + 16 * h [1] + 16 * 16 * h [2] ... + 16 ^ 31 * h [31] (jeder Buchstabe steht für eine Hexadezimalzahl). Dann könnten Sie diese große Zahl modulieren, um sie auf den Bucket Space zu projizieren. [/Bearbeiten]
Vielen Dank !