在大数范围内生成唯一的随机数

时间:2014-01-18 10:44:21

标签: math random

我要问的是,如果存在一种生成没有辅助结构的唯一随机数的方法。

我的意思是,如果已经存在一些数学函数(或算法),它们只在场上一次生成随机数(我不会尝试编写某种特定于此问题的散列函数)。

这是因为我会生成很多唯一数字(整数),选择在0到10.000.000.000之间(大约60%的字段),因此随机重复不是那么不可能,并将先前生成的数字存储在结构中后续查找(即使经过优化,如位数组)也可能过于昂贵(空间和时间上)。

P.S。

(注意,当我写随机时,我的意思是伪随机)

2 个答案:

答案 0 :(得分:4)

如果你想确保唯一性,那么不要使用哈希函数,而是使用加密函数来加密数字0,1,2,3 ......因为加密是可逆的,然后每个数字(最大块大小) )是唯一加密的,会产生独特的结果。

您可以使用方便的块大小编写一个简单的Feistel cypher,也可以使用Hasty Pudding cypher,它允许大范围的块大小。每当输入数字输出太大时,只需转到下一个输入数字。

更改密码的密钥将生成一系列不同的输出数字。通过记住键并再次以0,1,2再次开始,可以在需要时重新生成相同的数字序列...无需存储整个序列。正如您所说,序列是伪随机的,因此如果您知道密钥,则可以轻松重新生成。

答案 1 :(得分:0)

您可以尝试所谓的准随机数,而不是伪随机数,这些准随机数更准确地称为低差异序列。 [1]

[1] https://en.wikipedia.org/wiki/Low-discrepancy_sequence