機率面試題

Blackteaxx發表於2024-05-19

轉載自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: 極座標變換

首先對半徑進行取樣,如果是均勻分佈的話

\[F_X(x) = P(X \leq x) = x^2 \\ F_X^{-1}(x) = \sqrt{x} \]

因此我們只需要對半徑進行取樣,然後對角度進行取樣即可

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\),那麼我們只需要滿足三角形的三邊不等式即可

\[f(x,y) = c, 0 \leq x \leq 1, 0 \leq y \leq 1, 0 \leq 1-x-y \leq 1 \\ \int f(x,y) = 1 \]

同時滿足三角形的三邊不等式

\[\begin{aligned} x + y \geq 1-x-y \\ y + 1-x-y \geq x \\ 1-x-y + x \geq y \end{aligned} \]

不難得出最終的機率為\(\frac{1}{4}\)

3. 拋一個六面的色子,連續拋直到拋到 6 為止,問期望的拋的次數是多少

這是一個幾何隨機變數,其中\(p=1/6\)

\[p(x=k) = (1-p)^{k-1} p \]

我們求解幾何隨機變數要使用全期望公式,下面簡單推導一下

\[\mathbb{E}_{x|A}[x] = \sum_{x} x p(x|A) \]

那麼 x 的全期望為

\[\mathbb{E}[x | A_i] = \sum_{A_i} \mathbb{E}_{x|A_i}[x] p(A_i) = \sum_{A_i} \sum_{x} x p(x|A_i) p(A_i) \\ = \sum_{x} x \sum_{A_i} p(x|A_i) p(A_i) = \sum_{x} x p(x) \]

對於另一個隨機變數\(y\),我們也有全期望公式

\[\mathbb{E}[x] = \sum_{y} p(y) \mathbb{E}_{x|y}[x] = \sum_{y} p(y) \sum_{x} x p(x|y) \\ = \sum_{x} x \sum_{y} p(x|y) p(y) = \sum_{x} x p(x) \]

因此對於幾何隨機變數,我們有

\[\mathbb{E}[x] = \sum_{x} x p(x) = \sum_{x} x (1-p)^{x-1} p \]

如果我們求第一次丟擲後的期望次數,那麼我們可以透過全期望公式求解

\[\mathbb{E}[x | 1] = 1 \\ \mathbb{E}[x | 0] = 1 + \mathbb{E}[x] \]

因此我們有

\[\mathbb{E}[x] = p \mathbb{E}[x | 1] + (1-p) \mathbb{E}[x | 0] = p + (1-p)(1 + \mathbb{E}[x]) \\ \Rightarrow \mathbb{E}[x] = \frac{1}{p} = 6 \]

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}[n] = \begin{cases} 1 + \frac{1}{2} \mathbb{E}[n+1] + \frac{1}{2} \mathbb{E}[n-1] & n \geq 5 \\ 1 + \frac{1}{2} \mathbb{E}[n+1] + \frac{1}{2} \mathbb{E}[n] & n < 5 \end{cases} \]

透過遞推我們可以求解出來\(\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

相關文章