这是牛友在作业帮面试过程中遇到的一道题目,
完了呀,这是我不会的算法啊!怎么办呀?
赶紧总结学习呀!!!
蓄水池算法过程
假设数据序列的规模为 n,需要采样的数量的为 m。
- 我们先选取前m个数放入池中;
- 我们每次以m/k的概率选择第k(k>m)个数a[k];
- 然后再在蓄水池中随机选取一个元素a[j],交换a[k]和a[j]。
证明过程
主要帮助大家理解为什么能实现“等概率”三个字!
java代码实现
package qiuzhaoprepare;
//功能:实现从1-n中等概率的抽取m个数字
import java.util.Random;
public class Xushuichi {
public static void main(String[] args) {
int