【问题标题】:random number generation how?随机数生成如何?
【发布时间】:2011-10-19 08:31:19
【问题描述】:

我想知道随机数函数是如何工作的。我的意思是使用了服务器时间还是使用了哪些其他方法来生成随机数?它们真的是随机数还是它们倾向于某种模式?让我们在 python 中说:

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

【问题讨论】:

标签: function random numbers


【解决方案1】:

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

但是,通过使用快速变化的数字(例如机器的时间(以滴答声)或其他变化的种子值)为“随机”数函数播种,可以获得合理的伪随机结果。然而,这并没有改变这样一个事实,即这些“随机”数字并不是真正随机的。但是,在大多数情况下,它们可以被认为是“足够好”。

附注:有实际随机数生成器是基于硬件的,可以购买和使用,它们实际上是随机的。这些通常取决于对变化量的测量,例如探测器接收到的光子数量,并且会产生偏差,以使它们返回真正的随机值。然而,这些比较少见。

【讨论】:

    【解决方案2】:

    是的,当数字不可预测并不重要时,通常使用时间来播种随机数生成器。例如,如果您在幻灯片中显示随机图像,则使用时间是一个很好的值,以便下次运行幻灯片时图像序列不一样。

    但是,由于每个人都非常准确地知道时间,因此对于加密目的而言,这将是一个可怕的种子。 Netscape used to use this method 被证明容易受到攻击。如今,安全随机数是使用鼠标移动和麦克风输入等设备收集的熵生成的。 “无头”网络设备使用其网络流量的特征作为或多或少不可预测的熵源。对于真正特殊的应用,有时会使用硬件随机源,如相机和盖革计数器。在 unix 系统上,您可以从 /dev/random 获取安全随机数,如果没有“足够的熵”(通过计数器估计)来保证安全随机性,它将阻塞。

    【讨论】:

      【解决方案3】:

      它的伪随机数生成器,具体工作取决于实现,但我认为它是 Mersen-Twister 的某种 c 实现: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))

      【讨论】:

        【解决方案4】:

        根据您的背景,您可能会喜欢Numerical Recipes。我是物理学家 我真的很喜欢这本书(尽管数学家偶尔 写一些不好的东西,它对很多主题都有很好的概述)。

        请参阅第 7 章了解随机数的精彩介绍。

        【讨论】:

          猜你喜欢
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 2021-05-15
          • 2020-08-06
          • 2020-07-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多