我正在处理UUIDs的流。我的最终目标是随机将这些数字分成10个桶,即将它们中的每一个放入10个桶中的任何一个桶中,以便任何给定的时刻,如果我处理了来自该流的N
UUID号码我每个桶中应该有大约N/10
个数字。我提出了以下想法:
sum
。sum modulo 100
值。我尝试了接近大约200,000个UUID的实验(并且用8个不同的流做了),观察到每个桶有接近10%的总数(在9.85%到10.15%的范围内),这似乎是相当随意。我的问题是:
MD5
的哈希值(比如说UUID
哈希),然后执行这些步骤,我会不会更好有机会随机分割它们吗?一个更普遍的问题是,是否有一种数学方法可视化哈希可以在这些场景中提供帮助?答案 0 :(得分:1)
实际上,您所描述的算法确实实现了哈希函数,因为它将UUID的空间映射到一组固定大小的数字,即一组从1到10的数字。
您的问题1.然后成为您的算法定义的哈希函数的输出均匀分布的问题。
您的哈希函数是否比MD5更好地分配了输出,很难说是先验的,因为这将取决于输入流的分配。但是,语言库(例如MD5)中附带的哈希函数通常实现启发式,以避免明显不幸的分发发生冲突。一个具体的例子:说您的输入流仅包含集合中的UUID
00000000-0000-0000-0000-000000000001
00000000-0000-0000-0000-000000000010
.
.
.
10000000-0000-0000-0000-000000000000
然后所有这些都将映射到存储区1,而MD5可能会混乱。
您可以使用chi-squared test来衡量哈希函数对输入样本的效果。