system design之大数据

前言

为了应对微软的面试,然后看了其他老哥整理的博客,自己也整理一遍,当做是理解,侵删。

有一个无限的整数数据流,如何从中随机地抽取k个整数出来?

这个问题其实还是有点数学的意思在里面的。我们先考虑当k=1的时候,那么如果来一个,咱们就抽这个。如果来俩,那么就有50%的概率,要么换,要么不换。如果又来了一个呢?那也是一样的,先确定换还是不换,换的概率是三分之一。
到这里你有啥问题么?其实很好理解的,咱们做到了对于进来的每一个人,都是每次有n分之一的机会被选中!ohhhhhhhhh!
下面直面K吧。当我需要随机抽取K个数据的时候,那么其实就是类似的道理,先攒够了K个。然后呢,当下一个数据来的时候,依旧是有K/(K+1)的概率选择换掉前面k个数据里面的一个,那么换掉谁呢?也很简单啊,随机呗。这样是不是说,对于新来的第K+1而言,他上场被pick的概率是K/(K+1),而前K个里被pick上场的概率是1/(K+1) + K/(K+1) * ( (K-1)/K ) = K/(K+1)!
ohhhhhhh!
代码实现的话就不写了,就写个思路算了。

如何计算数据流中不同元素的个数?

是不是感觉这种题目都很刁钻?这道题目应该还是很好理解的,我反手就是一个unordered_map,直接pass?当然不可以。如果数据量很大的话,那

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值