关于随机数生成

时间:2020-01-14
本文章向大家介绍关于随机数生成,主要包括关于随机数生成使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

原文参阅:码农翻身 - https://mp.weixin.qq.com/s/VpYM4mP2CGLIgiadL-1SDw

以下为总结。

对生成的随机数的要求

1.  要杂乱无章 

2.  不能预测,不能根据已经生成的随机数,推测出下一个随机数是啥 

3.  不能重现, 无法重现和某一随机数列完全相同的数列

随机数生成方式演进

伪随机数:线性同余算法

: A、C、M是精心挑选的整数。C是所谓的“种子”seed

大多数语言中的随机数函数,如C的srand/rand、Java中的Random均为此的实现;

是伪随机数,因为可预测:知道当前随机数可以知道下一随机数;可复现:seed一样则可生成两个完全一样的随机数数列。

真随机数

使用hash函数

R1 = hash(seed) 

seed = seed + 1 
R2 = hash(seed) 

seed = seed + 1 
R3 = hash(seed) 

seed = seed + 1 
R4 = hash(seed) 
 ......  

/dev/rand

其为基于机器运行的环境噪音(用户敲击键盘速度、鼠标移动、网卡发送数据量、硬盘写入数据等)经Hash后得到。故生成的数杂乱无章,无法预测,无法重现,为真随机数。

原文地址:https://www.cnblogs.com/z-sm/p/12190605.html