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

周末蜓氨,陪女朋友去電影院看了《復仇者聯(lián)盟4:終局之戰(zhàn)》,作為一個漫威粉三個小時看的是意猶未盡覆醇。出來之后谎懦,準備和女朋友聊一聊漫威這十年。









在《復仇者聯(lián)盟》電影中,滅霸畢生都有一個目標洛巢,那就是通過抹除一半的生命來維持宇宙的平衡。

并且城侧,滅霸還說,這個抹除過程是:隨機性的、不夾私情窥浪、絕對公平、無論貴賤倦踢。



那么,到底什么是隨機?他所謂的隨機真的如他所說是不夾私情、絕對公平以及無論貴賤的嗎同辣?

隨機性

隨機性這個詞是用來表達目的、動機颅眶、規(guī)則或一些非科學用法的可預測性的缺失燕刻。一個隨機的過程是一個不定因子不斷產生的重復過程。

提到隨機性扳躬,不得不提的就是隨機數,隨機數在計算機應用中使用的比較廣泛汁胆,最為熟知的便是在通信安全和現代密碼學等領域中的應用罪既。



隨機數分為真隨機數和偽隨機數铸题,我們程序中使用的基本都是偽隨機數。

  • 真隨機數琢感,通過物理實驗得出丢间,比如擲錢幣、骰子猩谊、轉輪千劈、使用電子元件的噪音、核裂變等牌捷。需要滿足隨機性墙牌、不可預測性、不可重現性暗甥。

  • 偽隨機數喜滨,通過一定算法和種子得出。軟件實現的是偽隨機數撤防。

只要這個隨機數是由確定算法生成的虽风,那就是偽隨機。只能通過不斷算法優(yōu)化寄月,使你的隨機數更接近隨機辜膝。

有限狀態(tài)機不能產生真正的隨機數的。所以漾肮,現代計算機中厂抖,無法通過一個純算法來生成真正的隨機數。無論是哪種語言克懊,單純的算法生成的數字都是偽隨機數忱辅,都是由可確定的函數通過一個種子七蜘,產生的偽隨機數。


為啥滅霸并不公平墙懂?

前面我們提到過橡卤,真隨機數要滿足隨機性、不可預測性损搬、不可重現性碧库。

我們按照這三個性質逐一分析下,看看滅霸到底是不是公平的场躯。

隨機性

隨機性谈为,指的是不存在統(tǒng)計學偏差,是完全雜亂的數列踢关。

復聯(lián)3中伞鲫,滅霸打了指響之后,復仇者聯(lián)盟中存活和死亡的名單其實并不是隨機的签舞。其中很多對CP都是殺1留1的秕脓。如鋼鐵俠——蜘蛛俠、美隊——冬兵儒搭、火箭浣熊——格魯特吠架、蟻人——黃蜂女等。



而且搂鲫,還有一點就是傍药,如果真的是隨機性的話,那么滅霸自己也是有一定的概率會被抹除的魂仍,但是拐辽,他早就知道自己不會被抹除,并且已經制定好了退休計劃擦酌。



并且俱诸,在復聯(lián)3中,奇異博士用時間寶石和滅霸換了鋼鐵俠的生命赊舶,說明滅霸其實是選擇性的進行抹除的睁搭。

可見,滅霸的指響抹除過程并不是隨機的笼平。

不可預測性

不可預測性园骆,指的是不能從過去的數列推測出下一個出現的數。

這一點了解電影的朋友應該都知道寓调,奇異博士曾經利用時間寶石穿越了時空遇伞,預測了未來,并看到了14000605種可能捶牢。



可見鸠珠,滅霸的指響抹除過程并不是不可預測的。

不可重現性

不可重現性秋麸,除非將數列本身保存下來渐排,否則不能重現相同的數列。

在復聯(lián)3中灸蟆,鋼鐵俠問奇異博士驯耻,14000605種可能中,勝利的有多少種炒考。奇異博士回答:1種可缚。



在復聯(lián)4中,最后奇異博士對鋼鐵俠比了下面這樣一個手勢斋枢。說明帘靡,他看到的那唯一一種勝利的可能要復現了。



可見瓤帚,滅霸的指響抹除過程并不是不可復現的描姚。

綜上,滅霸的指響抹除過程不符合隨機性戈次、不可預測性以及不可復現性轩勘。所以,滅霸的指響抹除過程并不是真正的隨機的怯邪。

通過現象來看绊寻,滅霸的抹除操作很可能只是通過簡單的分層抽樣實現的。簡單操作過程如下:

  1. 把需要特殊處理悬秉,不做抹除的人的DNA單獨從所有物種的DNA庫中識別出來澄步,并保存到緩存中。
  2. 根據不同的條件把DNA庫中的所有生命體劃分成若干區(qū)塊搂捧,如地球人驮俗、阿斯加德人等。把他們的DNA信息保存到不同的數據庫中允跑。在遍歷的過程中王凑,如果遇到緩存中已有的數據,則跳過聋丝。
  3. 再根據物種多樣性索烹,如性別、年齡段弱睦、職業(yè)等把同一個分庫中的數據分別劃分到不同的表中百姓,保證每一張分表中都包含了完整的物種多樣性。
  4. 遍歷所有數據庫况木,按順序的刪除每個數據庫中一半的分表垒拢。如地球人的數據庫中共有1024張表旬迹,只保留512張即可。
  5. 再把緩存中的數據同步到數據庫中求类。

這樣奔垦,在后面需要復活這些人的時候,只需要找到數據庫的Binlog尸疆,把數據重新寫入數據庫就行了椿猎。






真隨機數生成器

真正的隨機數是使用物理現象產生而不是計算機程序產生的。生成隨機數的設備我們稱之為真隨機數生成器寿弱。

這樣的設備通常是基于一些能生成低等級犯眠、統(tǒng)計學隨機的“噪聲”信號的微觀現象,如熱力學噪聲症革、光電效應和量子現象筐咧。

從某種程度上來說,基于經典熱噪聲的隨機數芯片讀取當前物理環(huán)境中的噪聲地沮,并據此獲得隨機數嗜浮。這類裝置相對于基于軟件算法的實現,由于環(huán)境中的變量更多摩疑,因此更難預測危融。

然而在牛頓力學的框架下,即使影響隨機數產生的變量非常多雷袋,但在每個變量的初始狀態(tài)確定后吉殃,整個系統(tǒng)的運行狀態(tài)及輸出在原理上是可以預測的,因此這一類裝置也是基于確定性的過程楷怒,只是某種更難預測的偽隨機數蛋勺。

但是,量子力學的發(fā)現從根本上改變了這一局面鸠删,因為其基本物理過程具有經典物理中所不具有的內稟隨機性抱完,從而可以制造出真正的隨機數產生器。

據美國國家標準與技術研究院(NIST)官網消息刃泡,該機構研究人員在2018年4月出版的《自然》雜志上撰文指出巧娱,他們開發(fā)出一種新方法,可生成由量子力學保證的隨機數字烘贴。新技術超越了此前獲得隨機數字的所有方法禁添,得到了“真正的隨機數字”,有助增強密碼系統(tǒng)的安全性桨踪。

NIST數學家彼特·比爾霍斯特進一步解釋說:“諸如翻轉硬幣之類的情況似乎是隨機的老翘,但如果能看到硬幣確切的下落路徑,最終結果也是可以預測的。因此铺峭,很難保證給定經典來源真正不可預測墓怀。量子力學在產生隨機性方面表現更好,量子隨機是真正的隨機逛薇,因為對處于‘疊加’狀態(tài)的量子粒子進行測量捺疼,得到的結果基本上是不可預測的∮婪#”

在復聯(lián)4中,也有很多和量子物理有關的知識卧秘,甚至最終可以扭轉乾坤也是依靠的量子領域呢袱。漫威電影的宗旨可以高度概括成以下四句話:遇事不決,量子力學翅敌。 解釋不通羞福,穿越時空。 篇幅不夠蚯涮,平行宇宙治专。 定律不足,高維人族遭顶。





Java中的隨機數生成器
Java中生成隨機數還是比較簡單的张峰,Java提供了很多種API可以供開發(fā)者使用。

通過時間獲取

在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提供的偽隨機數發(fā)生器有java.util.Random類和java.util.concurrent.ThreadLocalRandom類。

Random類采用AtomicLong實現朽合,保證多線程的線程安全性俱两,但正如該類注釋上說明的,多線程并發(fā)獲取隨機數時性能較差旁舰。

多線程環(huán)境中可以使用ThreadLocalRandom作為隨機數發(fā)生器锋华,ThreadLocalRandom采用了線程局部變量來改善性能,這樣就可以使用long而不是AtomicLong箭窜,此外毯焕,ThreadLocalRandom還進行了字節(jié)填充,以避免偽共享。

如使用Random獲取[0, 100)之間的int整數纳猫,方法如下:

Random random = new Random();
int i2 = random.nextInt(100);

強隨機數發(fā)生器
強隨機數發(fā)生器依賴于操作系統(tǒng)底層提供的隨機事件婆咸。強隨機數生成器的初始化速度和生成速度都較慢,而且由于需要一定的熵累積才能生成足夠強度的隨機數芜辕,所以可能會造成阻塞尚骄。熵累積通常來源于多個隨機事件源,如敲擊鍵盤的時間間隔侵续,移動鼠標的距離與間隔倔丈,特定中斷的時間間隔等。所以状蜗,只有在需要生成加密性強的隨機數據的時候才用它需五。

Java提供的強隨機數發(fā)生器是java.security.SecureRandom類,該類也是一個線程安全類轧坎,使用synchronize方法保證線程安全宏邮,但jdk并沒有做出承諾在將來改變SecureRandom的線程安全性。因此缸血,同Random一樣蜜氨,在高并發(fā)的多線程環(huán)境中可能會有性能問題。





這個鍋捎泻,研發(fā)人員不背l住!族扰!

根據我的猜想厌丑。對于無限手套這個產品,產品經理最初的需求可能只是滿足使用者的一個愿望而已渔呵,而幾顆寶石就像是七龍珠一樣怒竿,集齊之后打個指響就可以實現愿望。

開發(fā)者只是提供了一個可以滿足愿望的API接口扩氢,參數是一個Callback耕驰,具體做什么事情,完全是使用者傳進來的想法而已录豺。就像滅霸要抹除一半的生命朦肘、綠巨人想要把被抹掉的人救回來、而鋼鐵俠只是想把壞人抹掉而已双饥。

最后媒抠,Tony, Love You 3000 Times.

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咏花,隨后出現的幾起案子趴生,更是在濱河造成了極大的恐慌阀趴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苍匆,死亡現場離奇詭異刘急,居然都是意外死亡,警方通過查閱死者的電腦和手機浸踩,發(fā)現死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門叔汁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人检碗,你說我怎么就攤上這事据块。” “怎么了折剃?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵瑰钮,是天一觀的道長。 經常有香客問我微驶,道長,這世上最難降的妖魔是什么开睡? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任因苹,我火速辦了婚禮,結果婚禮上篇恒,老公的妹妹穿的比我還像新娘扶檐。我一直安慰自己,他們只是感情好胁艰,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布款筑。 她就那樣靜靜地躺著,像睡著了一般腾么。 火紅的嫁衣襯著肌膚如雪奈梳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天解虱,我揣著相機與錄音攘须,去河邊找鬼。 笑死殴泰,一個胖子當著我的面吹牛于宙,可吹牛的內容都是我干的。 我是一名探鬼主播悍汛,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捞魁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了离咐?” 一聲冷哼從身側響起谱俭,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旺上,有當地人在樹林里發(fā)現了一具尸體瓶蚂,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年宣吱,在試婚紗的時候發(fā)現自己被綠了窃这。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡征候,死狀恐怖杭攻,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情疤坝,我是刑警寧澤兆解,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站跑揉,受9級特大地震影響锅睛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜历谍,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一现拒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧望侈,春花似錦印蔬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捐韩,卻和暖如春退唠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奥帘。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工铜邮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寨蹋。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓松蒜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親已旧。 傳聞我的和親對象是個殘疾皇子秸苗,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

  • 隨機數 ???———— 不可預測的源泉 使用隨機數的密碼技術 ?隨機數的使用場景,比如: 生成密鑰?用于對稱密碼和...
    Invincibled閱讀 3,277評論 0 2
  • 方法1 (數據類型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math...
    GB_speak閱讀 40,997評論 2 6
  • 一运褪、隨機種子 參考隨機數與隨機種子[http://blog.csdn.net/hulifangjiayou/art...
    合肥黑閱讀 5,572評論 0 2
  • 皺紙技法惊楼,是我看完《水彩圣經》這本超級超級厚的書之后玖瘸,學到的最有用的一個技法。 對于院校專業(yè)大佬們來說檀咙,可能是個不...
    文樸閱讀 2,374評論 23 30