引子

Q: 从长度为N的数据中随机等概抽出1条数据。

A: 第j个元素以概率

决定保留

image.png

问题

从长度为N的数据中随机抽出长度为K的数据,即每个元素被选中的概率都为

做法

初始化:依次取出前K个元素;

此后,第j个元素以概率

决定保留

证明

image.png

实现

public class ReservoirSamplingTest {

private int[] pool; // 所有数据

private final int N = 100000; // 数据规模

private Random random = new Random();

@Before

public void setUp() throws Exception {

// 初始化

pool = new int[N];

for (int i = 0; i < N; i++) {

pool[i] = i;

}

}

private int[] sampling(int K) {

int[] result = new int[K];

for (int i = 0; i < K; i++) { // 前 K 个元素直接放入数组中

result[i] = pool[i];

}

for (int i = K; i < N; i++) { // K + 1 个元素开始进行概率采样

int r = random.nextInt(i + 1);

// 这里其实就是k/j的体现

if (r < K) {

result[r] = pool[i];

}

}

return result;

}

@Test

public void test() throws Exception {

for (int i : sampling(100)) {

System.out.println(i);

}

}

}

蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)相关推荐

  1. 蓄水池问题c语言编程,蓄水池大作战

    面向对象,无需算法,有手就行. 以下是Go的实现,无论你学的什么语言都能看懂的. package main import ( "fmt" ) type node struct { ...

  2. 蓄水池抽样算法(reservoir sampling)

    蓄水池抽样算法(reservoir sampling) 场景:在长度未知的数据流中,等概率地采样一定数量的数据.即,数据量N未知,若要求采样k个数据,采样概率保证kN\frac{k}{N}Nk​. 要 ...

  3. 蓄水池抽样算法 Reservoir Sampling

    2018-03-05 14:06:40 问题描述:给出一个数据流,这个数据流的长度很大或者未知.并且对该数据流中数据只能访问一次.请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等. 问题求 ...

  4. Streaming的算法Reservoir Sampling

    转载自   这是一个惊艳了我的算法题 Reservoir Sampling( Reservoir sampling )  这是我在今年求职过程中面试的时候被问到的,因为之前很少接触Streaming的 ...

  5. 蓄水池问题c语言编程,基于51单片机的蓄水池自动控制系统(35页)-原创力文档...

    广西民族大学 第二次综合课程设计报告 论文题目 : 基于 51 单片机的蓄水池自动控制系统 学 院: 物理与电子工程学院 专 业 : 自动化 年 级 : 2007 级 学 号 : 1072630101 ...

  6. 查找整数c语言编程,关于算法:查找整数的位数

    查找正整数的位数的最佳方法是什么? 我发现了这3种基本方法: 转换为字符串 String s = new Integer(t).toString(); int len = s.length(); fo ...

  7. 小波分析c语言编程,小波分析算法的公式与C语言实现 - 全文

    一.小波分析算法的计算 1.Mallat算法[经典算法] 在小波理论中,多分辨率分析是一个重要的组成部分.多分辨率分析是一种对信号的空间分解方法,分解的最终目的是力求构造一个在频率上高度逼近L2(R) ...

  8. 学习R语言编程——常用算法——导数与微积分的近似计算

    #########################常用算法--导数与微分的近似计算####################### ###例题:用导数的近似计算求函数f(x) = -4*x^2+3*x+ ...

  9. C语言编程johnson算法,基于稀疏图上的Johnson算法的详解

    #include #include #define U    65535 #define PARENT(i)    ((i-1)/2) #define LEFT(i)        (2*(i)+1) ...

最新文章

  1. BZOJ-1257-[CQOI2007]余数之和sum
  2. MS SQL基础:注释符、运算符与通配符
  3. 边缘计算在天猫精灵云应用上的落地实践
  4. 实战:Windows Server 2008 使用WSUS实现内网计算机系统更新
  5. 数据库-数据库的备份与恢复
  6. Dubbo核心知识点
  7. STM32F103实现CMSIS-DAP
  8. imdisk命令行使用及配置
  9. 使用Servlet和JSP开发Java应用程序 ----错误处理
  10. 小米8手机相册中的图片怎么识别文字?
  11. 破解有道翻译js加密,纯小白练手
  12. SCRUM团队的三个角色
  13. 金钱不能买什么读后感_金钱的界限-----读桑德尔《金钱不能买什么》有感
  14. HTML+CSS+JavaScript 实现登录注册页面(超炫酷)
  15. FD650B数码管驱动
  16. pandas金融数据处理
  17. 常用3500个汉字(转收藏)
  18. angular 读取json文件
  19. Y9000X 2022 i7-12700H+3060 安装AX211网卡驱动, 笔记本网卡AX211无法找到wifi, 及WiFi无列表解决方案
  20. 仿牛客论坛项目(5)

热门文章

  1. 如何使用注册表在Win10中调整屏幕亮度
  2. 便签内容如何从旧手机转到新手机?
  3. 室内停车场地图定位-停车场地图定位导航
  4. 腾讯2018第一季度财报:微信用户超10亿,线下零售红利已到来
  5. android 启动视频,android 启动页面全屏播放视频
  6. gfortran版本
  7. python 合成gif与拆分gif为png图片
  8. git命令行切换到某一个提交版本的分支
  9. 贝壳找房上海研发全员被优化,公司回应来了!
  10. Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):