亂數小故事

一言以蔽之:隨機胡亂都是有趣的事。

亂數表

Random Number Table
Reference: 《A MILLION Random Digits WITH 100,000 Normal Deviates》

所謂亂數就是隨機生成的數字,具有不可預測性。而亂數表就是提供一張獨立數字表,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]12345678normalize到[0~1)
x[1]10852525190.505360085
x[2]5082597310.236676881
x[3]13522917730.629709928
x[4]15632402710.727940477
x[5]8907331550.414779948

不過這其實是pseudo random的,顯然這數列經過m個數字以後就會重複了。

假裝隨機

有一個很常考的機率問題,四胎都生男生的機率是十六分之一,有一對父母已經生了三胎男生,請問第四胎又生男生的機率是多少?答案不是十六分之一,而是二分之一。

因為第四胎小孩的性別是隨機的,跟前面三胎沒有關係,然而人類卻會覺得連續生四胎都是男生是不隨機的事情。由於人類有這種錯覺——對真正隨機的事件感受到不隨機,因此為了讓人類感受到隨機,程式還要特別寫成不隨機。

舉例來說,Youtube Music或Spotify可以隨機播放媒體庫中的歌曲,但其實這個「隨機」並不隨機。真正隨機就會有一定機率連續播放同一個歌手的歌、甚至是同一首歌,這樣反而會造成使用者抱怨,所以播放器會按照歌手、年代、曲風等先分類後再局部隨機。

無限猴子定理

另外一個跟隨機有關係的知名定理,叫做無限猴子定理,它是這麼說的:讓一隻猴子在打字機上隨機地按鍵,當按鍵時間的足夠長以後,這隻猴子就有機率可以打出莎士比亞的著作。

有趣的是,還真的有研究人員跟動物園合作,找了猴子來打字做實驗,結果那一隻猴子幾乎都按同一顆鍵「S」,想必這隻猴子是左撇子,牠的食指就剛好點到S鍵,根本不是隨機的打字。最後這實驗終止的原因倒也不是猴子打不出文章,而是猴子的便溺把鍵盤弄壞了。