- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
它会扔硬币来获得随机位吗?
还是掷骰子来获得1到6之间的随机整数?
还是从经过打乱的牌组中拿出一张卡片来获得1到52之间的数字?
。
。
。
还是可以像我们一样思考或拥有像我们一样的智慧?
显然,以上示例不是生成随机数据的方法。
那么,软件库如何在给定范围内生成random
数字?
哪个更随机:由人还是软件生成?
最佳答案
(注意:这通常是关于计算及其用途中的随机[和伪随机]数。)
确定性的过程永远都不可能有真正的随机数,这就是为什么计算机不太适合生成随机数的原因(因为CPU只能以确定性的方式翻转位)。大多数语言,框架和库都使用所谓的Pseudo-random number generators(PRNG)。那些采用某种初始状态向量的种子,该初始状态向量可以是单个数字或数字数组,并从那里生成一系列看似随机的值。结果通常满足某些统计指标,但并非完全随机,因为同一种子将产生完全相同的序列。
最简单的PRNG之一是所谓的Linear Congruential Generator(LCG)。它只有一个数字作为状态(最初是种子)。然后,对于每个连续的返回值,公式将像这样循环:
其中a,b和c是生成器的常数。 c通常是2的幂,例如232,仅仅是因为它易于实现(自动完成)且速度很快。但是,很难找到a和b的好值。作为最简单的示例,当使用a = 2和b = 0时,您可以看到结果值永远不会是奇数。这限制了发生器可以非常严格地产生的值的范围。通常,LCG是一个非常古老的概念,长期以来被更好的生成器所取代,因此,除非在极其有限的环境中使用(除非即使嵌入式系统通常也可以毫无问题地处理更好的生成器),否则不要使用它们-MT19937或其概括, WELL generators通常对于只不想担心其伪随机数的属性的人来说要好得多。
PRNG的一项主要应用是仿真。由于PRNG可以估计或保证统计特性,并且由于种子的性质可以精确地重复进行实验,因此它们在这里做得很好。假设您要发表论文,并希望其他人复制您的结果。使用硬件RNG(如下所述),除了包含您使用的每个单个随机数之外,您别无选择。对于可以轻松使用数十亿个甚至更多个数字的蒙特卡洛模拟,这是不可行的。
然后是用于密码应用的随机数生成器,例如保护您的SSL连接。例如Windows的CryptGenRandom或Unix的/dev/urandom
。这些通常也是PRNG,但是它们使用所谓的“熵池”进行播种,其中包含不可预测的值。这里的要点是生成不可预测的序列,即使相同的种子仍会产生相同的序列。为了最大程度地减少攻击者猜测序列的影响,需要定期对它们进行重新播种。熵池是从系统中的各个点收集的:事件,例如输入,网络活动等。有时,它也会被初始化为整个系统中假定包含垃圾的内存位置。但是,如果完成,必须注意确保熵池确实包含不可预测的内容。 Something that Debian got wrong in OpenSSL a few years ago.
您也可以直接使用熵池来获取随机数(例如,Linux的/dev/random
; FreeBSD对/dev/random
使用与/dev/urandom
相同的算法),但是一次也不会得到太多它是空的,需要一段时间才能补充。这就是为什么上面提到的算法通常用于将很小的熵扩展到更大的体积的原因。
然后是基于硬件的随机数生成器,它们使用不可预测的自然过程,例如放射性衰变或电线中的电噪声。那些是最苛刻的应用程序,需要许多“真正的”随机数,并且通常每秒可以生成数百MiB的随机性(好吧,该数据点已有几年历史,但是我怀疑这样做可以做很多)现在更快)。
您可以通过编写一个程序来模拟这样的事情,该程序是从带镜头盖的网络摄像头拍摄图像(然后才保留噪点),或者从不存在实际输入的音频输入中获取图像。那些对于一点黑客来说是很好的,但是通常不会产生良好的随机数,因为它们有偏差,即在比特流中零和那些比特没有以相同的频率表示(或者更进一步,序列00
,< cc>,01
和10
的生成频率不同...您也可以对较大的序列执行此操作)。因此,实际硬件RNG的一部分用于确保结果值满足某些统计分布属性。
有些人actually throw dice to get random dice rolls甚至take this into overdrive。人类创造了very bad random number generators。
关于language-agnostic - 哪个更随机:人工生成或软件生成的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593636/
前言 在进行Maven开发时,往往需要下载大量jar包,而由于网络不稳定等其他因素可能导致jar未下载完毕,然后保留了lastUpdated文件,导致无法更新失效的jar包。 本文分享 bat脚本,自
按字母顺序排序并不是我们花太多时间担心的事情。我们在很小的时候就学习了字母表,现在我们知道它(拉丁文)以 A 开头,然后是 B,然后是 C 等等,一直到 Z。 但是这个订单究竟存储在计算机系统中的什么
我尝试使用可分离为 2 个一维向量的二维矩阵来证明二维傅里叶变换的信号属性的可分离性。地点: f(x,y) = f(x)*f(y) 那么 F(u,v) = F(u)*F(v) 使用以下代码: % Se
我需要为几个小型sqlite数据库编写文档。想描述数据的使用方式,包括表和行说明以及示例数据。 是否可以使用MySQL Workbench?如果没有其他选择,或者我可以使用任何模板? TIA! 最佳答
我正在尝试使用旧版本(例如:1.4.5)安装 memcached,但我不知道该怎么做。 brew install memcached安装最新的。 我也试过 brew install memecache
背景 多年来,我一直使用自己的类似贝叶斯方法,根据大型且不断更新的训练数据集对来自外部来源的新项目进行分类。 每个项目都有三种类型的分类: 30 个类别,其中每个项目必须属于一个类别,且最多属于两个类
嗨,我需要确定 4 个数字是否相等。数字是 size(A,1)、size(B,1)、size(C,1) 和 size(D,1),其中,例如A = [1 2; 3 4], B=[1 2 3, 4 5 6
Wikipedia 中的文章似乎太冗长了。 我将框架理解为一组精心设计的库和工具。 Qt 框架为跨平台 GUI 提供了一组库/工具。 cocoa 框架为 Mac 做了同样的事情。 软件框架的实际定义是
我们的客户最近发现了这个网站: http://mydeco.com/3d-planner/ 它有一个非常非常奇特且组合良好的 3d CAD Web 应用程序,似乎是使用 jQuery 编写的,而不是
我们正在寻找一种独立的(非 cms)日历解决方案来显示在网络上。它可以是开源的或付费服务。 我们主要是在寻找一种在 Web 上显示日历的方法,其中包含事件发生的时间和事件的名称。如果它可以按周、月、年
我想知道与软件相关的“质量保证”和“质量科学”之间的区别。 我在Google上进行了研究,但未找到有关“质量科学”的任何信息。 最佳答案 Based on the link you have prov
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我有一个由 2 个方程和 2 个未知数组成的系统,我想使用 MATLAB 求解,但不知道如何编程。我得到了一些有关 Gamma 分布的信息(平均值为 1.86,90% 的间隔介于 1.61 和 2.1
给定一个矩阵,其中 1 是当前子集 test = 0 0 0 0 0 0 0 0 0 0 0 0
我在组合 Matlab“数据”变量的重复元素时遇到问题。我可以使用 unique 和 sort 轻松组合这些值。 [sorted,idx] = sort(data); [~,ij] = unique(
我在做的问题中有这么一段代码,如下图。定义部分只是为了向您展示数组的大小。下面我粘贴了矢量化版本 - 它慢了 2 倍以上。为什么会这样?我知道如果矢量化需要大的临时变量,我就会发生,但(看起来)这里不
我有一个 3D 矩阵,我想将它的每个 2D 分量存储在另一个 2D 矩阵的行中,该 2D 矩阵有许多行作为 3D 矩阵的第 3 维。 我该怎么做? 最佳答案 与 permute & reshape -
如果计算机能够使用纯 JavaScript(Google V8)、C++(Windows、Mac OS 和 Linux)运行程序/软件而没有任何性能问题,是否有任何好的方法可以通过要求尽可能少尽可能从
我的团队的任务是将用于播放媒体文件的全屏、信息亭式应用程序从 Windows 迁移到嵌入式 ARM Linux(瘦客户端)。我们需要在 sd/1080p 中支持 mpeg-2 播放以及 HTML、SW
我们有数以千计的具有白色或黑色或渐变背景的产品图片。我们正在寻找可以去除图片背景的软件或服务。我们需要一款能够很好地完成这项工作的智能软件。 最佳答案 在 photoshop 中,您可以记录 Acti
我是一名优秀的程序员,十分优秀!