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