蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)
引子
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)相关推荐
- 蓄水池问题c语言编程,蓄水池大作战
面向对象,无需算法,有手就行. 以下是Go的实现,无论你学的什么语言都能看懂的. package main import ( "fmt" ) type node struct { ...
- 蓄水池抽样算法(reservoir sampling)
蓄水池抽样算法(reservoir sampling) 场景:在长度未知的数据流中,等概率地采样一定数量的数据.即,数据量N未知,若要求采样k个数据,采样概率保证kN\frac{k}{N}Nk. 要 ...
- 蓄水池抽样算法 Reservoir Sampling
2018-03-05 14:06:40 问题描述:给出一个数据流,这个数据流的长度很大或者未知.并且对该数据流中数据只能访问一次.请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等. 问题求 ...
- Streaming的算法Reservoir Sampling
转载自 这是一个惊艳了我的算法题 Reservoir Sampling( Reservoir sampling ) 这是我在今年求职过程中面试的时候被问到的,因为之前很少接触Streaming的 ...
- 蓄水池问题c语言编程,基于51单片机的蓄水池自动控制系统(35页)-原创力文档...
广西民族大学 第二次综合课程设计报告 论文题目 : 基于 51 单片机的蓄水池自动控制系统 学 院: 物理与电子工程学院 专 业 : 自动化 年 级 : 2007 级 学 号 : 1072630101 ...
- 查找整数c语言编程,关于算法:查找整数的位数
查找正整数的位数的最佳方法是什么? 我发现了这3种基本方法: 转换为字符串 String s = new Integer(t).toString(); int len = s.length(); fo ...
- 小波分析c语言编程,小波分析算法的公式与C语言实现 - 全文
一.小波分析算法的计算 1.Mallat算法[经典算法] 在小波理论中,多分辨率分析是一个重要的组成部分.多分辨率分析是一种对信号的空间分解方法,分解的最终目的是力求构造一个在频率上高度逼近L2(R) ...
- 学习R语言编程——常用算法——导数与微积分的近似计算
#########################常用算法--导数与微分的近似计算####################### ###例题:用导数的近似计算求函数f(x) = -4*x^2+3*x+ ...
- C语言编程johnson算法,基于稀疏图上的Johnson算法的详解
#include #include #define U 65535 #define PARENT(i) ((i-1)/2) #define LEFT(i) (2*(i)+1) ...
最新文章
- BZOJ-1257-[CQOI2007]余数之和sum
- MS SQL基础:注释符、运算符与通配符
- 边缘计算在天猫精灵云应用上的落地实践
- 实战:Windows Server 2008 使用WSUS实现内网计算机系统更新
- 数据库-数据库的备份与恢复
- Dubbo核心知识点
- STM32F103实现CMSIS-DAP
- imdisk命令行使用及配置
- 使用Servlet和JSP开发Java应用程序 ----错误处理
- 小米8手机相册中的图片怎么识别文字?
- 破解有道翻译js加密,纯小白练手
- SCRUM团队的三个角色
- 金钱不能买什么读后感_金钱的界限-----读桑德尔《金钱不能买什么》有感
- HTML+CSS+JavaScript 实现登录注册页面(超炫酷)
- FD650B数码管驱动
- pandas金融数据处理
- 常用3500个汉字(转收藏)
- angular 读取json文件
- Y9000X 2022 i7-12700H+3060 安装AX211网卡驱动, 笔记本网卡AX211无法找到wifi, 及WiFi无列表解决方案
- 仿牛客论坛项目(5)
热门文章
- 如何使用注册表在Win10中调整屏幕亮度
- 便签内容如何从旧手机转到新手机?
- 室内停车场地图定位-停车场地图定位导航
- 腾讯2018第一季度财报:微信用户超10亿,线下零售红利已到来
- android 启动视频,android 启动页面全屏播放视频
- gfortran版本
- python 合成gif与拆分gif为png图片
- git命令行切换到某一个提交版本的分支
- 贝壳找房上海研发全员被优化,公司回应来了!
- Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):