伪随机数和真正随机数之间的区别是什么?

时间:2017-01-17 01:24:55

标签: c++

C ++中真正的随机数和伪随机数有什么区别? (我想,它希望我更长时间地提出我的问题,尽管我已经尽可能地解决了我的问题。我认为这就是我的上一个问题没有得到如此好的原因,我可能是错了。-_-。我确实谷歌这个,但我没有成功。)

4 个答案:

答案 0 :(得分:2)

伪随机数不是真正的随机数,因为它们是使用确定性过程生成的。例如,如果我想要一个0到4之间的随机数并且我可以在几秒钟内访问当前时间,我可以通过将模数5应用于时间值来生成伪随机数,这将返回0到4之间的不同数字。数字不是真正随机的原因是因为可以通过知道时间在生成之前预测该数字。永远无法预测真正随机的数字。

你可以谷歌“决定论”了解更多。

答案 1 :(得分:1)

这个问题可能导致一个非常深刻的哲学兔子洞。如果真的存在一个真正非确定性的过程,这是一个悬而未决的问题。量子力学表明宇宙是非确定性的,但在某种程度上具有确定性概率定律。尽管如此,这并不排除在某种更基本的层面上,确定性过程存在的可能性,这种过程在较大范围内只是随机出现。随机性和混乱是密切相关的,但它们并不一定意味着同样的事情。

因此,“随机”一词可能意味着几件不同的事情。出于实际目的,我们可以将随机性视为某种类型的数学模式,具有某些特征。随机过程通常遵循一些概率分布(即白噪声,粉红噪声,高斯噪声,泊松......),但实际上不可能预测随机过程输出的单个结果。

伪随机数生成器或PRNG使用一种算法,该算法使用确定性混沌来创建出现的模式在统计上类似于真正的随机过程。 PRNG通常使用起点或种子。通常使用时间函数的输出来种子PRNG。 PRGN有许多不同的算法,它们在性能和质量上都有所不同。

PRNG的一个重要缺点是输出最终重复或是周期性的。如果有人知道算法,并且起点( seed ),也可以重新创建完全相同的序列,因为数字计算机必然是确定性设备。由于PRNG采用PRNG,因此依赖PRNG的安全机制通常存在隐藏的漏洞。

某些应用程序,尤其是安全性应用程序,或者例如彩票,需要将实际用途视为真正的随机数生成器。提供硬件设备,利用物理现象。例如,热噪声(即电子的随机运动)由量子力学行为控制,并且通常用于RNG硬件实现中。某些量子力学现象通常被认为是随机的。根据量子力学的大多数标准解释,即使你有一个完整的系统模型(即薛定谔方程的时间演化)和所有初始变量的知识,到无限精度,你仍然无法准确预测下一个衡量结果。

理论上,您还可以使用无线电背景噪音(在电台之间考虑电视静电或无线电噪音)。任何这些信号源都可以被过滤或用作PRNG的输入,以创建高质量的随机序列,而没有任何明显的统计可预测性。

这是一个非常简单的玩具PRNG算法,供您玩耍并帮助理解这个概念。

// linear congruential generator
int seed 123456789;

int rand() {
    seed = ( a * seed + c ) % m;
    return seed;
}

以上摘自Special simple random number generator。我希望能够解释你的问题。

答案 2 :(得分:0)

  

真正的随机数和伪数之间有什么区别   C ++中的随机数?

在C ++中,可以重复伪随机数序列。一个“真正随机”的数字(我认为不支持C ++和C,没有自定义硬件)不能重复。

标记为C ++,因此这是一种C ++方法。

最近我一直在使用C ++提供的东西,但我仍然通过改组一个简单的值向量来控制我的数字范围。这也支持将相同的随机shuffle应用于多个测试,或者重复序列。

typedef std::vector<int> IntVec_t;  // a convenient type

IntVec_t  iVec;                     // a std vector of int

for (int i=1; i<=32; ++i)
   iVec.push_back(i);               // add 32 ints, range 1..32

{        
   std::random_device rd;      // the generator uses this
   std::mt19937_64 gen(rd());  // there are several generators available

   std::shuffle (iVec.begin(), iVec.end(), gen); // shuffle the vector
}

初始化为:(一行16个元素)

 1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 

17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32 

随机播放的内容(可能):

29   26   12   16   20    7   31   28   30   18    4   23   17   14   32    1 

11   13    5    6    9    2   19   10   21   24    3    8   25   27   22   15 

答案 3 :(得分:0)

简而言之 伪数字具有repp而

真正的随机数没有限制,它有种子,例如时间或其他任何东西 每次都会明显不同。