洗牌算法、蓄水池抽样算法

洗牌算法 
 

应用场景 Link

  1. 知道数组的长度N
  2. 将数组随机打散

算法实现

  1. 按照下标 i 从后向前遍历,在 [0, i] 随机选择一个下标 rand_idx
  2. 将 arr[rand_idx] 与 random_i[i] 进行交换

代码实现 

void shuffle(vector<int>& arr) {for (int i = arr.size()-1; i >= 0; i--){int rand_idx = rand() % (i+1); // [0,i] 随机选择下标swap(arr[i], arr[rand_idx]);   // 交换}
}

力扣

  • 384 打乱数组

算法推理(见下图)

蓄水池抽样算法

应用场景:在长度为N的数据流中,等概率选取M个数 (N > M)

  • N的长度未知,是一个数据流

算法实现

  1. 初始化蓄水池M:
    1. 将前M个元素,放入蓄水池 for (i=0; i<M; i++) pool.push(arr[i])
    2. 那么,蓄水池存放的下标范围: [0, M-1]
  2. 下标 i 从第M+1个元素,继续向后遍历
    1. 在 [0, i] 随机选择一个下标 rand_idx
    2. 如果 rand_idx 的下标在蓄水池存放的下标范围内,即:rand_idx ∈ [0, M-1],则:将当前元素random_i[i] 与 蓄水池中的元素 arr[rand_idx] 交换

代码实现

/** @brief 蓄水池抽样算法: 在数据流data[n]中, 等概率选出m个数据* @param   [in] nums  数据流* @param   [in] n     数据流中数据总个数* @param   [in] m     采样数据总个数* @return 采样到m个数据*/
vector<int> Sampling(vector<int> nums, int n, int m) {// 前m个元素,构成蓄水池vector<int> pool;for (int i=0; i<m; i++) {pool.push_back(nums[i]);}// 后m个元素for (int i=m; i<n; i++) {int rand_idx = randIdx(0, i); // 返回[0,i]中的随机下标if (0 <= rand_idx < m) { // 如果idx是在蓄水池中,则交换swap(nums[i], nums[rand_idx]);}}// 蓄水池中的数据,就是等概率选出来的m个数return pool;
}

力扣

  • 382链表随机节点
  • 398 随机数索引
  • 497 非重叠矩形中的随机点
  • 519 随机翻转矩阵

算法推理(见下图)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681402.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 docker-compose 搭建个人博客 Halo

说明 我这里使用的是 Halo 作为博客的工具&#xff0c;毕竟是开源了&#xff0c;也是使用 Java 写的嘛&#xff0c;另外一点就是使用 docker 来安装&#xff08;自动挡&#xff0c;不用自己考虑太多的环境因素&#xff09;&#xff0c;这样子搭建起来更快一点&#xff0c;我们…

刷!简单的转录组分析+Cytoscape三小时工作量,思路易复现

说在前面 两样本孟德尔随机化应该大伙都了解的不少&#xff0c;不过今天看到一篇&#xff0c;有点“料”的文章&#xff0c;一句话总结&#xff1a;Cytoscape乱拳打死老师傅&#xff0c;通篇除了WGCNA、差异分析是作为常规的转录组分析方法&#xff0c;剩下的几乎都是ClueGO的…

Idea + maven 搭建 SSH (struts2 +hibernate5 + spring5) 环境

org.apache.struts struts2-core 2.3.35 org.apache.struts struts2-spring-plugin 2.3.35 org.apache.struts struts2-json-plugin 2.3.8 1.4 配置Java EE 坐标依赖 这里可以引入 servlet api&#xff0c;jstl 标签库等一系列工具 javax.servlet javax.servlet-api …

FPGA控制3步进电机驱动芯片和1直流电机驱动,用于工业打印控制

客户应用&#xff1a;DIY打印 主要功能&#xff1a; 1.支持触摸屏控制 2.支持WIFI无线控制 3.支持USB接口 4.支持网线有线控制 5.支持非标定制 6.支持光电感应接口 7.支持喷印材质木板&#xff0c;纸箱&#xff0c;石材&#xff0c;中纤板&#xff0c;钢材&#xff0c;管…

抖音APP运用的AI技术拆解

1.推荐系统&#xff08;RS&#xff09; 用户画像&#xff1a;根据用户的信息&#xff08;如地区、性别、年龄、收藏、关注......&#xff09;进行分析&#xff0c;构建用户画像&#xff0c;对用户进行分类&#xff1b; 行为分析&#xff1a;将用户的显形行为数据&#xff08;如…

(2024,DONN,OCNN,复数域,交替的非线性激活层与振荡器层,复值反向传播)深度振荡神经网络

Deep Oscillatory Neural Network 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 方法 2.1 深度振荡神经网络&#xff08;DONN&#xff09; 2.2 振荡卷积神经网…

200-500人规模工厂网络方案(中小企业网络)

一、方案概述 网络方案有一套&#xff0c;工厂生产更高效&#xff01;华为坤灵SOHO助力中小企业打造高品质工厂网络 #华为坤灵SOHO #让中小企业网络更智能 统一规划: 一网承载有线、无线、财务、办公、访客等业务&#xff0c;便于维护管理和后续扩容 高品质无线: Wi-Fi6智能…

十四五”智慧城市:视频大数据汇聚系统2.0建设方案与特点分析

一、背景需求分析 随着科技的不断发展&#xff0c;智慧城市的建设已经成为城市发展的重要方向。视频汇聚系统作为智慧城市建设的重要组成部分&#xff0c;已经得到了广泛的应用和推广。视频汇聚系统是智慧城市中非常重要的组成部分&#xff0c;它利用摄像头和传感器技术来收集…

【读点论文】SAM-LIGHTENING: A LIGHTWEIGHT SEGMENT ANYTHING MODEL,改进自注意力机制,然后知识蒸馏提点

SAM-LIGHTENING: A LIGHTWEIGHT SEGMENT ANYTHING MODEL WITH DILATED FLASH ATTENTION TO ACHIEVE 30 ACCELERATION ABSTRACT 分割任意模型&#xff08;SAM&#xff09;由于其零样本泛化能力&#xff0c;在分割任务中引起了广泛的关注。然而&#xff0c;SAM在现实世界实践中…

AI智能化逐渐趋于成熟后,预测今后最吃香的开发职业

AI智能化正在成熟的路途中&#xff0c;这中间会有波折&#xff0c;但终有一天会来的&#xff0c;我相信等到了这一天&#xff0c;我们的开发效率和代码质量&#xff0c;将会大大不同&#xff0c;而我们的团队与个人&#xff0c;也会面临着很棒的体验。 那么在AI智能化真正趋于成…

CSS伪类选择器

目录 前言&#xff1a; 链接伪类&#xff1a; 用户行为伪类&#xff1a; 元素状态伪类&#xff1a; 结构化伪类&#xff1a; 否定伪类&#xff1a; 目标伪类&#xff1a; 输入伪类&#xff1a; 前言&#xff1a; 在CSS中有一种特殊的选择器&#xff1a;伪类选择器&…

MySQL——变量的浮点数问题处理

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常&#xff0c;会有很多00000的提示set resultdxdy; select result; 查询结果