百度面试题
2014-04-18 11:23
246 查看
题目:为分析用户行为,系统常需存储用户的一些query,但因query非常多,故系统不能全存,设系统每天只存m个query,现设计一个算法,对用户请求的query进行随机选择m个,请给一个方案,使得每个query被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用户的总请求量。
解析:
取一个[1,m+i]中的随机数,如果随机数落在(m,m+i]时,应该保留原来的m个数;如果随机数落在[1,m]中,则应该用最新的一条记录取代[1,m]中随机的一个数。
证明如下:
假设现在系统读取第n+1条记录,现在存储的m条记录都是前面m+n条记录中以m/(m+n)的概率留下来的;
取一个[1,m+n+1]的随机数,按照上述策略。
现在新记录能保留在m数组的概率为m/(m+n+1)
原来m数组中的数(设为A)在本轮选择中还能保留的条件概率(条件是,上一轮选择中,A被保留):
(n+1)/(m+n+1)+m/(m+n+1)*(1-1/m)=(m+n)/(m+n+1)。
然后要乘以其原来保留下的概率。得到的A仍在m数组中的概率为m/(m+n+1)。
简单而言就是分为两种情况:
1、原来m数组中的数被替换成功的概率:
就是说这个数本来肯定被选中了,而且被新选择的人一个所替换(但是不包括新添加的那个数,由于新添加,不好加入选择队列)
m/(m+n)*(m+n)/(m+n+1)=m/(m+n+1)
2、原来m数组中的数保留下来的概率:
新的选择情况下选择了[1,m]之间的数但是并没有替换这个数
m/(m+n+1)*(1-1/m)=(m-1)/(m+n+1)
当m<<n的时候,这两个值几乎相等。
解析:
取一个[1,m+i]中的随机数,如果随机数落在(m,m+i]时,应该保留原来的m个数;如果随机数落在[1,m]中,则应该用最新的一条记录取代[1,m]中随机的一个数。
证明如下:
假设现在系统读取第n+1条记录,现在存储的m条记录都是前面m+n条记录中以m/(m+n)的概率留下来的;
取一个[1,m+n+1]的随机数,按照上述策略。
现在新记录能保留在m数组的概率为m/(m+n+1)
原来m数组中的数(设为A)在本轮选择中还能保留的条件概率(条件是,上一轮选择中,A被保留):
(n+1)/(m+n+1)+m/(m+n+1)*(1-1/m)=(m+n)/(m+n+1)。
然后要乘以其原来保留下的概率。得到的A仍在m数组中的概率为m/(m+n+1)。
简单而言就是分为两种情况:
1、原来m数组中的数被替换成功的概率:
就是说这个数本来肯定被选中了,而且被新选择的人一个所替换(但是不包括新添加的那个数,由于新添加,不好加入选择队列)
m/(m+n)*(m+n)/(m+n+1)=m/(m+n+1)
2、原来m数组中的数保留下来的概率:
新的选择情况下选择了[1,m]之间的数但是并没有替换这个数
m/(m+n+1)*(1-1/m)=(m-1)/(m+n+1)
当m<<n的时候,这两个值几乎相等。
相关文章推荐
- n!末尾有几个零---百度面试题
- 百度面试题:从输入url到显示网页,后台发生了什么?
- 百度面试题1
- 百度面试题-- 两个递增数组,找到二者合并后的第K大数
- 从一道百度面试题到分析输入url到页面返回的过程(或者查询返回过程)
- 阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集【转】
- 百度最新面试题集锦
- 从一道百度面试题到分析输入url到页面返回的过程(或者查询返回过程)
- 百度面试题集锦
- 找数2--nkoj3679(百度面试题)
- CSS总结--百度面试题
- 百度面试题:判断两棵树是否相等
- 百度笔试面试题(测试)
- 百度二面,悲剧了,附面试题,欢迎探讨。 - 糖拌咸鱼 - 博客园
- 百度android面试题 .
- 2012百度实习生招聘面试题
- 你要向你8岁的侄子解释什么是数据库,请用三句话完成。 - Google, 谷歌,百度,baidu,阿里巴巴,alibaba,微软,华为,huawei面试题,
- 【牛客访谈】对话何俊林:腾讯百度华为搜狗和滴滴面试题汇总
- 阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集
- 百度笔试面试题整理