人类生成的数字和软件生成的数字哪个更随机?

2023-12-12

Does it 抛硬币获得随机位?
Or 掷骰子获得 1 到 6 之间的随机整数?
Or 从洗好的牌堆中取出一张牌获取 1 到 52 之间的数字?
.
.
.
或者它能像我们一样思考或拥有像我们一样的智慧吗?

显然,上面的例子不能成为生成随机数据的方法。

那么软件库是如何生成的random给定范围内的数字?哪个更随机:人类生成还是软件生成?


(注意:这通常是关于计算中的随机[和伪随机]数及其用途。)

你永远不可能通过确定性过程获得真正的随机数,这就是为什么计算机相当不适合生成它们(因为 CPU 只能以确定性方式翻转位)。大多数语言、框架和库都使用所谓的Pseudo- 随机数生成器(PRNG)。那些需要一个seed这是一种初始状态向量,可以是单个数字或数字数组,并从那里生成一系列看似随机的值。结果通常满足某些统计测量,但不是完全随机的,因为相同的种子将产生完全相同的序列。

最简单的 PRNG 之一是所谓的线性同余发生器(LCG)。它只有一个数字作为状态(最初是种子)。然后,对于每个连续的返回值,公式如下循环:

LCG formula: x_(n+1)=a⋅x_n+b (mod⁡c )

where a, b and c are constants for the generator. c is usually a power of two, such as 232 simply because it's easy to implement (done automatically) and fast. Finding good values for a and b is hard, however. As a most trivial example, when using a = 2 and b = 0, you can see that the resulting values can never be odd. This limits the range of values the generator can yield quite severely. Generally, LCGs are a very old concept and long supplanted by much better generators, so don't use them, except in extremely limited environments (although even embedded systems can handle better generators without problem, usually) – MT19937 or its generalization, the WELL generators are usually much better for people who simply don't want to worry about the properties of their pseudo-random numbers.

PRNG 的主要应用之一是模拟。由于 PRNG 可以给出统计特性的估计或保证and由于种子的性质,他们在这里做得很好,因此可以准确地重复实验。想象一下您正在发表一篇论文并希望其他人复制您的结果。使用硬件 RNG(见下文),除了包含您使用的每个随机数之外,您别无选择。对于可以轻松使用数十亿或更多数字的蒙特卡洛模拟来说,这是......不太可行。

然后还有用于加密应用的随机数生成器,例如用于保护您的 SSL 连接。这里的例子是Windows'CryptGen随机或 Unix 的/dev/urandom。那些往往是alsoPRNG,但是他们使用所谓的“熵池”进行播种,其中包含不可预测的值。这里的要点是生成不可预测的序列,即使相同的种子仍然会产生相同的序列。为了最大限度地减少攻击者猜测序列的影响,他们需要定期重新播种。熵池是从系统中的各个点收集的:事件,例如输入、网络活动等。有时,它也会使用整个系统中假定包含垃圾的内存位置进行初始化。然而,如果这样做了,必须注意确保熵池确实包含不可预测的东西。几年前 Debian 在 OpenSSL 中犯了一些错误。

您还可以直接使用熵池来获取随机数,(即 Linux/dev/random; FreeBSD 使用相同的算法/dev/random as for /dev/urandom),但你不会从中得到太多,一旦空了,就需要一段时间才能补充。这就是为什么上述算法通常用于将很小的熵扩展到更大的体积。

然后是基于硬件的随机数生成器,它使用不可预测的自然过程,例如电线中的放射性衰变或电噪声。这些适用于要求最严格的应用程序,需要许多“真正的”随机数,并且通常能够每秒生成几百 MiB 的随机性(好吧,该数据点已经有几年了,但我怀疑它能做多少现在更快了)。

您可以通过编写一个程序来模拟此类事情,该程序从带镜头盖的网络摄像头(然后仅保留噪音)获取图像,或者在不存在实际输入时从音频输入获取图像。这些对于一些黑客攻击来说很好,但通常不会生成good随机数,因为它们是有偏差的,即在比特流中,零和一不以相同的频率表示(或者更进一步,序列00, 01, 10 and 11不是以相同的频率生成的......您也可以对较大的序列执行此操作)。因此,实际硬件 RNG 的一部分是确保结果值满足某些统计分布属性。

有些人实际上扔骰子以获得随机骰子甚至超速行驶。而人类制造非常糟糕的随机数生成器.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人类生成的数字和软件生成的数字哪个更随机? 的相关文章

  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • 极小极大算法

    我有一个关于 Minimax 算法的简单问题 例如 对于 tic tac toe 游戏 如何确定每个玩家玩的效用函数 它不会自动执行此操作 是吗 我必须对游戏中的值进行硬编码 它无法自己学习它们 不是吗 不 MiniMax 不会学习 它是暴
  • rand() 的实现

    我正在用 C 编写一些嵌入式代码 需要使用 rand 函数 不幸的是 控制器的库不支持 rand 我需要一个快速的简单实现 但更重要的是空间开销很小 可以产生相对高质量的随机数 有谁知道使用哪种算法或示例代码 编辑 它用于图像处理 因此 相
  • 在 JavaScript 中生成 UUID 时发生冲突

    这涉及到这个问题 https stackoverflow com questions 105034 how to create a guid uuid in javascript 我正在使用下面的代码这个答案 https stackover
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • 是否有加权水库采样的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当数据流中的点具有相关权重时 是否有一种算法可以执行水库采样 Pavlos Efraimidis 和 Paul Spirakis 的算
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何延迟 onClick 操作

    我正在尝试在 java 应用程序 android 中做一些事情 并且我需要一些东西来延迟 等待循环的秒数 我怎样才能延迟android功能 我尝试过使用 Thread sleep TimeUnit sleep 但它只会执行几秒钟的不负责任的
  • 获取N个随机数,其总和为M

    我想得到N个随机数 其总和是一个值 例如 假设我想要 5 个总和为 1 的随机数 那么 一个有效的可能性是 0 2 0 2 0 2 0 2 0 2 另一种可能性是 0 8 0 1 0 03 0 03 0 04 等等 我需要这个来创建模糊 C
  • 从排列生成器中随机选择?

    如何随机挑选所有结果 一一 不重复 itertools permutations k 或者这个 如何构建随机排列生成器 就像是shuffle permutations k 我正在使用Python 2 6 Yeah shuffle r 可以使
  • 领域驱动设计与模型驱动架构

    我很好奇 领域驱动设计和模型驱动架构有什么区别 我的印象是他们有某些相似之处 你能启发我吗 Thanks 不要不同意上面的大部分内容 尽管它可能值得稍微扩展一下 DDD 中最重要的一个概念是关注问题域 将对技术的痴迷放在一边 主要集中于对您
  • 文件头或一般注释

    有人对文件有结构良好的起始评论吗 我正在寻找看起来不错的东西 要么很花哨 要么很专业 我所说的一般注释是指文件顶部的注释 显示您的名称和文件的用途 像这个 hello program to print out Hello World Aut
  • 用于将分层平面数据(带 ParentID)转换为带缩进级别的排序平面列表的算法

    我有以下结构 MyClass guid ID guid ParentID string Name 我想创建一个数组 其中包含按层次结构中应显示的顺序排列的元素 例如 根据它们的 左 值 以及将 guid 映射到缩进级别的散列 例如 ID N
  • 什么是日历队列?

    我正在致力于构建一个离散事件模拟器 维基百科提到有几种通用优先级队列非常适合在 DES 中使用 具体来说 它提到日历队列是一个很好的结构 我找到了一份 pdf 1988 年的 其中提到了日历队列 但在大多数情况下我找不到关于它们的任何其他内
  • 将全名解析为其组成部分

    我们需要开发一个后端应用程序 可以将全名解析为 Prefix Dr Mr Ms etc First Name Last Name Middle Name etc 这里的挑战是它必须支持多个国家和语言的名称 我们的一个假设是 我们总是会得到一
  • 您编写 DSL 是为了解决什么样的问题?

    我只是对特定领域语言感到好奇 我在文章中多次看到它们 似乎它们可以用于外部保证或银行数据定义问题 所以我来SO 寻求一些具体的意见 您使用过 DSL 吗 写一个 如果是 那是什么感觉 您认为您的项目之一使用 DSL 后是否会变得更好 更高效
  • OOP:什么时候它是一个对象?

    我正在尝试理解面向对象 我当然明白一点 但有时我并不是百分百清楚 你如何决定什么应该变成一个对象 另一个大的整个对象的小对象部分 或者什么不值得成为一个对象 或者也许它应该只是那个大的整个对象的属性 对于一扇门来说 我猜门把手应该是一个独立
  • 如何从 R 中的二元已知 PDF 生成随机变量?

    我在 DX x DY 矩形区域中有这个双变量概率密度函数 链接到我的 pdf https i stack imgur com jrMAs jpg 我正在使用 R 如何在遵循此 pdf 分布的矩形内生成随机 x y 点 我读过很多关于 逆变换

随机推荐

  • 如何在 Jupyter 笔记本中以编程方式生成 Markdown 输出?

    我想在 Jupyter 笔记本中写一份课程报告 我想计算一些东西 生成一些结果并将它们包含在降价中 我可以将单元格的输出设置为降价吗 我想要这样的命令 print phi 生成 phi 符号 就像在 Markdown 中一样 换句话说 我想
  • 关闭 Visual Studio 中的漂亮列表

    我有一个宏 插件 我需要在其中禁用 Vb Net漂亮的清单暂时的 尝试录制宏 但它只显示我打开了选项对话框 也尝试过 Dim props As EnvDTE Properties DTE Properties TextEditor Basi
  • GitLab CI 的 Docker 构建作业参数无效

    所以我正在尝试设置我的 Gitlab CI 来触发一个作业git push构建和部署我的 Docker 这是 gitlab ci yml我正在使用的文件基于 Gitlab 文档 Elixir yml 中的示例 stages build bu
  • 获取有关 WCF 中需要很长时间的方法的进度信息的有效模式?

    我想要获取有关 WCF 上调用的方法的进度更新 例如 我运行 1000 个查询并想知道当前状态 如果双工合约在您的环境中不可行 您将不得不诉诸轮询 您的初始方法可以返回一个标识符 可能是 GUID 然后您可以对另一个方法进行后续调用以检查进
  • 如何在Mac上运行shell命令?

    如何使用 Excel VBA 代码运行 shell 命令 我想跑chmod x Users asdasd Music playlistLoad sh穿过外壳 我使用 Python 实现了这一点os system Command here 在
  • 如何在 C# 中进行参数化 SELECT 查询?

    我正在尝试使用 DataGridView 以及 C 和 SQL Server 中的参数化查询来显示数据库中表中的数据 到目前为止 我已经尝试过这段代码 private void button1 Click object sender Eve
  • 复杂对象图的快速哈希码

    我有一个漂亮的复杂的物体我需要得到独特性这些物体 一种解决方案可以通过重写来完成GetHashCode 我已经实现了如下代码 public override int GetHashCode return this complexObject
  • 使用 System.IO.Compression.FileSystem 将完整目录添加到现有 zip 文件

    以下示例可在互联网和本网站上追溯 作为使用 NET Framework 4 5 压缩文件的解决方案 它可以工作 但是当存档已经存在时 它会给出错误 因为它似乎只能压缩文件夹并创建新的 zip 文件 Reflection Assembly L
  • Apache Commons Validator 帮助下的 NoClassDefFoundError 问题

    如果使用 Apache Commons Validator 会出现错误 java lang NoClassDefFoundError org apache oro text perl Perl5Util 即使 Apache Commons
  • 如何在 RestAssured 中设置 OAuth 领域

    我正在使用 RestAssured 库来自动化 NetSuite Restlet 此 Restlet 使用 OAuth 1 0 进行身份验证 除了消费者密钥 消费者秘密 访问令牌和令牌秘密之外 我还需要设置 REALM 等高级字段 但我找不
  • 构造一个没有默认构造函数的空对象

    假设我有一个类型F 我知道F是空的 但是F没有默认构造函数 所以我不能使用F 来构建它 有没有办法获得类型的有效对象F反正 我似乎记得有人提到过有一种神秘的联合用法 理想情况下 它会是constexpr友好的 这可能很有用 因为无捕获 la
  • Android - listView 中的单选按钮?

    我有一个场景 我们应该在列表视图中有一个单选模式单选按钮 当我单击单选按钮时 它应该进入启用状态 当我单击整个项目时 它应该重定向到新活动 我参考了下面的链接 link1 link2 我可以找到多项选择模式的方法 但不适用于单选模式 对此有
  • nVIDIA 驱动程序如何将设备索引分配给 GPU?

    假设在单个节点上 有多个具有不同计算能力的设备 nvidia如何对它们进行排名 我的排名是指cudaSetDevice分配的数字 有关于此的一般准则吗 谢谢 我相信对应的设备顺序cuda获取设备 and cudaSetDevice 即 CU
  • 在 QML TableView 中单击时编辑数据(如 Excel)

    我有一些代码 import QtQuick 2 2 import QtQuick Window 2 1 import QtQuick Controls 1 2 Window visible true width 538 height 360
  • 无法在 AppService 中使用 Active Directory 集成身份验证连接到 Azure SQL Server

    我们在 Azure 应用服务上部署了 Web 应用程序 我们的数据库也在 Azure 上 配置为使用 AAD 身份验证 我们已分配 AAD 管理员 我们在 Web 应用程序中使用下面的连接字符串来使用下面的连接字符串连接到该服务器和数据库
  • 在 Spring Boot 中将 Angular 环境变量传递给已编译的静态 Angular 文件

    我现在使用 Angular 和 Spring Boot 来构建网站项目 当我们部署时 我们将ng build output path spring boot project src main resources static Angular
  • 如何通过 sudo 运行命令并通过 ssh 输入密码 C#

    我想在具有 Linux 操作系统的远程计算机上运行命令并获取结果 我正在使用 ssh net 库通过 C 代码进行连接 我可以连接并运行一些不需要使用的命令 sudo 前 但我不知道如何运行需要 sudo 运行的命令 因为运行后 例如 su
  • 同时运行不同的表单

    我试图同时显示 2 个不同的表单 我尝试了以下代码 但它不起作用 Form1 t1 new Form1 Form2 t2 new Form2 t2 Show t1 Show Application Run 我还尝试从program cs运行
  • 如何验证文本字段,使其只能包含四位数

    我已经设法验证我的字段 因此它始终是四位数字 但我需要验证它始终是一个数字 我尝试添加这段代码 但它无法正常工作 if document ExamEntry cand value match numbers msg Only use num
  • 人类生成的数字和软件生成的数字哪个更随机?

    Does it 抛硬币获得随机位 Or 掷骰子获得 1 到 6 之间的随机整数 Or 从洗好的牌堆中取出一张牌获取 1 到 52 之间的数字 或者它能像我们一样思考或拥有像我们一样的智慧吗 显然 上面的例子不能成为生成随机数据的方法 那么软