漫話:如何給女朋友解釋滅霸的指響並不是真隨機"消滅"半數宇宙人口的?
週末,陪女朋友去電影院看了《復仇者聯盟4:終局之戰》,作為一個漫威粉三個小時看的是意猶未盡。出來之後,準備和女朋友聊一聊漫威這十年。
在《復仇者聯盟》電影中,滅霸畢生都有一個目標,那就是通過抹除一半的生命來維持宇宙的平衡。
並且,滅霸還說,這個抹除過程是:隨機性的、不夾私情、絕對公平、無論貴賤。
那麼,到底什麼是隨機?他所謂的隨機真的如他所說是不夾私情、絕對公平以及無論貴賤的嗎?
隨機性
隨機性這個詞是用來表達目的、動機、規則或一些非科學用法的可預測性的缺失。一個隨機的過程是一個不定因子不斷產生的重複過程。
提到隨機性,不得不提的就是隨機數,隨機數在計算機應用中使用的比較廣泛,最為熟知的便是在通訊安全和現代密碼學等領域中的應用。
隨機數分為真隨機數和偽隨機數,我們程式中使用的基本都是偽隨機數。
-
真隨機數,通過物理實驗得出,比如擲錢幣、骰子、轉輪、使用電子元件的噪音、核裂變等。需要滿足隨機性、不可預測性、不可重現性。
-
偽隨機數,通過一定演算法和種子得出。軟體實現的是偽隨機數。
只要這個隨機數是由確定演算法生成的,那就是偽隨機。只能通過不斷演算法優化,使你的隨機數更接近隨機。
有限狀態機不能產生真正的隨機數的。所以,現代計算機中,無法通過一個純演算法來生成真正的隨機數。無論是哪種語言,單純的演算法生成的數字都是偽隨機數,都是由可確定的函式通過一個種子,產生的偽隨機數。
為啥滅霸並不公平?
前面我們提到過,真隨機數要滿足隨機性、不可預測性、不可重現性。
我們按照這三個性質逐一分析下,看看滅霸到底是不是公平的。
隨機性
隨機性,指的是不存在統計學偏差,是完全雜亂的數列。
復聯3中,滅霸打了指響之後,復仇者聯盟中存活和死亡的名單其實並不是隨機的。其中很多對CP都是殺1留1的。如鋼鐵俠——蜘蛛俠、美隊——冬兵、火箭浣熊——格魯特、蟻人——黃蜂女等。
而且,還有一點就是,如果真的是隨機性的話,那麼滅霸自己也是有一定的概率會被抹除的,但是,他早就知道自己不會被抹除,並且已經制定好了退休計劃。
並且,在復聯3中,奇異博士用時間寶石和滅霸換了鋼鐵俠的生命,說明滅霸其實是選擇性的進行抹除的。
可見,滅霸的指響抹除過程並不是隨機的。
不可預測性
不可預測性,指的是不能從過去的數列推測出下一個出現的數。
這一點了解電影的朋友應該都知道,奇異博士曾經利用時間寶石穿越了時空,預測了未來,並看到了14000605種可能。
可見,滅霸的指響抹除過程並不是不可預測的。
不可重現性
不可重現性,除非將數列本身儲存下來,否則不能重現相同的數列。
在復聯3中,鋼鐵俠問奇異博士,14000605種可能中,勝利的有多少種。奇異博士回答:1種。
在復聯4中,最後奇異博士對鋼鐵俠比了下面這樣一個手勢。說明,他看到的那唯一一種勝利的可能要復現了。
可見,滅霸的指響抹除過程並不是不可復現的。
綜上,滅霸的指響抹除過程不符合隨機性、不可預測性以及不可復現性。所以,滅霸的指響抹除過程並不是真正的隨機的。
通過現象來看,滅霸的抹除操作很可能只是通過簡單的分層抽樣實現的。簡單操作過程如下:
-
1、把需要特殊處理,不做抹除的人的DNA單獨從所有物種的DNA庫中識別出來,並儲存到快取中。
-
2、根據不同的條件把DNA庫中的所有生命體劃分成若干區塊,如地球人、阿斯加德人等。把他們的DNA資訊儲存到不同的資料庫中。在遍歷的過程中,如果遇到快取中已有的資料,則跳過。
-
3、再根據物種多樣性,如性別、年齡段、職業等把同一個分庫中的資料分別劃分到不同的表中,保證每一張分表中都包含了完整的物種多樣性。
-
4、遍歷所有資料庫,按順序的刪除每個資料庫中一半的分表。如地球人的資料庫中共有1024張表,只保留512張即可。
-
5、再把快取中的資料同步到資料庫中。
這樣,在後面需要復活這些人的時候,只需要找到資料庫的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
相關推薦
漫話:如何給女朋友解釋滅霸的指響並不是真隨機"消滅"半數宇宙人口的?
週末,陪女朋友去電影院看了《復仇者聯盟4:終局之戰》,作為一個漫威粉三個小時看的是意猶未盡。出來之後,準備和女朋友聊一聊漫威這
漫話:給女朋友解釋為什麼隨機播放歌曲並不隨機
週末,開車帶女朋友出去玩,車裡面,隨機播放著周杰倫的歌曲。我正沉浸在『得兒飄,得兒飄,得兒意的飄』中,幻想著自己是秋名山車神,突然,旁邊的豆腐,哦不,女朋友說話了。
漫話:如何給女朋友解釋什麼是併發和並行
某天下班後,我在家裡進行電話面試,問到面試者這樣一個問題:"能不能簡單介紹一下你理解的併發和並行,並說明一下他們之間的關係"。但是面試者回答的並不好,所以我在面試評價中寫到:"對併發和並行的概念不清楚"。這時,女朋友看到這句話。 併發和並行最開始都是作業系統中的概念,表示的是CPU執
漫話:如何給女朋友解釋為什麼雙11無法修改收貨地址
2018年11月11日上午11點,我拖著疲憊身軀回到家中,準備美美的睡上一覺,洗去身上值班一宿而帶來的疲憊。突然想到之前有交代女朋友讓她幫我搶東西,不知道怎麼樣了。 QPS、TR、併發使用者數、最佳執行緒數等等這些都是系統對併發處理上有關的概念。可以用來
漫話:如何給女朋友解釋為什麼雙11當天不能申請退款
雙十一當天晚上的十一點多,我下班回到家中,看到平時很早就睡覺的女朋友今天竟然還沒有睡覺。於是我問她: 服務降級:當伺服器壓力劇增的情況下,根據實際業務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放伺服器資源以保證核心交易正常運作或高效運作。
漫話:如何給女朋友解釋什麼是DDoS攻擊?
週五下班比較早,我正在家裡面玩吃雞遊戲,正在瘋狂的跑毒,這時候坐在旁邊刷著抖音的女朋友問了我一個奇怪的問題。 分散式拒絕服務(DDoS:Distributed Denial of Service)攻擊,是指攻擊者利用大量“肉雞”對攻擊目標發動大量的正常或非正常請求、耗盡目標主機資
漫話:如何給女朋友解釋什麼是RPC
週末一大早,我正在電腦前面看新聞,突然女朋友大喊起來:哇,杭州下大雪啦,快來看啊。我並沒有理她,於是她跑過來拉我。 雪後杭州 RPC 是Remote Procedure Call的縮寫,譯為遠端過程呼叫。是一個計算機通訊協議。
漫話:如何給女朋友解釋什麼是負載均衡
週末晚上,和女朋友去電影院,準備看晚上的DC的海底動作冒險電影——海王。在入口處,人很多,有幾個引導人員時不時的指揮觀眾從不同的入口進入影院內。我們站在隊伍的尾端。 Load balancing,即負載均衡,是一種計算機技術,用來在多個計算機(計算機叢集)、網路連線、CPU、磁碟驅動器或
漫話:如何給女朋友解釋為什麼雙11無法修改收貨地址?
作者:漫話程式設計 來源:漫話程式設計2018年11月11日上午11點,我拖著疲憊身軀回到家中
漫話:如何給女朋友解釋什麼是BIO、NIO和AIO?
週末午後,在家裡面進行電話面試,我問了面試者幾個關於IO的問題,其中包括什麼是BIO、NIO和AIO?三者有什麼區別?具體如
漫話:如何給女朋友解釋什麼是介面卡模式?
週末窩在家裡面打王者榮耀,女朋友在旁邊玩我的電腦,我嫌她播放的綜藝節目聲音比較大,於是建議她戴耳機。 介面卡模式 Adapter Pattern,通常被翻譯成介面卡模式,有時候也叫做包裝模式(wrapper pattern),是GOF 23種設計模式之一。主要作用是將一個類的
圖文詳解:如何給女朋友解釋什麼是微服務?
微服務:微服務是基於分而治之的思想演化出來的。過去傳統的一個大型而又全面的系統,隨著網際網路的發展已經很難滿足市場對技術的需求,於是我們從單獨架構發展到分散式架構,又從分散式架構發展到 SOA 架構,服務不斷的被拆分和分解,粒度也越來越小,直到微服務架構的誕生。 微服務架構是一種架構模式,
再深一點:如何給女朋友解釋什麼是微服務?
大家好,我是小羽。 最近有很多粉絲私信:羽哥,羽哥!是不是失蹤啦?好幾個月沒更新了! 過氣博主表示,工作也比較忙,加之自己搬家(沒有叫貨拉拉,懂的都懂,手動狗頭)的原因,更文就落下了。現在終於把這些事情都處理完了,有充足的時間來更新博文了。放心,落下的遲早都該補回來的,這不已經開始準備上了嘛~先給大家看看收
如何給女朋友解釋什麼是RPC?
週末一大早,我正在電腦前面看新聞,突然女朋友大喊起來:哇,杭州下大雪啦,快來看啊。我並沒有理她,於是她跑過來拉我。 雪後杭州 RPC 是Remote Procedure Call的縮寫,譯為遠端過程呼叫。是一個計算機通訊
千萬不要給女朋友解釋 什麼是 “羊群效應”
> 千萬別給自己女朋友以任何方式講技術,問就是不知道,長壽祕訣~ 媳婦最近突然愛學習了,各種刷演算法、架構方面的題,沒日沒夜的帶娃還有這個勁頭,著實讓我沒想到。看似一片欣欣向榮,不過,長期的生存經驗告訴我,這並不是什麼好事,事出反常必有妖~ ![在這裡插入圖片描述](https://img-blog.c
Python專案:用微信自動給女朋友每天一句英語問候
from __future__ import unicode_literals from threading import Timer from wxpy import * import request
彈指間,網頁灰飛煙滅——Google滅霸彩蛋實現
不可見 order 聚集 mes mat and 實現原理 官網 script 不知道大家有沒有看這段時間最火的一部電影《復仇者聯盟4:終局之戰》,作為漫威迷的我還沒看,為什麽呢?因為太貴了,剛上映的那周,一張IMAX廳的票價已經達到了299的天價,作為搬磚民工是舍不得花這
通俗易懂地給女朋友講:執行緒池的內部原理
餐廳的約會 餐盤在燈光的照耀下格外晶瑩潔白,女朋友拿起紅酒杯輕輕地抿了一小口,對我說:“經常聽你說執行緒池,到底執行緒池到底是個什麼原理?”我楞了一下,心裡想女朋友今天是怎麼了,怎麼突然問出這麼專業的問題,但做為一個專業人士在女朋友面前也不能露怯啊,想了一下便說:“我先給你講講我前同事老王的故事吧!”歡迎
面試系列-面試官:你能給我解釋一下javascript中的this嗎?
一.前言 關於javascript中的this物件,可能已經被大家說爛了。 即使是這樣,我依然決定將這篇文章給水出來。畢竟全國在新型肺炎的影響下,公司沒法正常復工。 除了刷刷手機,還是要適當的學習一下。 廢柴是真不好當,勞逸結合才是王道。 二.正戲開始 面試官:你能給我解釋一下javasc
九:給請求加斷言
enc .org ref assertion cnblogs sample display lin manual 參考:http://jmeter.apache.org/usermanual/component_reference.html#assertions 背景 在測