概率面试题

转载自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

posted @ 2024-05-19 00:53  Blackteaxx  阅读(8)  评论(0编辑  收藏  举报