免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8339 | 回复: 5
打印 上一主题 下一主题

[算法] 经典面试题:蓄水池抽样;及Google搜索之星分析 [复制链接]

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
1 [报告]
发表于 2013-07-30 09:36 |只看该作者
明白,牛B                           

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-07-30 13:08 |只看该作者
编程之美上的。

论坛徽章:
0
3 [报告]
发表于 2013-07-30 13:32 |只看该作者
牛!谁的计数能撑到最后,就是多数元素

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
4 [报告]
发表于 2013-07-31 09:06 |只看该作者
分析:

由于N无法确定,数据只能读取一次,并且要求随机,就是每个元素抽出的概率一样,都是k/N。

面试的时候,经常会在纸上通过一个小的例子来找到好的解决方案。比如先让你从100个元素中等概率抽取出10个元素。后来又向集合中添加了20个元素,变成了120个元素等概率抽取10个,怎么样才能随着N的动态改变而让N无论等于多少时这N个元素都等概率被抽取呢?

解法一:最小k个指纹
找到一个哈希函数能产生随机数,同时用一个k个元素的堆用来保存最小的k个元素。那么过一遍所有的元素,计算每个的哈希值,通过堆来选择k个元素。
这个算法看起来很精妙,会有什么问题吗?(思考)

解法二:数学计算
先选中前k个, 从第k+1个元素到最后一个元素为止, 以1/i  (i=k+1, k+2,...,N) 的概率选中第i个元素, 并且随机替换掉一个原先选中的元素, 这样遍历一次得到k个元素, 可以保证完全随机选取。
看来简单的算法,怎么能确保每个元素被选中的概率是k/N?
任意元素G在i轮留下来的概率:
P(G留下) = P(G已经存在) * P(G没有被替换)
        = P(G已经存在) * (1 - P(G被替换))
        = P(G已经存在) * (1 - P(第i个元素要替换某个元素) * P(某个元素是G))
        = (k/i) * (1 - (k/(i+1)) * (1/k))
        = (k/i) * (1 - (1/(i+1)))
        = (k/i) * (i/(i+1))
        = (k/(i+1))
证毕!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP