使用SHA多次生成随机数

时间:2013-08-04 10:59:43

标签: random sha ab-testing abtest

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的任何选择,这个计数是否相同(或多或少)

1 个答案:

答案 0 :(得分:1)

我为nSHA1(N+1)%100SHA1(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结果。