各位统计学家,您好,
我有一个生成散列的源(例如,计算带有时间戳和其他信息的字符串并使用 md5 散列),我想将它投影到固定数量的桶中(比如 100)。
样本哈希:0fb916f0b174c66fd35ef078d861a367
我最初的想法是只使用哈希的第一个字符来选择一个桶,但这会导致非常不均匀的投影(即一些字母很少出现,而另一些则非常频繁)
然后,我尝试使用 char 值的总和将此六进制字符串转换为整数,然后取模选择一个存储桶:
import sys
for line in sys.stdin:
i = 0
for c in line:
i += ord(c)
print i%100
它似乎在实践中有效,但我不知道是否有任何常识或理论结果可以解释为什么以及在多大程度上这是正确的?
[编辑] 经过一番思考,我得出以下结论:理论上,您可以通过将散列解释为数字来将散列转换为(非常大的)整数: i = h[0] + 16*h[1]+16* 16*h[2] ... + 16^31*h[31] (每个字母代表一个十六进制数)。然后你可以对这个大数字取模以将其投影到存储桶空间。[/编辑]
谢谢 !