2011-08-03 58 views
1

我想知道随机数函数是如何工作的。我的意思是使用服务器时间或使用其他方法生成随机数字?他们真的是随机数还是倾向于某种模式?比方说python:随机数的生成过程如何?

import random 
number = random.randint(1,10) 
+2

可能的重复:http://stackoverflow.com/questions/1716308/how-does-a-random-number-generator-work – BlackJack

+0

您是否阅读过http://en.wikipedia.org/wiki/Random_number_generation? – lhf

+0

大量的重复在这里;我不想只是复制/粘贴[我刚才的答复(http://stackoverflow.com/questions/6593636/how-does-software-generate-random-numbers-and-how-do-these-compare -with人-GE/6593689#6593689)...的 – Joey

回答

1

随机数发生器在不同平台上有所不同(当然),但一般来说,它们只是“伪随机”数。也就是说,“随机”数字是由一种算法生成的,该算法被选择为提供合理均匀的数字分布,并且具有类似于期望的真实随机性的统计分布。这些随机数发生器通常采用“种子”值,该值用于启动“序列”;通常,相同的“种子”值将返回相同的“随机”数字(表明它显然不是“随机”)。

然而,通过使用快速变化的数字(例如来自机器的时间(以刻度))或其他变化的种子值来播种“随机”数字函数,可以获得合理的伪随机结果。然而,这并没有改变这个事实,即这些“随机”数字并不是真正的随机数;但是,对于大多数目的而言,它们可以被认为是“足够好”的。

作为附录的一个注释:有实际的随机数发生器是基于硬件的,可以购买和使用,实际上是随机的。这些通常取决于变化量的测量,例如由检测器接收的光子的数量,并且偏向于使得它们返回真正的随机值。但是,这些比较少见。

+0

好的。谢谢。尽管所有的答案都是有用的。 – user366121

1

它的伪随机数生成器,精确的工作依赖于实现,但我以为这是某种C实现Mersen捻的:http://docs.python.org/library/random.html(第三段)

哦,和详细的功能randint在基地random建功能。随机返回范围(0,1]中的实数,并且randint(a,b)返回范围[a,b]中的整数并且可以实现为lambda a,b: int(a + random.random()*(b+1-a))

1

是的,时间通常用于种子随机数发生器,当它不重要时例如,如果您在幻灯片放映中显示随机图像,那么时间是一个很好的使用价值,以便下次运行幻灯片时图像序列不一样。 ,因为大家都知道时间的准确性很高,这对于加密的目的来说是一个可怕的种子,并且它被证明容易受到攻击,现在安全的随机数是通过设备收集的熵产生的像鼠标移动和麦克风输入。 “无头”网络设备使用其网络流量特征作为或多或少不可预知的熵源。对于真正特殊的应用,有时会使用硬件随机源,如摄像机和盖革计数器。在unix系统上,你可以从/ dev/random获得安全的随机数,并且如果没有“足够的熵”(通过计数器估计)来保证安全的随机性,它将会阻塞。

1

根据你的背景你可能会喜欢Numerical Recipes。我是一位物理学家 ,我非常喜欢这本书(尽管数学家偶尔会写一些关于它的坏东西,它会给很多主题提供很好的概述)。

有关随机数的一个很好的介绍,请参阅第7章。