我的孩子问了我这个问题,可我无法给出简洁易懂的解释。
所以我希望在SO上能有人给出答案。
我的孩子问了我这个问题,可我无法给出简洁易懂的解释。
所以我希望在SO上能有人给出答案。
孩子们,这是一个简单的解释:
随机性的定义是一个哲学和数学问题,超出了这个回答的范围。但根据定义,不存在所谓的“随机”数字。从形而上学的角度来看,数字只有在顺序形式下才是随机的;然而,根据样本大小,有一定的概率会出现某些统计分布。我们使用的伪随机数生成器(PRNG)只是一种产生准随机数字序列的设备,我们只能根据给定的概率估计它们是否随机。
你应该向孩子们解释,程序只能使用复杂的数学公式来模仿这些设备(根据定义,这保证了缺乏“随机性”,因为它们是某个函数或过程算法的结果)。通常,需要进行严格的统计分析,才能区分量子硬件PRNG(利用这个机会向孩子们解释海森堡原理!)和强软件PRNG的使用。
因为不存在所谓的随机数。
随机是人类的概念,当我们无法理解数据并且不理解它时使用。如果我们相信科学最终会导致对一切运作方式的理解,那么一切肯定都是确定性的。
去掉人类因素,就没有随机,只有“这个”。它发生是因为它发生了,而不是因为它是随机的。
因为程序是一个系统,而系统中的所有内容都应该具有一致性和规律性。随意性在系统中没有任何位置。
这很困难,因为在给定相同的输入和条件的情况下,程序每次都会产生相同的结果。根据定义,这不是随机的。
计算机只能执行算法计算,而真正的随机数并不是算法性的东西。你可以得到产生行为类似于随机数的算法;这些算法被称为“伪随机数生成器”。
在过去的各个时期,人们曾经从模拟数字转换器连接到电子噪声源中制作随机数生成器,但这往往是相当专业的设备。
主要是因为计算机没有任何以离散、非随机方式运作的功能。计算机是可预测的,这使我们能够编写可靠的软件。如果它不可预测,那么生成随机数将更容易(因为我们的软件可以依赖于这种不可预测的方法)。
虽然可以生成伪随机数和分布随机数,但没有单独的硬件就无法生成真正的随机数。有一些硬件基于“量子”相互作用生成真正的随机数(至少根据制造商)。在线扑克网站有时会使用这些适配器来生成随机数。
显然,甚至有在线服务提供随机数 - 例如random.org。
尽管看起来令人惊讶,但很难让计算机通过偶然性来执行某些操作。计算机盲目地遵循其指令,因此完全是可预测的(如果计算机不以这种方式遵循其指令,则说明它出现了故障)。使用计算机生成随机数有两种主要方法:伪随机数生成器(PRNG)和真随机数生成器(TRNG)。
曾经,许多计算机无法获取这些数据,只能提供伪随机性,即基于特定种子的随机但可重复分布的数字。对于许多目的来说,这已经足够了——每次选择不同的种子会产生足够好的随机性。但对于其他用途,例如加密,这并不够强大,您需要一些不可重复或可预测的随机性作为起点。今天,大多数计算机(也许除了嵌入式设备)都足够先进,可以生成加密强度的随机数的随机源。例如,Linux 有 /dev/random,.NET 框架支持具有多个实现的密码学强 RandomNumberGenerator 类。