概率相关面试题总结

1、随机数生成器
假设一个随机数生成器randK可以随机产生1-K之间的随机数,问如何能够构造一个randN的随机数生成器,一般来说 N<K
N<Km ,即m个randK生成器可以生成大于N个组合,则对于 n=Km/N 个组合,每个组合可以表示一个randN的生成随机数
2、随机洗牌问题
for i in range(n): swap(a[i], a[random(i,n)])
2.1 随机打乱一个数组(随机排列问题)
这里随机的在剩下的n-i个元素中选择一个元素放在i处,在每一次的选择过程中,每一个元素被选择的概率都为 1ni ,这里的概率均等是对每一轮的选择而言的。
2.2 随机抽样问题
从一个包含n个元素的数组中随机地选择m个元素
因为要满足随机性,所以应该以 mn 的概率选择每一个元素。
从而 若 k=1 ,此时随机生成 n 以内的随机数,但是要满足概率 mn ,从而只保留m内的数字
同样 若 k=i ,以 mini 概率选择。( ninmini=min )
2.3 高效的产生m个n范围内的不重复随机数
首先产生n个不重复数字的数组,然后随机选择其中数字的下标,输出选择得到的元素,然后将选择的结果移到数组的某位。
这种方法对空间要求挺高的。

3、蓄水池抽样问题
随机抽样问题的进阶版,主要处理情况为数据量巨大,此时N未知。
处理方法:
1-保留前m个元素
2-对于第m+i个元素,以 mm+i 的概率决定是否选择这个元素,然后在以 1m 的概率选择替换前m个位置中的第几个位置

4、带权采样问题
1-可以按照权值复制元素,然后按照普通方法处理

你可能感兴趣的:(面试准备中)