面试题[数学与概率]: 从数据流中随机选取样本

数据流基本问题---采样问题 在数据流处理中的一个常见问题就是数据采样问题。我们希望从流中选择一个子集,以便能够对它进行查询并给出统计性上对整个流具有代表性的结果。 一、蓄水池采样 具体问题是我们要从数据流中随机抽取k个元素。如果数据流长度m事先已经知道,那这个问题就非常简单,每个元素以k/m的概率选取即可。但这个问题要求m未知,那就不太好搞了。这个问题的解法是保存一个k大小的窗口。数据流的前k个元素依次加入到窗口。对于数 阅读详情

题目:输入一段int型数据流,输入未完成之前并不知道数据流的长度,要求在O(1)空间复杂度的前提下随机选出一个元素,并保证每一个元素被选中的概率是一样的。

我的解法如下:

假如输入的数据流依次是10、20、30、40、……

收到10时:以概率1选择10;
收到20时:以概率1/2选择10,以概率1/2选择20;
收到30时:以概率2/3选择上一次选到的元素,以概率1/3选择30;
收到40时:以概率3/4选择上一次选到的元素,以概率1/4选择40;
……
收到第N个数时:以概率(n-1)/n选择上一次选到的元素,以概率1/n选择当前元素。

进阶题:那么如何等概率选取k个数呢?

解法类似,先以概率1选取前k个数,然后:
对于第k+1个数,以k/(k+1)的概率选择它,如果被选中,则随机替换原来的k个数中的一个;
对于第k+2个数,以k/(k+2)的概率选择它,如果被选中,则随机替换原来的k个数中的一个;
……
对于第N个数,以k/N的概率选择它,如果被选中,则随机替换原来的k个数中的一个。

面试题— —从很长的数据流等概率随机采样的两种实现方法 从很长的数据流等概率随机采样 “给出一个数据流,这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等。” 在搜索引擎等相关领域也会被问到哦 假设数据流长度为n,那么我们希望数据流中的每个数据都是以 1/n 的概率返回。 相关题目: 382. 链表随机节点 398. 随机数索引 不合适的但容易想到的两种方法: 直观的做法是生成一个 1-n 的随机数 i,代表我们想取第 i 个数据。但是这个前提是我们知道了数据流的长度。通常来说,数据 阅读详情

相关推荐

【ros】ROS1的安装和相关使用方法

主要学习ros相关内容

Greary的博客 2379

面试题 从很长的数据流等概率随机采样 蓄水池抽样 Reservoir Sampling

题目:有一个网页抓取器每秒钟抓取一个网页,定义一个API,每次调用的时候要等概率的从目前已经抓取的网页中随机选取一个,应该怎么实现?分析:这题题目定义有一定迷惑性,最直接的思路貌似应该是先保存当前采集到的所有网页,然后随机采样,这显然不是这题的考点。这题想只用O(1)的空间。其实就等价于有一个很长的数据流,数据量大到无法载入内存,怎么做随机等概率采样?容易想到的思路是产生一个0到1之间的随机数,然

Coding for Dreams 1万+

MAX96717实战:如何选择Host-to-Peripheral和Pass-Through I2C模式?附配置代码

本文深入解析MAX96717芯片的两种关键I2C模式:Host-to-Peripheral与Pass-Through。通过对比其核心差异、硬件连接考量及软件配置代码,为嵌入式开发者提供了清晰的模式选择策略与实战指南,帮助优化系统设计并避免常见通信故障。

weixin_29190573的博客 462

从数据流中随机选择m个数的算法

百度笔试题目:为分析用户行为,系统常需存储用户的一些query,但因query非常多,故系统不能全存,设系统每天只存m个query,现设计一个算法,对用户请求的query进行随机选择m个,请给一个方案,使得每个query被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用户的总请求量。   方法一: 前m个直接存 对后面来的每个数据a[i](i > m), 随机生成一个(1..i)之

xingdebocqyz的专栏 1465

声品质粗糙度matlab,声品质的应用分析方法

声品质的应用分析方法2016-04-05 09:18:57阅读次数:14198摘要:声品质分析在噪声的主观评价方面已经得到越来越多的应用。本文比较了声品质分析与传统计权声级的区别,并介绍了在声品质分析的实际应用中,针对稳态信号、非稳态信号的几种不同分析方法,以及各分析方法的要求和特点。关键词:声品质,响度,尖锐度,粗糙度,波动度1前言传统评价噪声的方法主要为计权声压级,用以反映声音的大小。但是人耳...

weixin_30767323的博客 2438

langchain入门学习笔记

langchain快速入门

1734

等概率数字筛选问题

如何等概率的从N个元素中选取出K个元素? 从1....n中随机输出m个不重复的数。(迅雷2011.10.21笔试题) 算法1 knuth(int n, int m) { for (int i=0; i<n; i++) { if ( rand_n()<m ) // rand_n()为生成[0,n)这个区间内的随机数

nwpulei 4448

PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化

接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。

weixin_41106546的博客 9万+

java从流里筛选数据_详解java8中的Stream数据流

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到...

weixin_39596739的博客 1533

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 681

Python 爬虫实战:破解网页 JS 混淆加密参数

摘要:本文针对Python爬虫破解JS混淆加密参数的技术难题,系统解析了变量混淆、控制流混淆、AES/MD5加密混淆等常见类型及其检测方法,提出"定位-还原-复现"的三步破解策略。通过实战案例详细演示了从JS逆向分析到Python代码实现的完整流程,包括MD5签名生成、AES加密复现等核心代码实现,并对不同混淆场景的破解方法进行了对比分析。文中特别强调技术应用的合规性边界,指出开发者应遵守相关法律法规,在合理范围内使用逆向技术。随着反爬技术升级,建议开发者持续学习动态调试等进阶技能,同时

2503_91057718的博客 2067

随机洗牌算法

问题:给定一个有序序列1~n,要你将其完全打乱,要求每个元素在任何一个位置出现的概率均为1/n。 解决方案:依次遍历数组,对第n个元素,以1/n的概率与前n个元素中的某个元素互换位置,最后生成的序列即满足要求,1/n的概率可通过rand() % n实现。见如下程序: void swap(int* p, int* q) {     int tmp = *p;     *p = *q;  

moleng_56的专栏 901

AI硬件加速:CPU vs GPU性能对比

AI硬件加速:CPU vs GPU性能对比 关键词:人工智能、硬件加速、CPU、GPU、性能对比、硬件架构、并行计算、优化策略、项目实战 摘要: 本文将深入探讨AI

AI天才研究院 1914

九章算法面试题17 从输入流中随机取记录

有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中等概率随机取得m个记录。

九章算法的博客 1075

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

随机洗牌

问题:给定一个有序序列1~n,要你将其完全打乱,要求每个元素在任何一个位置出现的概率均为1/n。 解决方案:依次遍历数组,对第n个元素,以1/n的概率与前n个元素中的某个元素互换位置,最后生成的序列即满足要求,1/n的概率可通过rand() % n实现。见如下程序: void swap(int* p, int* q) {     int tmp = *p;     *p = *q;  

GNU'S Not Unix 360

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

网上整理的google面试题

1.1024! 末尾有多少个0?末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。是5的倍数的数有: 1024 /5 = 204个是25的倍数的数有:1024 /25 = 40个(25是5*5 所以包含25的包括了两个5)

关注云计算 2533

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从未知大小的n个数中取m个数,使各数被取出的概率相等

本文摘自http://www.zhangliancheng.com/2012/09/random-selecting-numbers-from-unknown-length-interger-sequence/,感谢作者。 首先,这个问题来自于一道面试题。 原题目的场景大体是这样的: 服务器每天会收到数以亿计的请求,但是目前服务器端不希望保存所有的请求,只想随机保存这些请求中的m个。

码农谈算法 6350

设计一个随机洗牌的算法

问题:给定一个有序序列1~n,要你将其完全打乱,要求每个元素在任何一个位置出现的概率均为1/n。 解决方案:依次遍历数组,对第n个元素,以1/n的概率与前n个元素中的某个元素互换位置,最后生成的序列即满足要求,1/n的概率可通过rand() % n实现。见如下程序: void swap(int* p, int* q) {     int tmp = *p;     *p = *q;  

tingting14054765的专栏 2202

Google面试题[一]

Google面试题[一] 谷歌是不少IT人都想去的企业,那么在进入公司前,少不了面试笔试的测试。那么这里我们就总结了如下谷歌笔试题,并提供了一些参考答案。希望对您有用。 谷歌笔试题:判断一个自然数是否是某个数的平方。当然不能使用开方运算。 假设待判断的数字是 N。 方法1: 遍历从1到N的数字,求取平方并和N进行比较。 如果平方小于N,则...

bianchengjingling22的博客 99

Reservoir Sampling - 蓄水池抽样问题

问题起源于编程珠玑Column 12中的题目10,其描述如下:   How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would yo...

weixin_34056162的博客 131

面试题

微软 面试题:地球上有多少个满足这样条件的点 站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点? 北极点满足这个条件。 距离南极点很近的一个圈上也满足这个条件。在这个圆圈上,向南走一公里,然后向东走一公里恰好绕南极点一圈,向北走一公里回到原点。 所以地球上总共有无数点满足这个条件。 谷歌面试题:判断一个自然数是否是某个数的平...

微赚开发者技术分享博客 856

[转]海量数据随机抽样问题(蓄水池问题)

随机抽样问题表示如下: 要求从N个元素中随机的抽取k个元素,其中N无法确定。 这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。所以搜索网站有时候会问这样的问题。 这里的核心问题就是“随机”,怎么才能是随机的抽取元素呢?我们设想,买彩票的时候,由于所有彩票的中奖概率都是...

weixin_30722589的博客 82

LeetCode题解随笔:数学运算技巧

LeetCode题解随笔:数学运算技巧 题目参考:labuladong

weixin_44114160的博客 730
上一篇: 面试题[堆排序]: 二维数组的Top(N)
下一篇: 面试题[hash_map、字典树与倒排索引]: 全文检索
chfe910
博客等级 码龄14年 56粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值