Hai Rekan Statistik,
Saya memiliki hash penghasil sumber (mis., Menghitung string dengan stempel waktu dan informasi lainnya dan hashing dengan md5) dan saya ingin memproyeksikannya ke sejumlah bucket (katakan 100).
contoh hash: 0fb916f0b174c66fd35ef078d861a367
Apa yang saya pikirkan pada awalnya adalah menggunakan hanya karakter pertama dari hash untuk memilih ember, tetapi ini mengarah pada proyeksi liar yang tidak seragam (yaitu beberapa huruf terlihat sangat jarang dan lainnya sangat sering)
Kemudian, saya mencoba mengubah string hexa ini menjadi integer menggunakan jumlah nilai char, kemudian mengambil modulo untuk memilih sebuah bucket:
import sys
for line in sys.stdin:
i = 0
for c in line:
i += ord(c)
print i%100
Tampaknya berhasil dalam praktiknya, tetapi saya tidak tahu apakah ada akal sehat atau hasil teoretis yang dapat menjelaskan mengapa dan sejauh mana ini benar?
[Sunting] Setelah beberapa pemikiran saya sampai pada kesimpulan berikut: Secara teori Anda dapat mengubah hash menjadi integer (sangat besar) dengan menafsirkannya sebagai angka: i = h [0] + 16 * h [1] + 16 * 16 * h [2] ... + 16 ^ 31 * h [31] (setiap huruf mewakili angka heksadesimal). Kemudian Anda bisa memodulasi angka besar ini untuk memproyeksikannya ke ruang bucket. [/ Edit]
Terima kasih!