十分钟让你明白蓄水池算法
蓄水池算法 数据流处理 随机抽样 Java实现 抽奖模型
蓄水池算法
1、蓄水池原理
如图,一个游泳池,池内水是活水,也就是有水不断地进入,也有一端不断往外流出,理论上池中水会被全部替换,其实随着水流的流动,会存在一部分水还是之前的水,有一部分会被替换,这也就是蓄水池算法的思想
2、蓄水池算法解析⭐
蓄水池算法一般用于大量数据,数据流处理,对数据进行一次读取,公平随机抽样。假设一个抽奖场景,设置三个中将名额,规定期间不断有人进行抽奖,直到开奖日,才停止抽奖,进行开奖。
3、Java代码实现
通过从100个数字中随机抽取5个数据为例,编写代码如下:
/*蓄水池抽样算法模拟*/
public class Sampling {
//定义一个中奖的集合
List<Integer> list;
//随机数
Random random;
//设置中奖名额
public final Integer number;
//初始化
public Sampling(int n){
number=n;
list=new ArrayList<>(n);
random=new Random();
}
//抽水池算法
public void samping(int num){
if (num<number){
list.add(num);
}else{
int rand = random.nextInt(num);
if(rand<number){
list.set(random.nextInt(number),num);
}
}
}
public static void main(String[] args) {
//测试 1~100随机抽5个数
Sampling sampling=new Sampling(5);
for (int i = 0; i < 100; i++) {
sampling.samping(i);
}
sampling.list.forEach(System.out::println);
}
}
小麟有点小靈: 第一种方法能否把那个该my.cnf配置文件也加上呢?不然后面初始化了有账号密码之后再想改有可能会很麻烦甚至要重新删掉文件再装,因为8.0之后就这样。还有Yum能否写上选择版本,现在是8.0以上版本真的很多地方不方便
小麟有点小靈: 为什么用yum安装了rpm后还要安装community-server呢?
爱喝ad奶: 第一种方法非常好用
name_xu: 怎么回事老弟,allMatch那个答案怎么能是true呢
康德的叛逆弟子: 没有可用软件包mysql-community-server怎么办