抽獎這件事真的是隨機的嗎?_風聞
差评-差评官方账号-2018-10-12 07:42
文/差評 差評君
最近支付寶錦鯉的出現,敲碎了 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
絕對不是什麼推廣,國內上這個網站賊卡
這個網站可以幫你產生各種隨機數,給定一個範圍就能生成數字,**生成隨機數種子的噪音源取自大氣裏的分子運動現象,**廣義上來講,也算真隨機了。
這麼説下去,既然電腦裏的隨機都是 “ 安排好的 ”,咱們遊戲還玩兒嗎?
照樣玩兒,因為一般情況下,偽隨機拿來模擬真隨機是夠用的,我們的世界一直就是這麼過來的。
至於現實生活有沒有隨機這個事情,也別糾結了,好好生活,把問題留給科學家和哲學家吧。
圖片來源:
Giphy
dialogos.com.cy
差評君在寫文章途中來了一局文明6
The Irish Times
參考資料:
CSDN用户@繪夜博文 《 隨機數:真隨機數和偽隨機數 》
知乎用户@雨亦奇《 偽隨機的上位和真隨機的逆襲 》
維基百科 “ pseudorandom ”
cnblogs @紅字 《 內核隨機數產生器 》