【漫畫解析】程序員冒死給女朋友解釋滅霸其實并不"公平"

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

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

并且仇奶,滅霸還說貌嫡,這個抹除過程是:隨機性的、不夾私情、絕對公平衅枫、無論貴賤嫁艇。

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

隨機性

隨機性這個詞是用來表達目的益楼、動機猾漫、規(guī)則或一些非科學用法的可預(yù)測性的缺失。一個隨機的過程是一個不定因子不斷產(chǎn)生的重復過程感凤。

提到隨機性悯周,不得不提的就是隨機數(shù),隨機數(shù)在計算機應(yīng)用中使用的比較廣泛陪竿,最為熟知的便是在通信安全和現(xiàn)代密碼學等領(lǐng)域中的應(yīng)用禽翼。

隨機數(shù)分為真隨機數(shù)和偽隨機數(shù),我們程序中使用的基本都是偽隨機數(shù)族跛。

? ? ·? 真隨機數(shù)闰挡,通過物理實驗得出,比如擲錢幣礁哄、骰子长酗、轉(zhuǎn)輪、使用電子元件的噪音桐绒、核裂變等夺脾。需要滿足隨機性、不可預(yù)測性茉继、不可重現(xiàn)性咧叭。

? ? ·? 偽隨機數(shù),通過一定算法和種子得出烁竭。軟件實現(xiàn)的是偽隨機數(shù)佳簸。

只要這個隨機數(shù)是由確定算法生成的,那就是偽隨機颖变。只能通過不斷算法優(yōu)化,使你的隨機數(shù)更接近隨機听想。

有限狀態(tài)機不能產(chǎn)生真正的隨機數(shù)的腥刹。所以,現(xiàn)代計算機中汉买,無法通過一個純算法來生成真正的隨機數(shù)衔峰。無論是哪種語言,單純的算法生成的數(shù)字都是偽隨機數(shù),都是由可確定的函數(shù)通過一個種子垫卤,產(chǎn)生的偽隨機數(shù)威彰。

為啥滅霸并不公平?

前面我們提到過穴肘,真隨機數(shù)要滿足隨機性歇盼、不可預(yù)測性、不可重現(xiàn)性评抚。

我們按照這三個性質(zhì)逐一分析下豹缀,看看滅霸到底是不是公平的。

隨機性

隨機性慨代,指的是不存在統(tǒng)計學偏差邢笙,是完全雜亂的數(shù)列。

復聯(lián)3中侍匙,滅霸打了指響之后氮惯,復仇者聯(lián)盟中存活和死亡的名單其實并不是隨機的。其中很多對CP都是殺1留1的想暗。如鋼鐵俠——蜘蛛俠妇汗、美隊——冬兵、火箭浣熊——格魯特江滨、蟻人——黃蜂女等铛纬。

而且,還有一點就是唬滑,如果真的是隨機性的話告唆,那么滅霸自己也是有一定的概率會被抹除的,但是晶密,他早就知道自己不會被抹除擒悬,并且已經(jīng)制定好了退休計劃。

并且稻艰,在復聯(lián)3中懂牧,奇異博士用時間寶石和滅霸換了鋼鐵俠的生命,說明滅霸其實是選擇性的進行抹除的尊勿。

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

不可預(yù)測性

不可預(yù)測性元扔,指的是不能從過去的數(shù)列推測出下一個出現(xiàn)的數(shù)躯保。

這一點了解電影的朋友應(yīng)該都知道,奇異博士曾經(jīng)利用時間寶石穿越了時空澎语,預(yù)測了未來途事,并看到了14000605種可能验懊。

可見,滅霸的指響抹除過程并不是不可預(yù)測的尸变。

不可重現(xiàn)性

不可重現(xiàn)性义图,除非將數(shù)列本身保存下來,否則不能重現(xiàn)相同的數(shù)列召烂。

在復聯(lián)3中碱工,鋼鐵俠問奇異博士,14000605種可能中骑晶,勝利的有多少種痛垛。奇異博士回答:1種⊥盎祝可見匙头,滅霸的指響抹除過程并不是不可預(yù)測的。

在復聯(lián)4中仔雷,最后奇異博士對鋼鐵俠比了下面這樣一個手勢蹂析。說明,他看到的那唯一一種勝利的可能要復現(xiàn)了碟婆。

可見电抚,滅霸的指響抹除過程并不是不可復現(xiàn)的。

綜上竖共,滅霸的指響抹除過程不符合隨機性蝙叛、不可預(yù)測性以及不可復現(xiàn)性。所以公给,滅霸的指響抹除過程并不是真正的隨機的借帘。

通過現(xiàn)象來看,滅霸的抹除操作很可能只是通過簡單的分層抽樣實現(xiàn)的淌铐。簡單操作過程如下:

· 1肺然、把需要特殊處理,不做抹除的人的DNA單獨從所有物種的DNA庫中識別出來腿准,并保存到緩存中际起。

? ? ·? 2、根據(jù)不同的條件把DNA庫中的所有生命體劃分成若干區(qū)塊吐葱,如地球人街望、阿斯加德人等。把他們的DNA信息保存到不同的數(shù)據(jù)庫中弟跑。在遍歷的過程中它匕,如果遇到緩存中已有的數(shù)據(jù),則跳過窖认。

· 3豫柬、再根據(jù)物種多樣性,如性別扑浸、年齡段烧给、職業(yè)等把同一個分庫中的數(shù)據(jù)分別劃分到不同的表中,保證每一張分表中都包含了完整的物種多樣性喝噪。

? ? ·? 4础嫡、遍歷所有數(shù)據(jù)庫,按順序的刪除每個數(shù)據(jù)庫中一半的分表酝惧。如地球人的數(shù)據(jù)庫中共有1024張表榴鼎,只保留512張即可。

? ? ·? 5晚唇、再把緩存中的數(shù)據(jù)同步到數(shù)據(jù)庫中巫财。

這樣,在后面需要復活這些人的時候哩陕,只需要找到數(shù)據(jù)庫的Binlog平项,把數(shù)據(jù)重新寫入數(shù)據(jù)庫就行了。

真隨機數(shù)生成器

真正的隨機數(shù)是使用物理現(xiàn)象產(chǎn)生而不是計算機程序產(chǎn)生的悍及。生成隨機數(shù)的設(shè)備我們稱之為真隨機數(shù)生成器闽瓢。

這樣的設(shè)備通常是基于一些能生成低等級、統(tǒng)計學隨機的“噪聲”信號的微觀現(xiàn)象心赶,如熱力學噪聲扣讼、光電效應(yīng)和量子現(xiàn)象。

從某種程度上來說缨叫,基于經(jīng)典熱噪聲的隨機數(shù)芯片讀取當前物理環(huán)境中的噪聲椭符,并據(jù)此獲得隨機數(shù)。這類裝置相對于基于軟件算法的實現(xiàn)弯汰,由于環(huán)境中的變量更多艰山,因此更難預(yù)測。

然而在牛頓力學的框架下咏闪,即使影響隨機數(shù)產(chǎn)生的變量非常多曙搬,但在每個變量的初始狀態(tài)確定后,整個系統(tǒng)的運行狀態(tài)及輸出在原理上是可以預(yù)測的鸽嫂,因此這一類裝置也是基于確定性的過程纵装,只是某種更難預(yù)測的偽隨機數(shù)。

但是据某,量子力學的發(fā)現(xiàn)從根本上改變了這一局面橡娄,因為其基本物理過程具有經(jīng)典物理中所不具有的內(nèi)稟隨機性,從而可以制造出真正的隨機數(shù)產(chǎn)生器癣籽。

據(jù)美國國家標準與技術(shù)研究院(NIST)官網(wǎng)消息挽唉,該機構(gòu)研究人員在2018年4月出版的《自然》雜志上撰文指出滤祖,他們開發(fā)出一種新方法,可生成由量子力學保證的隨機數(shù)字瓶籽。新技術(shù)超越了此前獲得隨機數(shù)字的所有方法匠童,得到了“真正的隨機數(shù)字”,有助增強密碼系統(tǒng)的安全性塑顺。

NIST數(shù)學家彼特·比爾霍斯特進一步解釋說:“諸如翻轉(zhuǎn)硬幣之類的情況似乎是隨機的汤求,但如果能看到硬幣確切的下落路徑,最終結(jié)果也是可以預(yù)測的严拒。因此扬绪,很難保證給定經(jīng)典來源真正不可預(yù)測。量子力學在產(chǎn)生隨機性方面表現(xiàn)更好裤唠,量子隨機是真正的隨機挤牛,因為對處于‘疊加’狀態(tài)的量子粒子進行測量,得到的結(jié)果基本上是不可預(yù)測的巧骚∩薜撸”

在復聯(lián)4中,也有很多和量子物理有關(guān)的知識劈彪,甚至最終可以扭轉(zhuǎn)乾坤也是依靠的量子領(lǐng)域竣蹦。漫威電影的宗旨可以高度概括成以下四句話:遇事不決,量子力學沧奴。 解釋不通痘括,穿越時空。 篇幅不夠滔吠,平行宇宙纲菌。 定律不足,高維人族疮绷。

Java中的隨機數(shù)生成器

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

通過時間獲取

在Java中冬骚,可以通過System.currentTimeMillis()來獲取當前時間毫秒數(shù):

若要獲取指定范圍的數(shù)字椅贱,只需要對數(shù)字進行取模就行了,如下方法可以獲得0-99的隨機數(shù):

Math.random()

通過Math.random()可以返回0(包含)到1(不包含)之間的double值只冻。使用方法如下:

若要獲取int類型的整數(shù)庇麦,只需要將上面的結(jié)果轉(zhuǎn)行成int類型即可。比如喜德,獲取[0, 100)之間的int整數(shù)山橄。方法如下:

Random類

Java提供的偽隨機數(shù)發(fā)生器有java.util.Random類和java.util.concurrent.ThreadLocalRandom類。

Random類采用AtomicLong實現(xiàn)舍悯,保證多線程的線程安全性航棱,但正如該類注釋上說明的睡雇,多線程并發(fā)獲取隨機數(shù)時性能較差。

多線程環(huán)境中可以使用ThreadLocalRandom作為隨機數(shù)發(fā)生器饮醇,ThreadLocalRandom采用了線程局部變量來改善性能入桂,這樣就可以使用long而不是AtomicLong,此外驳阎,ThreadLocalRandom還進行了字節(jié)填充,以避免偽共享馁蒂。

如使用Random獲取[0, 100)之間的int整數(shù)呵晚,方法如下:

強隨機數(shù)發(fā)生器

強隨機數(shù)發(fā)生器依賴于操作系統(tǒng)底層提供的隨機事件。強隨機數(shù)生成器的初始化速度和生成速度都較慢沫屡,而且由于需要一定的熵累積才能生成足夠強度的隨機數(shù)饵隙,所以可能會造成阻塞。熵累積通常來源于多個隨機事件源沮脖,如敲擊鍵盤的時間間隔金矛,移動鼠標的距離與間隔,特定中斷的時間間隔等勺届。所以驶俊,只有在需要生成加密性強的隨機數(shù)據(jù)的時候才用它。

Java提供的強隨機數(shù)發(fā)生器是java.security.SecureRandom類免姿,該類也是一個線程安全類饼酿,使用synchronize方法保證線程安全,但jdk并沒有做出承諾在將來改變SecureRandom的線程安全性胚膊。因此故俐,同Random一樣,在高并發(fā)的多線程環(huán)境中可能會有性能問題紊婉。

這個鍋药版,研發(fā)人員不背!S骼纭槽片!

根據(jù)我的猜想。對于無限手套這個產(chǎn)品株汉,產(chǎn)品經(jīng)理最初的需求可能只是滿足使用者的一個愿望而已筐乳,而幾顆寶石就像是七龍珠一樣,集齊之后打個指響就可以實現(xiàn)愿望乔妈。

開發(fā)者只是提供了一個可以滿足愿望的API接口蝙云,參數(shù)是一個Callback,具體做什么事情路召,完全是使用者傳進來的想法而已勃刨。就像滅霸要抹除一半的生命波材、綠巨人想要把被抹掉的人救回來、而鋼鐵俠只是想把壞人抹掉而已身隐。

最后廷区,Tony, Love You 3000 Times.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贾铝,隨后出現(xiàn)的幾起案子隙轻,更是在濱河造成了極大的恐慌,老刑警劉巖垢揩,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玖绿,死亡現(xiàn)場離奇詭異,居然都是意外死亡叁巨,警方通過查閱死者的電腦和手機斑匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锋勺,“玉大人蚀瘸,你說我怎么就攤上這事∈鳎” “怎么了贮勃?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悬包。 經(jīng)常有香客問我衙猪,道長,這世上最難降的妖魔是什么布近? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任垫释,我火速辦了婚禮,結(jié)果婚禮上撑瞧,老公的妹妹穿的比我還像新娘棵譬。我一直安慰自己,他們只是感情好预伺,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布订咸。 她就那樣靜靜地躺著,像睡著了一般酬诀。 火紅的嫁衣襯著肌膚如雪脏嚷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天瞒御,我揣著相機與錄音父叙,去河邊找鬼。 笑死,一個胖子當著我的面吹牛趾唱,可吹牛的內(nèi)容都是我干的涌乳。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼甜癞,長吁一口氣:“原來是場噩夢啊……” “哼夕晓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悠咱,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蒸辆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后析既,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吁朦,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年渡贾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雄右。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡空骚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擂仍,到底是詐尸還是另有隱情囤屹,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響越平,放射性物質(zhì)發(fā)生泄漏野建。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一纪铺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦铣鹏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绘迁,卻和暖如春合溺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缀台。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工棠赛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓恭朗,卻偏偏與公主長得像屏镊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痰腮,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容