stackoverflow上有类似的问题,但不完全是我的。
所以我有一系列数字(从1到约5,000,000)(称这个数字为N)。我想将每个数字映射到[0,99]中的数字。一种解决方案是采用N除以100的提醒。一切都很好。我再次想要第二次这样做,看看这个N被映射到的[0,99]中的哪个数字。唯一的要求是N首次映射到[0,99](比如34)的数字的信息不应该决定它第二次映射到的数字。
所以我想第一次这样做(SHA(N + 1)%100)和第二次(SHA(N + 2)%100),依此类推......
保证有效吗?或者我错过了什么?
简单地说: 从[0,99]中取任意两个任意数字x1,x2。 计算[0,5000000]中的所有数字,第一次映射到x1,第二次映射到x2。对于x1,x2的任何选择,这个计数是否相同(或多或少)
答案 0 :(得分:1)
我为n
,SHA1(N+1)%100
和SHA1(N+2)%100
的500万个值调出结果,然后通过统计数据包运行它。 SHA结果集均匀分布在0到99之间,相关矩阵为:
n sha+1 sha+2
n 1.0000 -0.0016 -0.0016
sha+1 -0.0016 1.0000 -0.0001
sha+2 -0.0016 -0.0001 1.0000
换句话说,SHA结果实际上是彼此不相关的。来自第一个SHA计算的给定数字0-99同样可能与0-99中的任何一个配对,作为整个集合中的第二个SHA结果。