谷歌笔试题:如何随机选取1000个关键字

本文介绍了一种从无限流数据中随机抽取固定数量样本的关键技术。通过算法保证每个元素被选中的概率相等,即使面对无限数据流也能实现公平随机抽样。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字?


首先对于先出现的1000个关键字,肯定都是妥妥的放到数组里,  当n>1000时, 我们要保证第n个关键字被取到的概率是1000/n的机会随机跟前面1000个替换一个 即可以达到随机抽取.

证明:
对于第n个关键字, 以1000/n概率替换到数组中, 所以选取的概率为1000/n

对于数组中的1000 个数据i(i=1-1000),  按照数学归纳法, 在 取到第 n 个关键字时, i在数组中的概率为1000/(n-1) . 
  其不被替换出去的概率为 999/1000 (不是它被替换)*1000/n+ 1-1000/n (n没得到机会替换).  所以第i个关键字留在数组中的概率是:

 1000/(n-1) *[999/1000*1000/n + 1-1000/n] = 1000/n 

  对于每一个n>1000 , 所有关键字都以概率1000/n 留在数组中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值