【问题标题】:Looking for a pseudo random number generation algorithm with specific properties寻找具有特定属性的伪随机数生成算法
【发布时间】:2019-01-13 21:25:58
【问题描述】:

我正在寻找具有以下属性的伪随机数生成器:

  • 不重复:返回的数字必须是唯一的,直到从0n的所有数字都返回一次,然后才能重复每个数字一次,等等。
  • 确定性:如果我两次使用相同的种子,它需要产生相同的序列。
  • 很少分配:它不应该需要分配大的内存区域来混合其数据,就像序列排列那样。

我的目标是我可以用一些种子值初始化随机数生成器,然后不断调用它的函数来生成序列中的下一个数字,可能会将前一个数字传递给它。

【问题讨论】:

  • 你看过these吗?
  • linear feedback shift register 可能对您有用。它肯定是不重复的,并且只需要很少的存储空间。另见xorshift
  • n 的值是多少?
  • @SeverinPappadeux n 通常介于 101000 之间
  • 好吧,n 非常小,正确的答案应该是 Fisher-Yates-Knuth 洗牌。最多几千字节

标签: algorithm random


【解决方案1】:

一种可能的方法是块密码。用给定的密钥加密数字 0, 1, 2, ... 并保证输出是唯一的,并且只有在通过块大小后才会重复。每个键都会产生不同的排列。您只需要跟踪您加密的密钥和最后一个数字。

DES 使用 64 位块,AES 使用 128 位块。如果这些尺寸不适合,那么您需要查看 Format preserving encryption 以获得适当尺寸的块。

需要注意的一点,非重复生成器不是随机的。随着更多数字的产生,未使用的数字池会缩小,直到最后一个数字完全确定。您需要考虑这在您的应用程序中是否重要。

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多