1. 程式人生 > >【數學】一個奇技淫巧:如果用一枚硬幣生成任意概率——比如1/π?

【數學】一個奇技淫巧:如果用一枚硬幣生成任意概率——比如1/π?

剛才舍友拿Matrix67部落格裡的一個問題來考我——如果用一枚硬幣產生1/π的概率,沒想出來怎麼做,看了下解答感覺非常簡單而且巧妙。
Matrix67原部落格裡的文章——26 個比較概率大小的問題,這個問題是其中第15個問題的一小部分

一枚硬幣扔出有理數概率的問題——比如23

如何用一枚硬幣扔出23的概率?
這個其實還是比較容易想到的,把這枚硬幣扔兩次,以下情況出現的概率相等:
1. 正正
2. 正反
3. 反正
4. 反反
所以如果出現第4種情況則相當於取樣失敗,繼續實驗,如果在1~3種情況中出現1~2的情況則是一個23的概率

如果想要扔出無理數概率呢?

以上的方法只適合有理數概率,因為可以把有理數概率寫成分數形式,然後用分母的數字作為樣本空間,從中選出分子個數的情況,作為產生條件即可。但是如果概率本身是一個無理數,寫不成分數形式怎麼辦?
演算法:
1. 可以把1π寫成二進位制小數的形式,比如0.01010001011111001…這必然是一個無限二進位制小數,假設其為p
2. 那麼開始拋擲這枚硬幣,假設不停的拋擲,相當於產生了一個二進位制序列,如果在這個二進位制序列前面加一個「0.」則其表示一個0~1之間的任意小數,假設其為q
3. 所以就可以拿這個數和1π的二進位制小數做對比
如果在該產生0的位置產生了1,則說明q>p
如果在該產生1的位置產生了0,則說明q

<p
p=1π,則這樣就產生了一個以1π作為分界線的概率情況

一道相關的引出問題

以下部分是節選自Matrix67那部分,引出上面那個演算法的引子問題,我覺得也十分有趣,也給轉載了下來:

引子問題

扔硬幣期望擲出‘正反正反……’的序列出來,倘若拋擲硬幣沒有任何技巧,每次是正是反的概率相同,那麼無限地拋擲下去,第一次出錯更有可能出在什麼地方?

A.該擲正面的時候擲出了反面
B.該擲反面的時候擲出了正面
C.上述兩種情況的出現概率相同

這個題目的答案是 A 。下面我們證明,因為該擲反面的時候擲出了正面而掛掉的概率,也就是在第偶數次拋擲時掛掉的概率,精確地等於 1/3 。容易得出,第 2 次就掛了的概率就是前 2 次精確地擲出“正正”序列的概率,它等於 1 / 22 。類似地,到第 4 次才掛的概率就是前 4 次精確地擲出“正反正正”序列的概率,它等於 1 / 24 ;而到第 6 次才掛的概率則是前 6 次精確地擲出“正反正反正正”序列的概率,它等於 1 / 26……所以,在第偶數次掛掉的概率是:

1 / 22 + 1 / 24 + 1 / 26 + 1 / 28 + …
= 1 / 4 + 1 / 42 + 1 / 43 + 1 / 44 + …
= (1 + 1 / 4 + 1 / 42 + 1 / 43 + 1 / 44 + …) – 1
= 1 / (1 – 1 / 4) – 1
= 1 / 3

直觀解釋

這個答案有一個非常直觀的解釋。想象 A 、 B 兩人玩一個擲硬幣遊戲。兩人輪流拋擲硬幣,但 A 必須擲出正面, B 必須擲出反面,誰擲錯了誰就立即輸掉遊戲。如果 A 先拋硬幣,誰輸掉的概率更大?那當然是 A 輸掉的概率更大,因為他先擲嘛!

事實上,設 A 輸掉的概率為 p ,我們可以巧妙地求出 p 來。怎樣的情況下 A 才會輸掉呢?如果 A 第一次就擲錯了,他就直接輸了,這有 1/2 的概率。如果 A 第一次擲對了,那麼 B 必須也跟著擲對,走到這一步有 (1/2) × (1/2) = 1/4 的概率。此時,遊戲又回到了出發點, A 輸掉的概率又變回了 p 。於是,我們得到:

p = 1/2 + (1/4) · p

把它當作一個關於 p 的一元一次方程,解得 p = 2/3 。這就是我們想要的答案。

為什麼魔術師首次出錯更容易錯在把正面擲成了反面。把正面看作數字 1 ,反面看作數字 0 ,那麼觀眾要求的目標序列就變成了 101010… 。如果在前面加一個小數點,這就變成了一個 0 到 1 之間的二進位制小數 0.101010… ,它等於十進位制中的 2/3 。而魔術師拋擲的硬幣序列,則構成了一個 0 到 1 之間的隨機數。如果某一次把 0 擲成了 1 ,就說明擲出的是一個比 2/3 更大的數;如果某一次把 1 擲成了 0 ,就說明擲出的是一個比 2/3 更小的數。顯然,前者的概率是 1/3 ,後者的概率是 2/3 。

你意識到了嗎?我們相當於用一枚公正的硬幣,模擬出了一枚不公正的硬幣。如果你想要一枚硬幣,它有 2/3 的概率正面朝上,有 1/3 的概率反面朝上,但你手中只有一枚公正的硬幣,你該怎麼辦呢?你可以像剛才那樣,不斷拋擲硬幣,得出一個 0 到 1 之間的隨機二進位制小數。一旦發現這個二進位制小數小於 2/3 ,就視最終結果為“正”;一旦發現這個二進位制小數大於 2/3 ,就視最終結果為“反”。

當然,模擬這樣一枚不公正的硬幣,其實遠不需要這麼麻煩。因為2/3 是一個有理數。如果我們要模擬一枚不公正的硬幣,它有 1 / π 的概率正面朝上,有 1 – 1 / π 的概率反面朝上呢?此時,“分類討論法”就不管用了。但是,剛才的“二進位制小數法”依舊有效。不斷拋擲硬幣並記錄拋擲結果, 1 代表正面, 0 代表反面,直至某次擲出的結果與 1 / π 的二進位制小數不符。如果是 1 被擲成 0 了,則視最終結果為“正”;如果是 0 被擲成 1 了,則視最終結果為“反”。