随机数和随机性:伪随机数和真随机数

随机数可以用于各种目的,例如生成数据加密密钥、模拟和建模复杂现象以及从更大的数据集中选择随机样本。它们在美学上也被使用过,例如在文学和音乐中,当然在游戏和赌博中也很流行。当讨论单数时,随机数是从一组可能的值中抽取出来的,每个值都是等可能的;当讨论随机数序列时,每个被绘制的数字必须在统计上独立于其他数字。

 

随着计算机的出现,程序员认识到有必要在计算机程序中引入随机性,然而,令人惊讶的是,要让电脑偶然地做一些事情是很困难的。计算机盲目地听从指令,因此是完全可以预测的。使用计算机生成随机数的主要方法有两种:伪随机数生成器(PRNGs)和真随机数生成器(TRNGs)。这两种方法有不同的特点,各有利弊。

 

Pseudo-Random Number Generators (PRNGs)

正如“伪随机数”这个词所暗示的那样,伪随机数并不是你所期望的那种随机数字,至少在你用来掷骰子或买彩票的时候不是这样,从本质上说,PRNGs是一种算法,它使用数学公式或简单的预计算表来生成随机出现的数字序列。线性同余法是PRNG的一个很好的例子。对伪随机数理论进行了大量的研究,而生成伪随机数的现代算法非常好,以至于这些数字看起来完全是随机的。

如果将计算机生成的随机数与骰子掷出的点数进行比较,就很容易理解PRNGs和TRNGs之间的基本区别。因为PRNGs通过使用数学公式或预先计算的列表生成随机数,所以使用一个对应于某人多次滚动骰子并写下结果。每当你想要一个骰子,你就会得到名单上的下一个。实际上,这些数字看起来是随机的,但实际上它们是预先确定的。TRNGs的工作原理是让一台电脑实际滚动骰子——或者,更常见的是,使用一些比骰子更容易连接到电脑的物理现象。

PRNGs是高效的,这意味着它们可以在短时间内生成许多数字,并且是确定性的,这意味着如果序列中的起始点已知,一个给定的数字序列可以在稍后的日期被复制。PRNGs通常也是周期性的,这意味着序列最终会自己重复。虽然周期性从来都不是一个理想的特征,但现代PRNGs的周期太长,以至于在大多数实际情况下都可以忽略它。

这些特性使prng适用于需要许多数字的应用程序,并且在这些应用程序中,相同的序列可以很容易地重播。这种应用程序的常见示例是模拟和建模应用程序。prng不适用于那些数据不可预测的应用程序,比如数据加密和赌博。

值得注意的是,尽管好的PRNG算法存在,但它们并不总是被使用,而且很容易出现令人讨厌的意外情况。以流行的web编程语言PHP为例。如果你在GNU/Linux中使用PHP,你很可能会对你的随机数非常满意,然而,如果您在Microsoft Windows中使用PHP,您可能会发现您的随机数并不完全符合2008年可视化分析中的要求。另一个例子可以追溯到2002年,当时一名研究人员报告说,MacOS上的PRNG不够好,无法对病毒感染进行科学模拟。最重要的是,即使PRNG能够满足应用程序的需求,您仍然需要小心使用哪一种。

 

True Random Number Generators (TRNGs)

与PRNGs相比,TRNGs从物理现象中提取随机性并将其引入计算机。你可以把它想象成一个连接到电脑上的骰子,但通常人们使用的是一种物理现象,它比连接电脑更容易。物理现象可以很简单,比如鼠标移动的细微变化或者按键之间的时间长短。然而,在实践中,您必须小心选择哪个源。

然而,有许多其他的方法可以让你的计算机具有真正的随机性。放射性物质是一种很好的物理现象,辐射源衰变的时间点是完全不可预测的,它们很容易被检测出来并输入计算机,避免了操作系统中的任何缓冲机制。瑞士Fourmilab的HotBits服务是使用这种技术的随机数生成器的一个很好的例子。另一种合适的物理现象是大气噪声,用普通收音机很容易就能接收到。这是RANDOM.ORG所使用的方法。你也可以使用来自办公室或实验室的背景噪音,但你必须注意模式,你电脑里的风扇可能会造成背景噪音,因为风扇是一个旋转装置,它产生的噪音很可能不会像大气噪音那样随机。

只要你小心,可能性是无限的。毫无疑问,视觉上最酷的方法是lavarand发生器,它是由硅图形和熔岩灯的快照来生成真正的随机数。不幸的是,lavarand已经不能使用了,但是它的一个发明者正在LavaRnd网站上进行这项工作(没有熔岩灯)。另一种方法是Java EntropyPool,它从各种来源(包括HotBits和random)中收集随机比特。也可以从网页上访问,由EntropyPool自己的web服务器接收。

无论使用哪种物理现象,生成真实随机数的过程都涉及到识别数据中不可预测的微小变化。例如,HotBits在放射性衰变和随机衰变之间的延迟上几乎没有变化。ORG使用了大气噪声振幅的微小变化。

TRNGs的特点与PRNGs有很大的不同。首先,与PRNGs相比,TRNGs通常效率很低,生成数字的时间要长得多。它们也是不确定性的,这意味着一个给定的数字序列不能被复制,尽管同样的序列当然可能偶然发生几次。TRNGs没有周期。

 

Comparison of PRNGs and TRNGs

下表总结了两种随机数生成器的特点。

CharacteristicPseudo-Random Number GeneratorsTrue Random Number Generators
EfficiencyExcellentPoor
DeterminismDeterminsticNondeterministic
PeriodicityPeriodicAperiodic

 

这些特性使TRNGs适合于PRNGs不适合的应用程序集,例如数据加密、游戏和赌博。下表总结了哪种类型的生成器最适合哪些应用程序:

ApplicationMost Suitable Generator
Lotteries and DrawsTRNG
Games and GamblingTRNG
Random Sampling (e.g., drug screening)TRNG
Simulation and ModellingPRNG
Security (e.g., generation of data encryption keys)TRNG
The ArtsVaries

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值