亚线性空间算法-水库抽样算法
来源:互联网 发布:相对不确定度的算法 编辑:程序博客网 时间:2024/04/29 04:59
1.算法描述
1)输入:一组数据,其大小未知
2)输出:这组数据的k个均匀抽样
3)要求:
a、仅扫描数据一次
b、空间复杂性为O(k)
c、扫描到数据的前n个数字时(n>k),保存当前已扫描数据的k个均匀抽样
2.Java实现
package org.XX.com;
import java.util.*;
//水库调水抽样算法
public class Water {
//定义抽样数组大小
private static int array_size;
//定义抽样数据大小
private static int data_size;
public static void main(String[] args){
Random rd = new Random(); //生成随机数
Scanner input = new Scanner(System.in);
//抽样数据集
ArrayList<Integer> al_set = new ArrayList<Integer>();
//抽样数据数组
ArrayList<Integer> al_num = new ArrayList<Integer>();
System.out.println("请输入数组大小:");
array_size = input.nextInt();
System.out.println("请输入抽样数据数量:");
data_size = input.nextInt();
System.out.println("请输入全部数据:");
//从输入的所有数据中选择data_size个样本数据,将抽样数据集保存到抽样数据集当中
for(int i= 0 ;i< data_size; i++){
al_set.add(input.nextInt());
}
//初始化抽样数据数组
for(int i = 0 ; i < array_size; i++){
al_num.add(0);
}
//从抽样数据当中选择array_size个抽样样本
for(int i = 1 ;i <= data_size; i ++ ){
int temp = al_set.get(i-1);//获取样本数据集数据
int rand = rd.nextInt(i);//得到0-i的随机数据,而且必须要i>0
if( rand< array_size){
al_num.set(rand, temp);
}
}
//输出抽样数据数组的数据
for(int i = 0 ; i < array_size; i++){
System.out.println(al_set.get(i));
}
}
}
3.算法分析
性质1:该采样是均匀,概率为array_size/data_size
性质2: 空间复杂性是O(k),与抽样样本大小有关
- 亚线性空间算法-水库抽样算法
- 亚线性空间算法-水库抽样算法
- 大数据算法-空间时间亚线性算法举例(水库抽样,平面图直径)
- 水库抽样算法
- 空间亚线性算法
- 水库抽样算法精简总结
- 大数据算法MOOC笔记3:水库抽样Reservoir Sampling(蓄水池问题)
- 抽样算法
- 大数据算法学习笔记(3):亚线性算法概述
- 水库抽样问题
- 简单抽样算法介绍
- 随机抽样算法
- 蓄水池抽样算法
- 抽样率转换算法
- 蓄水池抽样算法
- 蓄水池抽样 分类: 算法
- 随机抽样一致性算法
- Sampling 蓄水池抽样算法
- iOS 显示HTML文本
- android中怎么把控件隐藏
- 0基础学C#教程3--------winform中的vs工具箱不见了,怎么重新调出来?
- 欢迎使用CSDN-markdown编辑器
- java代码中实现android背景选择的selector-StateListDrawable的应用
- 亚线性空间算法-水库抽样算法
- 数据库五大约束
- 通过微信分享链接,后面被加上from=singlemessage&isappinstalled=1导致网页打不开
- LintCode: 带环链表 II
- python_笔记_unicode
- Netty in Action (二十二) 第十一章节 第二部分 Netty提供的一些原生Handler和codecs
- IOS数组相关
- MD5 16与32位
- linux中root密码忘记如何修改