篩子的點(diǎn)數(shù),是隨機(jī)的嗎?
打開微信,往一個(gè)8人群里發(fā)一個(gè)9分錢的拼手氣紅包。那么不管你發(fā)多少次,最后一個(gè)搶紅包的人都必定能拿到兩分錢,不信你可以試一試。顯然,在分配紅包金額這件事上,你手上的這臺小型計(jì)算機(jī)并不是真的隨機(jī)。那計(jì)算機(jī)是如何制造隨機(jī)事件的?各種軟件中的隨機(jī)都是真的隨機(jī)嗎?
在計(jì)算機(jī)中生成隨機(jī)事件的關(guān)鍵是輸出一個(gè)隨機(jī)數(shù),然后再利用算法就能模擬出各式各樣的隨機(jī)事件。你剛才看到的拼手氣紅包背后就有這樣一套算法。其中的隨機(jī)數(shù)決定了你最后搶到的金額大小。如何才能得到這樣的隨機(jī)數(shù)呢?
1946年,計(jì)算機(jī)支付馮諾依曼提出了這么一套方案,編寫一個(gè)隨機(jī)數(shù)生成器,只要輸入任意一個(gè)數(shù)字作為種子,計(jì)算機(jī)就能通過運(yùn)算生成一個(gè)新的隨機(jī)數(shù)字。然后再把這個(gè)數(shù)字作為輸入值帶入下一輪計(jì)算,重復(fù)這個(gè)過程,就能生成多個(gè)具有統(tǒng)計(jì)意義的隨機(jī)數(shù)。
直到今天,你的手機(jī)電腦仍然在沿用這套隨機(jī)數(shù)生成方案,只是把隨機(jī)數(shù)生成器升級成了運(yùn)算效果更好的線性反饋移位寄存器。隨機(jī)種子的花樣也更多了。從系統(tǒng)時(shí)間、鼠標(biāo)位置到網(wǎng)絡(luò)速度,硬盤讀寫速度,甚至是你聊天記錄的本地文件都可以被拿來當(dāng)做隨機(jī)數(shù)生成的初始條件,決定最后的隨機(jī)結(jié)果。這樣得到的數(shù)字,乍看起來非常隨機(jī)。但受到算法的限制,只要取樣范圍夠大,數(shù)字排列早晚會陷入循環(huán)。所以這種方式產(chǎn)生的隨機(jī)數(shù)只能叫做偽隨機(jī)數(shù)。
以常用的梅森旋轉(zhuǎn)算法為例,它生成隨機(jī)數(shù)的循環(huán)周期是2的19937次方。哪怕全世界的計(jì)算機(jī)一起工作,直到太陽系毀滅的那一天,你也等不到這個(gè)循環(huán)。但無論循環(huán)周期有多長,只要知道一開始的隨機(jī)種子,再用同一個(gè)隨機(jī)數(shù)生成器,就能預(yù)測隨機(jī)結(jié)果。
比如在1994年,飛利浦的一名員工就弄到了當(dāng)時(shí)的互聯(lián)網(wǎng)巨頭Netscape的服務(wù)器隨機(jī)種子,在輸入當(dāng)前時(shí)間加特定字符之后,他就成功解密了對方所有網(wǎng)絡(luò)服務(wù)器的流量信息。
除了能完美預(yù)測偽隨機(jī)結(jié)果,你甚至還能主動改變隨機(jī)種子的數(shù)值,讓所謂的隨機(jī)事件變成百分之百發(fā)生的必然事件。
比如2014年,俄羅斯的一位數(shù)學(xué)家就拆解了一臺舊老虎機(jī),獲取了老虎機(jī)采用的偽隨機(jī)算法,然后設(shè)計(jì)了一套程序,只要用手機(jī)拍下其他人的****博過程,就能反推計(jì)算出老虎機(jī)所用的隨機(jī)種子。有了這套方法,你只需要找出對應(yīng)時(shí)間點(diǎn)拉下拉桿就能歐神附體,百發(fā)百中。最終被丟出****場關(guān)進(jìn)局子。
說到底,雖然偽隨機(jī)數(shù)應(yīng)用廣泛,但它畢竟不是真正的隨機(jī)數(shù),想要生成無法預(yù)測的真隨機(jī)數(shù),還得從硬件層面想辦法。1999年,英特爾在其i810芯片組上集成了一枚真隨機(jī)數(shù)生成器。它通過放大電路產(chǎn)生的熱噪聲,把電路中分子的不規(guī)則熱運(yùn)動作為數(shù)據(jù)來源,這才讓計(jì)算機(jī)擁有了自主生成隨機(jī)數(shù)的能力。類似的一些專門提供真隨機(jī)數(shù)服務(wù)的公司,還會通過收集現(xiàn)實(shí)世界中的隨機(jī)事件,比如大氣噪音的振幅變化,或者是人工擲骰子轉(zhuǎn)動輪盤的結(jié)果。再把它們轉(zhuǎn)化為二進(jìn)制或者十進(jìn)制的數(shù)字,以此獲得更高品質(zhì)的隨機(jī)數(shù)資源。通過這些方式獲得的隨機(jī)數(shù)幾乎不可能預(yù)測,所以被稱為真隨機(jī)數(shù)。他們主要被應(yīng)用于安全或者密碼學(xué)領(lǐng)域,用來保護(hù)最重要的數(shù)據(jù)信息。
不過如果硬要抬杠,那么這種真隨機(jī)數(shù)其實(shí)也不夠隨機(jī)。因?yàn)楹暧^現(xiàn)實(shí)世界里的一切隨機(jī)現(xiàn)象仍然遵循物理學(xué)的必然規(guī)律,只是我們這些凡人無法參透罷了。如果拉普拉斯妖真的存在,那么理論上它就能知曉所有原子的分布和動量,算出任何色子的點(diǎn)數(shù),破解一切加密的信息。如果想要實(shí)現(xiàn)絕對的隨機(jī),那就只能求助于量子力學(xué)了。
隨著技術(shù)發(fā)展,如今的研究人員已經(jīng)能夠通過記錄元素的衰變和放射情況,或者是探測真空中氬原子的噪音,或者統(tǒng)計(jì)出糾纏粒子出現(xiàn)的隨機(jī)位,設(shè)計(jì)出更新型的隨機(jī)數(shù)生成器。
在現(xiàn)有科學(xué)體系下,這種方式產(chǎn)生的數(shù)字沒有規(guī)律,在物理和哲學(xué)層面上都絕對不可預(yù)測,是真正意義上的隨機(jī)數(shù)。不過回歸現(xiàn)實(shí),用量子力學(xué)生成隨機(jī)數(shù),技術(shù)難度實(shí)在太高,用芯片自帶的真隨機(jī)數(shù)生成器,輸出效率又太低。
你手上這臺計(jì)算機(jī)現(xiàn)在用的,其實(shí)還是尾隨基數(shù)。而且有時(shí)候過于隨機(jī),也不一定是件好事兒。如果沒有軟件算法為用戶把控恰到好處的隨機(jī)感,而是直接讓這些隨機(jī)數(shù)來決定結(jié)果。那么你很可能在聽音樂的時(shí)候,連續(xù)三次都聽到同一首曲子。搶紅包的時(shí)候,每一次都是手氣最差。玩游戲的時(shí)候連抽一百張卡都沒有SSR。說白了,你感受到的隨機(jī)根本就不是命運(yùn)的捉弄,而是算法提前安排好的罷了。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。