一言以蔽之:隨機胡亂都是有趣的事。
亂數表
所謂亂數就是隨機生成的數字,具有不可預測性。而亂數表就是提供一張獨立數字表,0-9數字在表中出現的次數是大致相同且的未知規律的,當我們要產生一些亂數的時候,便可以查亂數表,中學時代還有一節數學課特別教如何讀亂數表。
亂數產生器
隨著電腦的普及,線上的亂數產生器逐漸取代亂數表了,而最常見的亂數產生器就是「線性同餘法」(linear congruential generator),其公式為:
x[n] = (a * x[n-1] + b) ... mod m 其中 m > 0, 0 < a < m, 0 <= b < m
只要m是一個足夠大的數,再適當地選擇a和b,就可以從任意的seed x[0]開始,產生出x[1], x[2], x[3], …,舉例來說,m=2^31−1=2147483647、a=48271、b=0、x[0]=12345678,就可以產生出下面這張數列。
x[0] | 12345678 | normalize到[0~1) |
x[1] | 1085252519 | 0.505360085 |
x[2] | 508259731 | 0.236676881 |
x[3] | 1352291773 | 0.629709928 |
x[4] | 1563240271 | 0.727940477 |
x[5] | 890733155 | 0.414779948 |
不過這其實是pseudo random的,顯然這數列經過m個數字以後就會重複了。
假裝隨機
有一個很常考的機率問題,四胎都生男生的機率是十六分之一,有一對父母已經生了三胎男生,請問第四胎又生男生的機率是多少?答案不是十六分之一,而是二分之一。
因為第四胎小孩的性別是隨機的,跟前面三胎沒有關係,然而人類卻會覺得連續生四胎都是男生是不隨機的事情。由於人類有這種錯覺——對真正隨機的事件感受到不隨機,因此為了讓人類感受到隨機,程式還要特別寫成不隨機。
舉例來說,Youtube Music或Spotify可以隨機播放媒體庫中的歌曲,但其實這個「隨機」並不隨機。真正隨機就會有一定機率連續播放同一個歌手的歌、甚至是同一首歌,這樣反而會造成使用者抱怨,所以播放器會按照歌手、年代、曲風等先分類後再局部隨機。
無限猴子定理
另外一個跟隨機有關係的知名定理,叫做無限猴子定理,它是這麼說的:讓一隻猴子在打字機上隨機地按鍵,當按鍵時間的足夠長以後,這隻猴子就有機率可以打出莎士比亞的著作。
有趣的是,還真的有研究人員跟動物園合作,找了猴子來打字做實驗,結果那一隻猴子幾乎都按同一顆鍵「S」,想必這隻猴子是左撇子,牠的食指就剛好點到S鍵,根本不是隨機的打字。最後這實驗終止的原因倒也不是猴子打不出文章,而是猴子的便溺把鍵盤弄壞了。