漫話:如何給女友解釋滅霸的指響並非真隨機"消滅"半數宇宙人口的?


週末,陪女友去電影院看了《復仇者聯盟4:終局之戰》,做爲一個漫威粉三個小時看的是意猶未盡。出來以後,準備和女友聊一聊漫威這十年。html

在《復仇者聯盟》電影中,滅霸畢生都有一個目標,那就是經過抹除一半的生命來維持宇宙的平衡。java

而且,滅霸還說,這個抹除過程是:隨機性的、不夾私情、絕對公平、不管貴賤。算法

那麼,到底什麼是隨機?他所謂的隨機真的如他所說是不夾私情、絕對公平以及不管貴賤的嗎?數據庫

隨機性

隨機性這個詞是用來表達目的、動機、規則或一些非科學用法的可預測性的缺失。一個隨機的過程是一個不定因子不斷產生的重複過程。
緩存

提到隨機性,不得不提的就是隨機數,隨機數在計算機應用中使用的比較普遍,最爲熟知的即是在通訊安全和現代密碼學等領域中的應用。安全

隨機數分爲真隨機數和僞隨機數,咱們程序中使用的基本都是僞隨機數。bash

  • 真隨機數,經過物理實驗得出,好比擲錢幣、骰子、轉輪、使用電子元件的噪音、核裂變等。須要知足隨機性、不可預測性、不可重現性。多線程

  • 僞隨機數,經過必定算法和種子得出。軟件實現的是僞隨機數。併發

只要這個隨機數是由肯定算法生成的,那就是僞隨機。只能經過不斷算法優化,使你的隨機數更接近隨機。框架

有限狀態機不能產生真正的隨機數的。因此,現代計算機中,沒法經過一個純算法來生成真正的隨機數。不管是哪一種語言,單純的算法生成的數字都是僞隨機數,都是由可肯定的函數經過一個種子,產生的僞隨機數。

爲啥滅霸並不公平?

前面咱們提到過,真隨機數要知足隨機性、不可預測性、不可重現性。

咱們按照這三個性質逐一分析下,看看滅霸究竟是不是公平的。

隨機性

隨機性,指的是不存在統計學誤差,是徹底雜亂的數列。

復聯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

相關文章
相關標籤/搜索