轉載自https://blog.csdn.net/bertdai/article/details/78070092
1. 從單位圓中均勻取樣
M1: 拒絕取樣方法
我們擁有從\([-1, 1]\)中均勻取樣的方法,那麼我們可以透過拒絕取樣的方法來實現從單位圓中均勻取樣。
即我們要證明\(\forall z = (x,y) \sim U(-1,1),U(-1,1) ,p(z | accept) = c\),透過貝葉斯定理很容易證明
因此我們擁有拒絕取樣的思路
for _ in range(1000):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x**2 + y**2 <= 1:
points.append((x, y))
M2: 極座標變換
首先對半徑進行取樣,如果是均勻分佈的話
因此我們只需要對半徑進行取樣,然後對角度進行取樣即可
for _ in range(1000):
r = math.sqrt(random.uniform(0, 1)) * radius
theta = random.uniform(0, 2 * math.pi)
x = r * math.cos(theta)
y = r * math.sin(theta)
points.append((x, y))
2. 一根木棒,截成三截,組成三角形的機率是多少
首先我們僅要對兩截進行建模即可,假設第一截長度為\(x\),第二截長度為\(y\),那麼第三截長度為\(1-x-y\),那麼我們只需要滿足三角形的三邊不等式即可
同時滿足三角形的三邊不等式
不難得出最終的機率為\(\frac{1}{4}\)
3. 拋一個六面的色子,連續拋直到拋到 6 為止,問期望的拋的次數是多少
這是一個幾何隨機變數,其中\(p=1/6\)
我們求解幾何隨機變數要使用全期望公式,下面簡單推導一下
那麼 x 的全期望為
對於另一個隨機變數\(y\),我們也有全期望公式
因此對於幾何隨機變數,我們有
如果我們求第一次丟擲後的期望次數,那麼我們可以透過全期望公式求解
因此我們有
4. 一個木桶裡面有 M 個白球,每分鐘從桶中隨機取出一個球塗成紅色(無論白或紅都塗紅)再放回,問將桶中球全部塗紅的期望時間是多少
5. 你有一把寶劍。每使用一個寶石,有 50%的機率會成功讓寶劍升一級,50%的機率會失敗。如果寶劍的級數大於等於 5 的話,那麼失敗會使得寶劍降 1 級。如果寶劍的級數小於 5 的話,失敗沒有效果。問題是:期望用多少個寶石可以讓一把 1 級的寶劍升到 9 級
記號說明:\(\mathbb{E}[n]\)代表從 n 級升到 9 級的期望寶石數,我們使用全期望公式來求解
\(\mathbb{E}[n] = 0.5 \mathbb{E}[n+1 | 1] + 0.5 \mathbb{E}[n^{'} | 0]\)
透過遞推我們可以求解出來\(\mathbb{E}[1] = 16\)
6. 已知有個 rand7()的函式,返回 1 到 7 隨機自然數,怎樣利用這個 rand7()構造 rand10(),隨機 1~10
首先我們可以透過 rand7() 來構造 rand49(),即rand49() = (rand7() - 1) * 7 + rand7()
,然後透過拒絕取樣+取模的方法來構造 rand10()
def rand10():
while True:
num = (rand7() - 1) * 7 + rand7()
if num <= 40:
return num % 10 + 1
7. 已知有個 randM()的函式,返回 1 到 M 隨機自然數,怎樣利用這個 randM()構造 randN(),隨機 1~N。
pass
8. 已知一隨機發生器,產生 0 的機率是 p,產生 1 的機率是 1-p,現在要你構造一個發生器,使得它產生 0 和 1 的機率均為 1/2。
考慮構造一個發生器,產生 01 和 10 的機率均為 1/2,那麼我們可以透過兩次呼叫原發生器來實現
9. 已知一隨機發生器,產生的數字的分佈不清楚,現在要你構造一個發生器,使得它產生 0 和 1 的機率均為 1/2
利用對稱性,我們可以透過兩次呼叫原發生器來實現
10. 給出從 n 個數中隨機選擇 1 個的方法。注意,n 非常大,並且一開始不知道其具體值。數字是一個一個給你的,當給完之後,你必須立刻給出隨機的結果
首先要求實時性,那麼對於第一個數,我們首先選取
當出現第\(k\)個數時,如果我們選擇第\(k\)個數的機率為\(\frac{1}{k}\),這樣我們就可以保證每個數被選取的機率為\(\frac{1}{n}\)
proof
第 k 個數字被選取的機率為\(\frac{1}{k}\),那麼前 k-1 個數字被選取的機率為\(\frac{k-1}{k}\),而上一輪每一個數字被選取的機率為\(\frac{1}{k-1}\),因此每一個數字被選取的機率為\(\frac{1}{k}\)
proof end