为什么程序难以生成随机数?

时间:2009-03-11 00:36:05

标签: random

我的孩子问我这个问题,我无法给出简明易懂的解释。

所以我希望有人可以这样做。

26 个答案:

答案 0 :(得分:66)

怎么样,“因为计算机只是按照说明进行操作,而随机数字则跟随说明的相反。如果你按照说明制作一个随机数字,那么它就不是随机的!想象一下,试着给别人一些如何选择的指示随机数。“

答案 1 :(得分:13)

这是一个孩子友好的解释:

  1. 骰子(双方的数量无关紧要)

  2. 将这些写在一张纸上:

    • 向右移动
    • 向上移动
    • 向上移动
    • 将骰子翻过来
    • 下移
    • 向右移动
  3. 向他们展示骰子和纸张。说明骰子代表计算机和 paper表示数学或算法,告诉计算机它将返回什么号码。

  4. 现在,滚动骰子。告诉他们你正在“播种”或要求电脑从随机骰子位置开始。

  5. 通过移动骰子,按照文章中的每一步(向右移动)。

    • 假设你扔了一个6面的骰子,它在5点播种。向右移动,你得到一个4。
  6. 说明计算机必须以起始值开头。这可以通过任何数量的来源给出,例如日期或鼠标移动。告诉他们他们如何掷骰子决定了起始值。

  7. 说明这张纸是电脑如何获得下一个号码。告诉他们纸上的说明可以像程序员改变随机生成器的算法一样容易地改变。

  8. 乐趣向他们展示仅受其想象力限制的各种可能性。

  9. 现在回答你的问题:

      

    告诉他们,当一位优秀的数学家知道起始值以及计算机当前处于什么步骤时,数学家可以知道随机数的下一个值是什么。

    1. 要求孩子隐藏纸张并扔掉骰子。
    2. 然后让孩子按照纸上的步骤,然后写下他如何得到下一个随机数。
    3. 之后,向他们展示你的论文。既然你有他们的随机数生成器的副本,那么其他任何人都可以“猜测”下一个随机出现。
    4. 无论孩子的算法多么有创意,你仍然应该能够推断出他们的算法。告诉你的孩子,在计算机世界中,没有任何东西是隐藏的,只是通过观察,即使它只是观察到的数字,也可以发现随机数算法。

      ......作为副作用,如果孩子能够想出一个让你迷茫的好算法,你无法推断出下一个序列,那么你就有了一个聪明的孩子。 :d

答案 2 :(得分:10)

要求他们设计一个逐步的方法来生成一个随机数。

并且不接受“从1到10选择一个数字”作为答案;)

尝试一个问题应该说明必须从一组指令生成随机数的困难,就像计算机实际需要做的那样。

答案 3 :(得分:9)

这是我尝试解释大约八年级的随机性。希望你的孩子觉得它很有用!

看起来令人惊讶,计算机不是很聪明。计算机必须盲目地遵循他们的指示,因此完全可以预测。事实上,以这种方式不遵循其指示的计算机已被破坏!我们希望计算机能够完全按照我们的要求进行操作。

这正是使得随机做事变得困难的原因。必须告诉计算机一系列关于如何生成随机数的指令。但这并不是随机的,因为如果你给别人的指示和相同的起点,他们可以拿出相同的答案。因此,只要遵循指示,计算机就不能真正随机。

答案 4 :(得分:5)

因为计算机是确定性的机器。

答案 5 :(得分:4)

在计算机上生成随机数就像在标记游戏中首先选择谁是它时播放“Eenie meenie miney moe”。从表面上看它确实看起来是随机的,但当你进入细节时,它是完全确定的。将eenie meenie miney moe变成一个人无法预测结果的计划是很难的。

此外,使分销变得更好甚至是一些困难。

答案 6 :(得分:3)

因为给定任何输入,算法每次都会产生完全相同的输出。并且您不能只提供“随机”输入,因为您首先尝试生成随机数。

答案 7 :(得分:3)

“孩子们,除非他们被打破,否则电脑永远不会撒谎,而且他们总是做你告诉他们要做的事情。即使我们对结果感到失望,也总是证明他们正在按照他们所做的去做完全保真。他们只能做两件事:添加一个和一个,并将一个数字从一个地方移动到另一个地方。如果你想让它们产生随机数,你需要向他们解释如何添加一个一旦你解释了这一点,结果将不是随机的。“

答案 8 :(得分:3)

真的要完成

RFC 1149.5 specifies 4 as the standard IEEE-vetted random number.

来源:http://xkcd.com/221/

答案 9 :(得分:2)

对孩子们的简单解释:

随机性的定义是一个哲学和数学问题,超出了这个答案的范围,但根据定义,没有“随机”数字这样的东西。在形而上学的意义上,一个数字只是顺序形式的随机数;然而,根据样本大小,序列有可能遵循某些统计分布。随机数生成器(在我们的例子中是伪随机数生成器,或 PRNG )只是一个产生准随机数字序列的设备,我们只能估计它(基于固有的给定概率)在序列内)是随机的。

您应该向孩子们解释,程序只能使用复杂的数学公式模拟这些设备(这可以保证定义缺乏“随机性”,因为它们是某些功能或程序算法的结果)。通常,严格的统计分析是必要的,以区分量子硬件PRNG的使用(用这个机会向您的孩子解释海森堡原理!)和强大的软件PRNG。

答案 10 :(得分:2)

因为在量子水平上存在唯一真正的随机源。通过合适的硬件辅助,计算机可以访问此级别。例如,他们可以对放射性同位素的衰变或来自热离子阀的噪声进行采样。但是你的基本PC没有这么酷的东西。

答案 11 :(得分:2)

因为没有随机数这样的东西。

随机是我们在无法理解数据而不理解数据时使用的人类概念。如果我们相信科学将最终导致对一切如何运作的理解,那么肯定所有都是确定性的。

带走人类,没有随机只有“这个”。它发生是因为它发生了,而不是因为它是随机的。

答案 12 :(得分:0)

一段时间后,我遇到了“Dice-O-Matic”

http://GamesByEmail.com/News/DiceOMatic

这个问题有点真实世界的应用。

答案 13 :(得分:0)

计算机没有合适的硬件。普通计算机的硬件是确定性的。使用合适的硬件like mentioned here随机数根本不是问题。

答案 14 :(得分:0)

要使计算机生成随机数,计算机必须具有随机源。

如果种子来自时钟,则必须通过观察种子而不能预期或计算种子,然后通过知道时间可以预测或计算种子,如果种子来自拍摄一个lavalamp并从图片流中获取数字然后再看种子就更难知道下一个数字是什么。

计算机没有内置的熔岩灯来产生随机性,这就是说它很难,我们必须用计算机中存在的一些输入替换真正的随机性,可能是通过记录传递tcpip-packets或其他东西,但其获取随机性的方法并不多。

答案 15 :(得分:0)

需要注意的是humans perform very poorly at generating random numbers。计算机更糟糕,因为它们只是遵循严格的设置命令。当遵循算法(一组命令)时,人类只能生成好的(伪)随机数。电脑是一样的。

虽然应该注意计算机可以从连接到它的“环境”中收集熵,如键盘和鼠标操作,有助于生成随机数(直接或通过播种PRNG)。

答案 16 :(得分:0)

因为程序是一个系统,系统中的所有内容都是以一致性和规律性运行的。随机性在系统中没有位置。

答案 17 :(得分:0)

很容易想出一种能够生成意外数字的算法,从某种意义上说这些数字似乎是随机的。但是要设计一个生成真随机数的算法,那很难。

想象一下设计一种算法来模拟掷骰子。您可以轻松地制定一些过程,以在每次迭代时生成不同的数字。但是你可以保证,从长远来看(我的意思是,直到无穷大),6出来的次数与其他任何数字相同吗?在设计一个好的随机数发生器时,这就是你必须承担的那种承诺。如果申请(例如抽奖)需要,您必须提供关于随机性的强有力保证(即数学证明)。

答案 18 :(得分:0)

它可能有助于区分难以预测的数字(计算机可以创建的数字)与不确定性的数字(对计算机来说有点困难,理论上,任何物理存在都是如此)。

答案 19 :(得分:0)

实际上,在大多数现代计算机上,为大多数目的生成“随机足够”的数字并不困难。正如其他人所指出的,关键是拥有随机性。你不能只编写一个会在算法上产生随机性的程序,但你可以观察到大多数计算机具有合理复杂性的各种活动的随机性,即我们在编写程序时通常会想到的那些。一个这样的来源是来自各种系统设备的中断的定时数据。

有一段时间,许多计算机无法获取此数据,并且只能提供伪随机性,即基于特定种子的随机但可重复的数字分布。出于许多目的,这已经足够了 - 每次选择不同的种子都会产生足够好的随机性。对于其他目的,例如加密,这还不够强大,您需要一些随机性来开始,这是不可重复或可预测的。今天,大多数计算机(可能除了嵌入式设备之外)都非常复杂,具有可以生成加密强度随机数的随机源。例如,Linux有/dev/random,.NET框架支持加密强RandomNumberGenerator类,它有许多实现。

答案 20 :(得分:0)

看起来令人惊讶,很难让计算机偶然做一些事情。计算机盲目地遵循其指令,因此是完全可预测的。 (以这种方式不遵循其指令的计算机被破坏。)使用计算机生成随机数有两种主要方法:伪随机数生成器(PRNG)和真随机数生成器(TRNG)。

答案 21 :(得分:0)

主要是因为计算机没有任何以离散,非随机方式运行的功能。计算机是可预测的,这使我们可以编程可靠的软件。如果它不可预测,那么生成随机数会更容易(因为我们的软件可能依赖于这种不可预测的方法)。

虽然可以生成伪随机数和随机分布的数字,但如果没有单独的硬件,则无法生成真正的随机数。存在基于“量子”交互产生真正随机数的硬件(至少根据制造商而言)。在线扑克网站有时会将这些适配器用于其生成器。

显然甚至有在线服务提供随机数 - 例如random.org

答案 22 :(得分:0)

计算机只能执行算法计算,真正的随机数不是算法。您可以获得生成行为类似随机数的算法;这种算法称为“伪随机数发生器”。

在过去的不同时期,人们使用连接到电子噪声源的模数转换器生成随机数发生器,但这往往是相当专业的套件。

答案 23 :(得分:0)

生成随机数的算法不可避免地具有确定性。它们采用一个小的随机种子,并用它来获得一长串伪随机数字。

如果不在数据中引入细微的模式,就很难做到这一点。一串数字可以看起来完全随机,但具有重复的模式,这使得分布不适合需要随机性的应用程序。

答案 24 :(得分:0)

很难,因为给定相同的输入和条件集,程序每次都会产生相同的结果。根据定义,这不是随机的。

答案 25 :(得分:-1)

不难,这里有一对免费:12,1400,397.6