0

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

4

1 回答 1

1

我计算出 500 万个 、 和 值的结果nSHA1(N+1)%100然后SHA1(N+2)%100通过 stats 包运行它。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 结果。

于 2013-08-04T20:28:46.917 回答