是否存在任何无法显示模式的随机数生成算法?

时间:2015-07-24 11:02:40

标签: algorithm random

是否可以创建随机数,即使宇宙结束,也不会重复获取下一个随机数的模式。

4 个答案:

答案 0 :(得分:1)

我读了这个安全法则:

  

所有需要非平凡随机数的过程必须尝试   使用openssl_pseudo_random_bytes()。你可以回退   mcrypt_create_iv(),源设置为MCRYPT_DEV_URANDOM。你可以   还尝试直接从/ dev / urandom读取字节。如果一切   失败,你别无选择,你必须生成一个值   通过强烈混合多个可用的随机或秘密来源   值。

http://phpsecurity.readthedocs.org/en/latest/Insufficient-Entropy-For-Random-Values.html

答案 1 :(得分:0)

  bignum getUniqueRandom()
  {
         static bignum sum = 0;
         sum += rand();
         return sum;
  }

这样,下一个随机数将始终大于前一个(通过0和1之间的随机因子),因此返回的数字将永远不会重复。

编辑: 随机性要求如此之高的实际方法是使用硬件随机数发生器;例如,测量背景辐射的原子衰变的芯片产生真正的随机种子。当然,性质或随机性是这样的,从来没有保证模式不能重复,或者你会损害实际的随机性。结果。但是这种模式不能通过任何技术/数学手段重复,所以重复是没有意义的。

答案 2 :(得分:0)

按照Layman的说法,;为了生成特定的数据形式,例如字符串或整数,你必须有某种算法,显然不能100%无法追踪...

基本上,最终产品myust来自一系列事件(算法),在这些事件中,不可能保留'

答案 3 :(得分:0)

在执行计算机程序的每一步中,总内部状态确定下一个内部状态将是什么。这个内部状态必须由一些位表示 - 程序使用的所有内存,处理器的寄存器,以及影响它的任何其他内容。给定N位状态信息,只能有2 ** N个可能的状态。

由于任何给定的状态T将导致相同的状态T + 1(这就是“确定性”意味着),算法必须最终在不超过2 ** N步之后重复。那么限制RNG的周期长度的是内部状态的位数。简单的LCG可能仅具有32位状态,因此周期<= 2 ^ 32。像Mersenne Twister这样的东西有19968位内部状态,其周期为2 ^ 19937-1。

因此,对于任何确定性算法“在宇宙历史中不可重复”,你可能需要宇宙的大部分原子作为其内部状态的记忆。