點擊右上角關注我,了解更多趣知識科普~
最近支付寶錦鯉的出現,敲碎了 300 萬人的暴富夢。。。
抽獎這種隨機發生的事情,為啥放到自己身上來說就等於 「 絕對不可能發生 」 呢。
還有平時打網遊,想要的任務材料和裝備,人家隨便暴,自己死活就是不暴。
玩兒 lol , 60% 暴擊率連打別人三下都不暴擊,別人 15% 暴擊率打你連續暴擊兩回把你反殺了。。。
人生就是如此反覆無常。
等等。。。
人生反覆無常是沒錯,但是上面由計算機產生的 「 隨機 」 ,真的是反覆無常的嗎?
計算機產生的隨機數,其實是偽隨機 「 pseudorandom 」 ,或者說是模擬出來的隨機數。
換句話說,你打怪不掉裝備,不出暴擊被人反殺,其實都是 「 被安排好了的 」 。
最直觀的例子。。比如你音樂播放軟體裡的 「 隨機 」 播放功能,其實只是把你的歌單打亂然後依次放一遍。
這不算是隨機嗎?
不算:如果是真隨機,你是有可能聽到歌曲重複播放的,概率還不小。
但事實上,幾乎所有播放軟體的隨機播放,同一首歌曲只會放一遍,而且如果你選擇 「 上一首 」 就一定能聽到上一首。
一般情況下,電腦是無法自己產生真隨機的。
你想想,計算機的一切行為都是人類寫代碼設定好的,因此在沒有輸入的情況下,你問它隨便憑空給個玩意。。。它還真就給不了!
但現在有很多場景確實需要計算機 「 隨機 」 點兒啥,比如遊戲,抽獎。。。
於是。。。就有了各種各樣的,用來讓計算機生成隨機數的偽隨機算法。
C++ 裡的偽隨機數計算公式
這種算法一般是個函數:你輸入一個東西,就會輸出一個東西。
比如你要模擬擲骰子,給這個算法輸入一個數字 [ 561981980 ] ,限制結果是 1 - 6 的整數,運行一下輸出一個數列:[ 3, 3, 4, 1, 6, 5, 1, 3, 2, 5 ] 。 ( 運行環境:差評君的大腦 )
然後。。。運行那個隨機算法以後,這些生成的隨機數就在那兒了,你每次管計算機要個骰子,它就按照數列的順序給你一個,不和你說,就以假亂真了。。。
在上面提到的場景裡,數字 [ 561981980 ] 被稱作隨機數種子。
大多數隨機數算法,都要個隨機數種子,來給函數作計算,一旦種子確定下來以後,生成的 「 隨機數 」 其實是有個確定的隨機數表的。
但並沒有啥關係,只要函數夠複雜,周期性非常長,那麼這個產生的隨機數表就幾乎無法預判。
遊戲 《 文明6 》 生成遊戲地圖就可以選擇種子
因此生成的函數對偽隨機算法很重要。
在網上有人做過測試,把隨機數可視化之後可以生成噪點圖來看。
這是 C 語言在 linux 環境下調用隨機數的排列結果
可以看到,分布很平均。
不過在 Windows 下的 PHP 隨機數算法,就能看出些規律,說明效果沒有上面那個好。
除了算法,還有在隨機數種子上做文章的。
有的算法使用外部因素來產生種子,這種外部因素被叫做噪聲源。
不少算法會調用當前系統時間當作隨機數種子。
( 順帶科普一下:現代計算機裡的時間其實是一個很大的整數,代表 1970 年 1 月 1 日以後到現在過了多少秒,再折算成年月日就有了計算機記錄的日期時刻,這個整數理論上的上限是 2 的 32 次方,看著挺大,其實到 2038 年就會用完,到時候咋辦工程師們還在討論 )
這個辦法理論上夠隨機了,畢竟啥時候需要隨機數是人來決定的,而人是感情的動物,做事兒極其沒有規律。。。
但是時間這個事情,在某種程度上是依舊可預測的。
因此還有更進一步的算法,例如 Linux 內核裡有一套方法,從使用計算機硬體的人身上獲取噪聲。
這個噪聲可以是兩次鍵盤敲擊的時間間隔,某一次滑鼠移動的距離。。。這些事情對計算機來說是不可預測的。
這個方法從理論上來說,產生的是真隨機數。
為啥是理論上來說呢?
先想想這個問題:我們理解的現實世界中的 「 真隨機 」 ,真的是完全隨機的嗎?
如果能搞清楚一顆骰子處的位置,桌子的材料,摩擦,空氣阻力,投的人用多大的力。。。不管多複雜,其實理論上通過數學和物理學工具是可以算出結果的。
人的行為也類似,人的當時的狀態心情,和他從小到大的遭遇見聞,接受的教育是已知的情況下,理論上也許能算出一個人的下一步行動。
嗯。。。發現沒,這個問題再討論下去,就馬上要跳出物理學數學心理學的範疇,進入哲學的領域了。
如果看了這篇文章導致你需要隨機數的時候,再也不相信手機 APP 生成的結果的話。。。試試這個網站:random.org
絕對不是什麼推廣,國內上這個網站賊卡
這個網站可以幫你產生各種隨機數,給定一個範圍就能生成數字,生成隨機數種子的噪音源取自大氣裡的分子運動現象,廣義上來講,也算真隨機了。
這麼說下去,既然電腦裡的隨機都是 「 安排好的 」,咱們遊戲還玩兒嗎?
照樣玩兒,因為一般情況下,偽隨機拿來模擬真隨機是夠用的,我們的世界一直就是這麼過來的。
至於現實生活有沒有隨機這個事情,也別糾結了,好好生活,把問題留給科學家和哲學家吧。
圖片來源:Giphydialogos.com.cy差評君在寫文章途中來了一局文明6The Irish Times參考資料:CSDN用戶@繪夜博文 《 隨機數:真隨機數和偽隨機數 》知乎用戶@雨亦奇《 偽隨機的上位和真隨機的逆襲 》維基百科 「 pseudorandom 」cnblogs @紅字 《 內核隨機數產生器 》
「 我知道結尾有點像廣告,但不是。。這破網站誰會做廣告啊喂?! 」