【问题标题】:Why is it hard for a program to generate random numbers?为什么程序很难生成随机数?
【发布时间】:2010-10-12 14:01:00
【问题描述】:

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

所以我希望有人能做到。

【问题讨论】:

标签: random


【解决方案1】:

怎么样,“因为计算机只是遵循指令,而随机数与遵循指令相反。如果你按照指令生成随机数,那么它就不是非常随机的!想象一下,试图给某人指示如何选择一个随机数。”

【讨论】:

  • 我的指示 - 掷骰子,掷骰子 - 瞧,随机数!
  • @Neil Butterworth - 好吧,我想计算机也可以做到这一点!
  • 嗯,不知道海森堡、混沌,甚至量子混沌属于那种描述!
  • 量子宇宙太固执了,无法遵循指令 ;-) 尽管量子物理学(还没有)支配计算......
  • 有趣的是,这些 cmets 中提出的解决方案并不是“生成随机数的程序”。相反,它们是一个读取通过其他方式生成的随机数的程序。
【解决方案2】:

这是一个儿童友好的解释:

  1. 掷骰子(面数无关紧要)

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

    • 向右移动
    • 向上移动
    • 向上移动
    • 掷骰子
    • 向下移动
    • 向右移动
  3. 给他们看骰子和纸。解释骰子代表计算机和 纸代表告诉计算机它将返回什么数字的数学或算法。

  4. 现在,掷骰子。告诉他们您正在“播种”或要求计算机从随机骰子位置开始。

  5. 移动骰子,按照纸上的每一步(向右移动)。

    • 假设您投掷了一个 6 面骰子,它的种子是 5。向右移动,您会得到一个 4。
  6. 说明计算机必须以起始值启动。这可以由任意数量的来源给出,例如日期或鼠标移动。向他们展示他们掷骰子的方式决定了初始值。

  7. 说明这张纸是计算机如何得到下一个数字的。告诉他们,纸上的指令可以很容易地改变,就像程序员可以改变随机发生器的算法一样。

  8. 开心地向他们展示仅受他们想象力限制的各种可能性。

现在回答你的问题:

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

  1. 让孩子把纸藏起来扔骰子。
  2. 然后让孩子按照纸上的步骤,写下他如何得到下一个随机数。
  3. 然后,给他们看你的论文。现在您有了他们的随机数生成器的副本,其他任何人都可以轻松“猜测”出下一个随机数。

无论孩子的算法多么有创意,您仍然应该能够推断出他们的算法。告诉您的孩子,在计算机世界中,没有什么是隐藏的,只要通过观察,即使只是观察到的数字,也可以发现随机数算法。

...作为副作用,如果孩子能够提出一个让您感到困惑的好算法,您无法推断出下一个序列,那么您就有了一个聪明的孩子。 :D

【讨论】:

  • 这对于一个 11 岁的孩子来说是一个很好的解释,他表现出对数学游戏的一些倾向。
  • 如果我要设计这样的算法,它将是自我修改的,算法将根据骰子上出现的数字进行修改。这会使大多数人感到困惑,他们将无法轻松地遵循指示。伟大的孩子友好的解释虽然。 [我可以为此得到糖果吗?]
【解决方案3】:

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

可能看起来令人惊讶,计算机并不是很聪明。计算机必须盲目地遵循它们的指令,因此是完全可以预测的。一台不以这种方式遵循其指令的计算机实际上是坏了!我们希望计算机完全按照我们说的去做。

这正是让随机做事变得困难的原因。必须告诉计算机如何生成随机数的一系列指令。但这并不是随机的,因为如果你给其他人指示和相同的起点,他们可能会得出相同的答案。所以计算机不能仅仅通过遵循指令来实现真正的随机。

【讨论】:

  • 我不会说计算机“[不是] 很聪明”,因为这意味着它们有点聪明。但事实并非如此——他们一点也不聪明。正如你所说,他们严格按照指示行事,仅此而已。
  • 确实如此。另一方面,我不想完全破坏他们可以唤起的惊奇感。此外,即使是盲目遵循指令的东西在理论上也可能是“智能的”——在认知/人工智能领域对此有很多猜测。
  • 今天八年级的孩子是否认为计算机是“智能”的东西?我认为它们只是他们的器具
  • 我会说计算机实际上非常聪明。但是因为它们非常聪明,所以我们设计它们是为了让它们只按照我们告诉它们的方式做,这样它们就不会接管。
  • 我还要说计算机“必须”是智能的,因为我们“必须”使用计算机来设计新计算机。如果计算机从地球上消失了,我们怎么能创造一个新的呢?
【解决方案4】:

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

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

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

【讨论】:

  • 统计分布的数字并不难。只需取一个可计算的正常数字并迭代数字即可。问题是这个数字仍然不是随机的,它仍然是确定性确定的。
  • 啊,谢谢你让我知道 :) 它只是表明随机数的主题对于像我这样的非专家来说是一个复杂的主题!
  • 是的;随机性的一个关键要素是不可预测性。如果你知道下一个数字,它就不是随机的。
  • 真的是随机性 = 不可预测性 吗?在研究了随机数流并发现 8(随机性)已经在很长一段时间内出现之后,您不能使用概率来游戏随机性。我知道根据定义,下一个随机数“重置历史”,但同时,
  • 随机性将确保所有数字最终都将被平均分配。因此,概率应该是一种工具,可以在某些情况下使一些随机数可预测,而随机性恰好使一个数字在很长一段时间内没有出现。 ? ;)
【解决方案5】:

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

【讨论】:

  • 这是一个很好的答案,但不适合孩子——下一个问题是“这意味着什么?”你最终会回到我所在的位置。
  • 正是我的想法。这是另一个问题的正确答案,但不是这个问题。
  • 我希望这个答案是个玩笑?
【解决方案6】:

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

此外,要使分布均匀且均匀也存在一些困难。

【讨论】:

    【解决方案7】:

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

    【讨论】:

    • 其实你可以提供来自人类的随机输入,一些应用程序会这样做:请你随机移动鼠标并点击一些随机键吗? (人类是否真的能产生真正的随机数是另一个问题)
    • 我会说以随机方式移动鼠标是随机的。您无需非常努力地创建可重复的鼠标移动的可能性可能非常低。
    【解决方案8】:

    “孩子们,除非他们坏了,否则电脑永远不会说谎,他们总是按照你告诉他们的去做。即使我们对结果感到失望,事实证明他们总是在做他们被告知要做的事情完全保真。他们只能做两件事:加一加一,以及将一个数字从一个地方移动到另一个地方。如果你想让他们产生随机数,你需要向他们解释如何在加一方面做到这一点和一个和一个动人。一旦你解释了,结果就不会是随机的。”

    【讨论】:

    • 你会得到一些困惑的目光
    【解决方案9】:

    因为唯一真正的随机源存在于量子级别。借助合适的硬件辅助,计算机可以访问此级别。例如,他们可以对放射性同位素的衰变或热离子阀的噪声进行采样。但是您的基本 PC 并没有配备这些很酷的东西。

    【讨论】:

      【解决方案10】:

      给孩子们一个简单的解释:

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

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

      【讨论】:

      • 好答案。我还认为从哲学意义上说,这取决于一个人对无限的信念。如果您断言某个无限宇宙的概念,那么根据定义,所有排列都必须存在。我认为随机只是规模问题。如果我们的计算机或感知设备无法检测到重复模式,那么从我们的角度来看,它是“足够随机的”。掷骰子。我们将其视为随机的,但如果我们能够将其视为所有掷骰子的无限集合,我们就会看到这种模式。基本上整个骰子的集合或排列在宇宙中无处不在。
      【解决方案11】:

      真的要完成

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

      【讨论】:

      • @JaredNielsen 的帖子是从 09 年开始的,当时它是原创的!
      【解决方案12】:

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

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

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

      【讨论】:

      • 这种过于简单化使得它在很多方面都不正确。 en.wikipedia.org/wiki/Randomness 有很多资料可以阅读。
      • 具体在哪几点?我可以从许多不同的方式解释你可能不同意我的观点。定义就是其中之一。
      • 听说过量子事件吗?
      • IOW,随机数被普遍接受。对于某些“随机”值,一切都可能是随机的。见xkcd.com/221。 Random 不是描述我们无法理解的数据,而是无法将当前事件与以前的事件联系起来。
      • LOL“普遍接受存在”。所以这意味着真的,对吧?随机是人类的解释。拿走人,没有随机,只有“这个”。它发生是因为它发生了,而不是因为它是随机的。
      【解决方案13】:

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

      【讨论】:

        【解决方案14】:

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

        【讨论】:

        • -1,这不是真的;计算机不可能是随机的,但它们肯定可以看起来是随机的
        • 老兄,“我的孩子们”的哪一部分你不明白?
        • 我想知道如何让计算机看起来“随机”。
        • 老兄,“我的孩子”的哪一部分暗示了年龄?
        • 反对这一点,你会用什么词来形容你的孩子长大后?你的后代?
        【解决方案15】:

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

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

        【讨论】:

          【解决方案16】:

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

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

          【讨论】:

            【解决方案17】:

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

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

            显然,甚至还有提供随机数的在线服务——例如random.org

            【讨论】:

              【解决方案18】:

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

              【讨论】:

                【解决方案19】:

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

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

                【讨论】:

                  【解决方案20】:

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

                  【讨论】:

                    【解决方案21】:

                    很容易想出一种算法来生成意想不到的数字,这些数字在某种意义上看起来是随机的。但是要设计一个生成真正随机数的算法,这很难。

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

                    【讨论】:

                      【解决方案22】:

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

                      虽然应该注意的是,计算机可以从与其相连的“环境”中收集熵,例如键盘和鼠标操作,这有助于生成随机数(直接或通过植入 PRNG)。

                      【讨论】:

                        【解决方案23】:

                        要让计算机生成一个随机数,计算机必须要有一个随机源。

                        它必须被喂食一粒种子,如果种子来自时钟,那么它可以通过知道时间来预测或计算,如果种子来自类似拍摄 lavalamp 并从图片流中获取数字,那么仅查看种子就很难知道下一个数字是什么。

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

                        【讨论】:

                          【解决方案24】:

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

                          【讨论】:

                          • “需要登录才能查看预发布产品和机密文档。”
                          【解决方案25】:

                          不久前我遇到了“Dice-O-Matic”

                          http://GamesByEmail.com/News/DiceOMatic

                          该问题在现实世界中的一种有趣的应用。

                          【讨论】:

                            【解决方案26】:

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

                            【讨论】:

                              猜你喜欢
                              • 2020-03-06
                              • 2023-03-30
                              • 2023-03-07
                              • 1970-01-01
                              • 2021-01-27
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-11-23
                              • 2011-05-21
                              相关资源
                              最近更新 更多