水库抽样算法(大数据算法作业)
时隔一个多月,终于想起来写大数据算法基础的实验报告,主要是快截止了,hh
这两天加急把这个报告写完了~
接下来,写一写证明过程(参考书籍:高等教育出版社《数据科学与工程算法基础》)主要代码以及总结体会o(* ̄▽ ̄*)ブ
本次实验主要设计三块内容,分别是水库抽样算法(当水库大小为1时),水库抽样算法(当水库大小为k>1时)以及分布式水库抽样算法
水库抽样算法
主要证明过程

主要Python代码
水库抽样算法(返回一个)
import randomdef sampling_single(stream):reservoir = stream[0]i = 1for i, item in enumerate(stream):j = random.randint(0, i)if j < 1:reservoir = itemreturn reservoir F = [i for i in range(100)]H = sampling_single(F)
print(f"Randomly sampled element: {H}")
水库抽样算法(返回多个)
import randomdef reservoir_sampling(stream, k):reservoir = []for i, item in enumerate(stream):if i < k:reservoir.append(item)else:j = random.randint(0, i)if j < k:reservoir[j] = itemreturn reservoirdata_stream = [i for i in range(100)]sampled_data = reservoir_sampling(data_stream, 10)
分布式水库抽样算法
主要证明过程
一个Hadoop任务Sample由 n 个 Map 组成,其中每个 Map 都接受到一个数据流 Substream,当这些数据无法完全保存在内存时,如何随机地抽取一个含有 k 条记录的样本(每条记录被抽中的概率相同),于是,这就引出了分布式水库抽样算法(分层水库抽样 + 重抽样 = 分布式水库抽样算法)
先在每个 Map 上独立运行水库抽样算法,之后对 n 个子样本就行重抽样,获得满足要求的最终结果。

主要 Python 代码
import randomdef reservoir_sampling(stream, k):reservoir = []for i, item in enumerate(stream):if i < k:reservoir.append(item)else:j = random.randint(0, i)if j < k:reservoir[j] = itemreturn reservoirdef distributed_sampling(n, k, stream):N = []F = []H = []for i in range(n):F.append(reservoir_sampling(stream, k))N.append(len(F[i]))total_N = sum(N)for j in range(k):p = random.random()m = 0cumulative_N = 0while cumulative_N < p * total_N :cumulative_N += N[m]m += 1H.append(random.choice(F[m-1]))return Hn = 15
k = 10
data_stream = [i for i in range(100)]
H = distributed_sampling(n, k, data_stream)
print("Final Sample H:", H)
总结
水库抽样技术归根到底就是在总体容量未知的情况下,仅通过单遍扫描数据集便能生成等概率抽样集合的一种均匀抽样技术。
代码或许很简单,但是其中的数学知识以及思想方法是很值得学习的!
相关文章:
水库抽样算法(大数据算法作业)
时隔一个多月,终于想起来写大数据算法基础的实验报告,主要是快截止了,hh 这两天加急把这个报告写完了~ 接下来,写一写证明过程(参考书籍:高等教育出版社《数据科学与工程算法基础》)主要代码以…...
SHCTF-2024-week1-wp
文章目录 SHCTF 2024 week1 wpMisc[Week1]真真假假?遮遮掩掩![Week1]拜师之旅①[Week1]Rasterizing Traffic[Week1]有WiFi干嘛不用呢? web[Week1] 单身十八年的手速[Week1] MD5 Master[Week1] ez_gittt[Week1] jvav[Week1] poppopop[Week1] 蛐蛐?蛐蛐! SHCTF 2024…...
docker-comapose安装部署mysql
docker-comapose安装部署mysql version: "3.4" services:mysql:image: docker.das-security.cn/middleware/mysql:8.4.1container_name: mysqlenvironment:- MYSQL_ROOT_PASSWORD密码volumes:- /etc/localtime:/etc/localtime- ./configs/mysql/initdb:/docker-entr…...
C语言初阶-数据类型和变量【下】
紧接上期------------------------->>>C语言初阶-数据类型和变量【上】 全局变量和局部变量在内存中存储在哪⾥呢? ⼀般我们在学习C/C语⾔的时候,我们会关注内存中的三个区域: 栈区 、 堆区 、 静态区 。 内存的分配情况 局部变量是…...
C++:命名空间(namespace)详细介绍与案例
命名空间(namespace)是C中的一个重要概念,用于组织代码和避免名称冲突。它们允许程序员将标识符(如变量、函数、类等)组织在一起,以便在较大的程序中防止命名冲突。 1. 基本概念 命名空间的基本定义方式如…...
专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结
目录 1. 找出所有⼦集的异或总和再求和(easy) 解析: 方法一: 解法二: 总结: 2. 全排列 Ⅱ(medium) 解析: 解法一:只关心“不合法”的分支 解法二&…...
java中Runnable接口是什么?基本概念、工作原理、优点、`Runnable`与`Thread`的对比、与`Callable`接口的对比、实际场景
Runnable接口是Java提供的一种用于实现多线程的接口,通常用来定义任务的具体逻辑。与Thread类不同,Runnable接口只提供一种抽象方法run(),没有任何与线程的生命周期、管理相关的功能。它的主要作用是与Thread类或线程池(如Executo…...
Mybatis Plus连接使用ClickHouse也如此简单
通过阅读列式数据库ClickHouse官网,不难看出它有支持JDBC规范的驱动jar包,可以直接集成到Object Relational Mapping框架等,下面我用SpringBootMybatisPlus环境连接ClickHouse来演示一下 集成步骤 1.Maven引入ClickHouse提供的JDBC依赖 <…...
什么社交平台可以找到搭子?分享多款找搭子必备的人气软件
在这个丰富多彩的世界里,我们常常渴望有一个志同道合的搭子,一起分享生活的点滴,共同探索未知的领域。无论是追寻美食的舌尖之旅,还是踏上充满惊喜的旅途;无论是在健身房挥洒汗水…… 找到一个合适的搭子,都…...
STM32 RTC实时时钟 F407 寄存器
RTC介绍 STM32F1: RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。 即在F1系列,RTC的日历部分只有一个32位的寄存器 该寄存器直接存放 时间戳 的值,即࿱…...
矩阵等价、向量组等价、线性方程组同解与公共解的关系
矩阵等价 矩阵 A 、 B 等价 ⇔ 两矩阵秩相等 R ( A ) R ( B ) ⇔ 每个矩阵的行秩等于列秩,两个矩阵的行秩与列秩分别相等 ⇔ 若行满秩则列向量组等价 ⇔ 若列满秩则行向量组等价 \begin{align} 矩阵A、B等价\\ &\Leftrightarrow 两矩阵秩相等R(A)R(B)\\ &\…...
[Linux] Linux 进程程序替换
标题:[Linux] Linux 进程程序替换 个人主页水墨不写bug (图片来源于网络) 目录 O、前言 一、进程程序替换的直观现象(什么是进程程序替换?) 二、进程程序替换的原理 三、进程程序替换的函数(…...
【Linux系统编程】第三十一弹---深入理解静态库:从零开始制作与高效使用的完全指南
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、静态库 1.1、怎么做静态库 1.2、怎么使用静态库 1、静态库 1.1、怎么做静态库 在Linux环境下,通常使用GCC&am…...
FFmpeg 简介及其下载安装步骤
目录 一、FFmpeg 简介 二、FFmpeg 安装步骤 2.1 打开官网 2.2 选择FFmpeg系统版本 2.3 下载FFmpeg压缩包 2.4 将下载好的压缩包进行解压 2.5 设置环境变量 2.5.1 在搜索栏中搜索【环境变量】,然后单击将其打开 2.5.2 找到系统变量中的【Path】,点…...
使用CSS+SVG实现加载动画
使用CSSSVG实现加载动画 效果展示 CSS知识点 SVG元素使用SVG相关CSS属性运用 整体页面布局 <section><div class"box"><div class"loader"><svg><circle cx"40" cy"40" r"40"></circl…...
物联网(IoT)的未来发展:智能互联时代的到来
物联网(IoT)的未来发展:智能互联时代的到来 物联网(IoT)正在迅速改变我们与世界互动的方式。无论是智能家居、智慧城市,还是工业自动化,物联网技术通过设备互联、数据采集和智能控制࿰…...
斯坦福 CS229 I 机器学习 I 构建大型语言模型 (LLMs)
1. Pretraining -> GPT3 1.1. Task & loss 1.1.1. 训练 LLMs 时的关键点 对于 LLMs 的训练来说,Architecture(架构)、Training algorithm/loss(训练算法/损失函数)、Data(数据)、Evalu…...
Java->排序
目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…...
linux 大小写转换
var"TM_card_INFo" # 把变量中的第一个字符换成大写 echo ${var^} # 把变量中的所有小写字母,全部替换为大写 echo ${var^^} # 把变量中的第一个字符换成小写 echo ${var,} # 把变量中的所有大写字母,全部替换为小写 echo ${var,,} 参考…...
Linux——传输层协议
目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…...
Llama-3.2V-11B-cot多场景:科研论文插图理解、工程图纸解析、UI截图分析
Llama-3.2V-11B-cot多场景应用:科研论文插图理解、工程图纸解析、UI截图分析 1. 模型概述 Llama-3.2V-11B-cot是一款基于LLaVA-CoT论文实现的视觉语言模型,具备强大的图像理解和系统性推理能力。该模型采用MllamaForConditionalGeneration架构…...
实时手机检测-通用部署指南:3步完成环境搭建与模型调用
实时手机检测-通用部署指南:3步完成环境搭建与模型调用 1. 环境准备与快速部署 1.1 系统要求 操作系统:Linux/Windows/macOS(推荐Ubuntu 20.04)Python版本:3.7-3.10GPU支持:NVIDIA显卡(可选&…...
Numpy第十章 统计相关
一.次序统计1.计算最小值 numpy.amin()函数功能:返回数组或沿指定轴的最小值。函数:numpy.amin(a[, axisNone, outNone, keepdimsnp._NoValue,alnp._NoValue, wherenp._NoValue])参数:a:输入数组。axis&…...
Ext2Read:终极Windows读取Linux分区解决方案,3分钟快速上手
Ext2Read:终极Windows读取Linux分区解决方案,3分钟快速上手 【免费下载链接】ext2read A Windows Application to read and copy Ext2/Ext3/Ext4 (With LVM) Partitions from Windows. 项目地址: https://gitcode.com/gh_mirrors/ex/ext2read 你是…...
CMake vs. MsBuild vs. Ninja:C++编译工具链全解析(附Windows平台实战示例)
CMake vs. MsBuild vs. Ninja:C编译工具链全解析(附Windows平台实战示例) 在C开发的世界里,构建工具的选择往往决定了项目的可维护性和跨平台能力。当你在Windows平台上打开Visual Studio时,背后默默工作的可能是MsBui…...
BlackArch Linux 完全指南:渗透测试专家的终极武器库
BlackArch Linux 完全指南:渗透测试专家的终极武器库 【免费下载链接】blackarch An ArchLinux based distribution for penetration testers and security researchers. 项目地址: https://gitcode.com/gh_mirrors/bl/blackarch BlackArch Linux 是基于 Arc…...
别再只盯着RTK了!聊聊GNSS/INS组合导航里,紧耦合如何用1颗卫星‘吊住’你的定位
1颗卫星的逆袭:紧耦合技术如何在极端环境下守护你的定位精度 想象一下,你正驾驶一辆L4级自动驾驶汽车穿越曼哈顿的钢铁森林。高楼间的"城市峡谷"让GPS信号时断时续,传统导航系统已经开始报警——"卫星信号丢失"。但你的车…...
使用Yolo 11进行定制化图像识别全流程
全流程预览 Label Studio标注 → 导出YOLO格式 → 编写data.yaml → 拆分数据集 → 模型训练 → 预测部署步骤工具/技术产出物数据标注Label Studio标注好的图片数据导出YOLO with imagesimages/ labels/配置文件data.yaml数据集配置数据拆分Python脚本train/val/test模型训练…...
探索ROCm:从基础到实践的完整路径
探索ROCm:从基础到实践的完整路径 【免费下载链接】ROCm AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/ROCm ROCm(Radeon Open Compute)是AMD推出的开源GPU计算平台,为高性能计算…...
threejs 加载glb模型时DRACOLoader的正确配置与常见错误解析
1. 为什么需要DRACOLoader? 在Three.js中加载glb/gltf模型时,经常会遇到模型文件过大的问题。这是因为很多3D建模工具(如Blender)在导出时会使用Draco压缩算法来减小文件体积。这种压缩虽然能显著减少模型大小(通常能…...
