首页 > 编程语言 >蓄水池抽样算法

蓄水池抽样算法

时间:2022-11-03 20:58:27浏览次数:38  
标签:10 抽样 .. mut 蓄水池 use 算法 let total

不一次性将数据读入内存,只遍历一次数据即可等概率抽取子集数据,真是神奇。

测试例子:

0到99一百个数字中随机抽取10个数,每个数被抽到概率1/10;重复1000次抽样,结果统计每个数字被抽到的次数为 1000 * 1/10 = 100 次左右。

use rand::Rng;
use std::collections::BTreeMap;
use rand::prelude::*;
use rand_pcg::Pcg64;


fn main() {
    let mut total = Vec::new(); // 总数据集
    for x in 0..100 { total.push(x); }
    let mut rng = Pcg64::seed_from_u64(11); // 随机种子
    let n = 10; // 取10个数
    let mut bt = BTreeMap::new();
	
	/// 1000次抽样测试
    for _ in 0..1000 {
        let mut get = vec![];
        for i in 0..n { get.push(i as i32); }

        for t in n..total.len() {
            let ret:usize  = rng.gen_range(0..=t);
            if ret < n {
                get[ret] = total[t];
            }
        }
		
        // 结果统计
        for x in get.iter() {
            *bt.entry(*x).or_insert(0) += 1;
        }
    }

    for (k,v) in bt {
        println!("{}->{}",k,v);
    }
}

结果:

image

计数结果每个数字次数基本都在100次左右。

标签:10,抽样,..,mut,蓄水池,use,算法,let,total
From: https://www.cnblogs.com/mmtinfo/p/16855785.html

相关文章

  • 逻辑回归算法实验
    实验二:逻辑回归算法实验| 20大数据三班 ||作业链接||学号|201613326|【实验目的】理解逻辑回归算法原理,掌握逻辑回归算法框架;理解逻辑回归的sigmoid函数;理解......
  • 【数据结构与算法】有向图的拓扑排序
    前言在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的。以我们学习java学科为例,我们需要学习很多知识,但是这些知识在学习的过程中是需要......
  • [Java--常见排序算法]------冒泡、选择、快速排序
    java常用的排序算法(冒泡、选择、快速等)一、冒泡排序法(效率最低)直接在代码中说明,他们可以直接在程序中运行//冒泡排序@TestpublicvoidtestBublle(){/***冒泡排序的基本......
  • RSA加密算法
    RSA加密算法5分钟了解RSA加解密算法:https://zhuanlan.zhihu.com/p/365330981验证数据完整性:私钥签名-公钥验签;消息加密:公钥加密-私钥解密;......
  • NLP算法工程师面试题及复习资料
    机器学习AI算法工程  公众号:datayx本文主要记录本人对NLP相关知识的积累,之前笔记做的很多,考虑到秋招已至,在复习的过程中,慢慢将这些知识屡清楚,然后将相关的知识笔记整......
  • 力扣 二叉树 算法+题目 整理
    二叉树基础包括三种遍历,建树和遍历的方法。二叉树遍历力扣144,94,145二叉树前中后序遍历使用递归或者迭代空间复杂度都是o(n),而通过morris遍历则可以达到o(1),其介绍......
  • Boyer-Moore投票算法
    算法简介在一个数组中,存在一个众数,众数的数量要大于数组大小的一半。设计时间复杂度为O(n),空间复杂度为O(n)的算法:在数组中找出该众数。该算法维护了两个变量:候选人......
  • raft算法(分布式一致性算法)
    一、概要Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实......
  • 算法题--从尾到头打印链表
    5要求时间限制:1秒空间限制:32768K题目描述输入一个链表,从尾到头打印链表每个节点的值解题思路链表必须要从头开始访问,如果需要将打印顺序颠倒,可以利用栈的特性。有时......
  • 代码随想录算法训练营第八天|344、反转字符串|541、反转字符串Ⅱ|剑指Offer 05、替换
    344、反转字符串·两两交换给字符串翻个面doge题目链接:https://leetcode.cn/problems/reverse-string/submissions/思路:首尾交换代码实现:     时间复杂度O(n......