概率面试题
转载自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