漫话:如何给女友解释灭霸的指响并非真随机"消灭"半数宇宙人口的?

周末,陪女友去电影院看了《复仇者联盟4:终局之战》,做为一个漫威粉三个小时看的是意犹未尽。出来以后,准备和女友聊一聊漫威这十年。html

在《复仇者联盟》电影中,灭霸毕生都有一个目标,那就是经过抹除一半的生命来维持宇宙的平衡。java

而且,灭霸还说,这个抹除过程是:随机性的、不夹私情、绝对公平、不管贵贱。算法

那么,到底什么是随机?他所谓的随机真的如他所说是不夹私情、绝对公平以及不管贵贱的吗?数据库

随机性缓存

随机性这个词是用来表达目的、动机、规则或一些非科学用法的可预测性的缺失。一个随机的过程是一个不定因子不断产生的重复过程。安全

提到随机性,不得不提的就是随机数,随机数在计算机应用中使用的比较普遍,最为熟知的即是在通讯安全和现代密码学等领域中的应用。多线程

随机数分为真随机数和伪随机数,咱们程序中使用的基本都是伪随机数。并发

  • 真随机数,经过物理实验得出,好比掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等。须要知足随机性、不可预测性、不可重现性。框架

  • 伪随机数,经过必定算法和种子得出。软件实现的是伪随机数。dom

只要这个随机数是由肯定算法生成的,那就是伪随机。只能经过不断算法优化,使你的随机数更接近随机。

有限状态机不能产生真正的随机数的。因此,现代计算机中,没法经过一个纯算法来生成真正的随机数。不管是哪一种语言,单纯的算法生成的数字都是伪随机数,都是由可肯定的函数经过一个种子,产生的伪随机数。

为啥灭霸并不公平?

前面咱们提到过,真随机数要知足随机性、不可预测性、不可重现性。

咱们按照这三个性质逐一分析下,看看灭霸究竟是不是公平的。

随机性

随机性,指的是不存在统计学误差,是彻底杂乱的数列。

复联3中,灭霸打了指响以后,复仇者联盟中存活和死亡的名单其实并非随机的。其中不少对CP都是杀1留1的。如钢铁侠——蜘蛛侠、美队——冬兵、火箭浣熊——格鲁特、蚁人——黄蜂女等。

并且,还有一点就是,若是真的是随机性的话,那么灭霸本身也是有必定的几率会被抹除的,可是,他早就知道本身不会被抹除,而且已经制定好了退休计划。

而且,在复联3中,奇异博士用时间宝石和灭霸换了钢铁侠的生命,说明灭霸实际上是选择性的进行抹除的。

可见,灭霸的指响抹除过程并非随机的。

不可预测性

不可预测性,指的是不能从过去的数列推测出下一个出现的数。

这一点了解电影的朋友应该都知道,奇异博士曾经利用时间宝石穿越了时空,预测了将来,并看到了14000605种可能。

可见,灭霸的指响抹除过程并非不可预测的。

不可重现性

不可重现性,除非将数列自己保存下来,不然不能重现相同的数列。

在复联3中,钢铁侠问奇异博士,14000605种可能中,胜利的有多少种。奇异博士回答:1种。

在复联4中,最后奇异博士对钢铁侠比了下面这样一个手势。说明,他看到的那惟一一种胜利的可能要复现了。

可见,灭霸的指响抹除过程并非不可复现的。

综上,灭霸的指响抹除过程不符合随机性、不可预测性以及不可复现性。因此,灭霸的指响抹除过程并非真正的随机的。

经过现象来看,灭霸的抹除操做极可能只是经过简单的分层抽样实现的。简单操做过程以下:

  • 一、把须要特殊处理,不作抹除的人的DNA单独从全部物种的DNA库中识别出来,并保存到缓存中。

  • 二、根据不一样的条件把DNA库中的全部生命体划分红若干区块,如地球人、阿斯加德人等。把他们的DNA信息保存到不一样的数据库中。在遍历的过程当中,若是遇到缓存中已有的数据,则跳过。

  • 三、再根据物种多样性,如性别、年龄段、职业等把同一个分库中的数据分别划分到不一样的表中,保证每一张分表中都包含了完整的物种多样性。

  • 四、遍历全部数据库,按顺序的删除每一个数据库中一半的分表。如地球人的数据库中共有1024张表,只保留512张便可。

  • 五、再把缓存中的数据同步到数据库中。

这样,在后面须要复活这些人的时候,只须要找到数据库的Binlog,把数据从新写入数据库就好了。

真随机数生成器

真正的随机数是使用物理现象产生而不是计算机程序产生的。生成随机数的设备咱们称之为真随机数生成器。

这样的设备一般是基于一些能生成低等级、统计学随机的“噪声”信号的微观现象,如热力学噪声、光电效应和量子现象。

从某种程度上来讲,基于经典热噪声的随机数芯片读取当前物理环境中的噪声,并据此得到随机数。这类装置相对于基于软件算法的实现,因为环境中的变量更多,所以更难预测。

然而在牛顿力学的框架下,即便影响随机数产生的变量很是多,但在每一个变量的初始状态肯定后,整个系统的运行状态及输出在原理上是能够预测的,所以这一类装置也是基于肯定性的过程,只是某种更难预测的伪随机数。

可是,量子力学的发现从根本上改变了这一局面,由于其基本物理过程具备经典物理中所不具备的内禀随机性,从而能够制造出真正的随机数产生器。

据美国国家标准与技术研究院(NIST)官网消息,该机构研究人员在2018年4月出版的《天然》杂志上撰文指出,他们开发出一种新方法,可生成由量子力学保证的随机数字。新技术超越了此前得到随机数字的全部方法,获得了“真正的随机数字”,有助加强密码系统的安全性。(原文地址:https://www.nature.com/articles/s41586-018-0019-0.epdf )

NIST数学家彼特·比尔霍斯特进一步解释说:“诸如翻转硬币之类的状况彷佛是随机的,但若是能看到硬币确切的下落路径,最终结果也是能够预测的。所以,很难保证给定经典来源真正不可预测。量子力学在产生随机性方面表现更好,量子随机是真正的随机,由于对处于‘叠加’状态的量子粒子进行测量,获得的结果基本上是不可预测的。”

在复联4中,也有不少和量子物理有关的知识,甚至最终能够扭转乾坤也是依靠的量子领域。漫威电影的宗旨能够高度归纳成如下四句话:遇事不决,量子力学。 解释不通,穿越时空。 篇幅不够,平行宇宙。 定律不足,高维人族。

Java中的随机数生成器

Java中生成随机数仍是比较简单的,Java提供了不少种API能够供开发者使用。

经过时间获取

在Java中,能够经过System.currentTimeMillis()来获取当前时间毫秒数:

final long l = System.currentTimeMillis();
复制代码

若要获取指定范围的数字,只须要对数字进行取模就好了,以下方法能够得到0-99的随机数:

final long l = System.currentTimeMillis();
final int i = (int)( l % 100 );
复制代码

Math.random()

经过Math.random()能够返回0(包含)到1(不包含)之间的double值。使用方法以下:

final double d = Math.random();
复制代码

若要获取int类型的整数,只须要将上面的结果转行成int类型便可。好比,获取[0, 100)之间的int整数。方法以下:

final double d = Math.random();
final int i = (int)(d*100);
复制代码

Random类

Java提供的伪随机数发生器有java.util.Random类和java.util.concurrent.ThreadLocalRandom类。

Random类采用AtomicLong实现,保证多线程的线程安全性,但正如该类注释上说明的,多线程并发获取随机数时性能较差。

多线程环境中可使用ThreadLocalRandom做为随机数发生器,ThreadLocalRandom采用了线程局部变量来改善性能,这样就可使用long而不是AtomicLong,此外,ThreadLocalRandom还进行了字节填充,以免伪共享。

如使用Random获取[0, 100)之间的int整数,方法以下:

Random random = new Random();
int i2 = random.nextInt(100);
复制代码

强随机数发生器

强随机数发生器依赖于操做系统底层提供的随机事件。强随机数生成器的初始化速度和生成速度都较慢,并且因为须要必定的熵累积才能生成足够强度的随机数,因此可能会形成阻塞。熵累积一般来源于多个随机事件源,如敲击键盘的时间间隔,移动鼠标的距离与间隔,特定中断的时间间隔等。因此,只有在须要生成加密性强的随机数据的时候才用它。

Java提供的强随机数发生器是java.security.SecureRandom类,该类也是一个线程安全类,使用synchronize方法保证线程安全,但jdk并无作出承诺在未来改变SecureRandom的线程安全性。所以,同Random同样,在高并发的多线程环境中可能会有性能问题。

这个锅,研发人员不背!!!

根据个人猜测。对于无限手套这个产品,产品经理最初的需求可能只是知足使用者的一个愿望而已,而几颗宝石就像是七龙珠同样,集齐以后打个指响就能够实现愿望。

开发者只是提供了一个能够知足愿望的API接口,参数是一个Callback,具体作什么事情,彻底是使用者传进来的想法而已。就像灭霸要抹除一半的生命、绿巨人想要把被抹掉的人救回来、而钢铁侠只是想把坏人抹掉而已。

最后,Tony, Love You 3000 Times.

 

参考资料:

https://www.cnblogs.com/skywang12345/p/3341423.html

https://www.zhihu.com/question/277121161 http://www.nsfc.gov.cn/csc/20340/20343/30636/index.html

http://sh.people.com.cn/n2/2018/0413/c134768-31460133.html

相关文章
相关标签/搜索