第八十四题 (百度面试题)

2010 年3 道百度面试题[相信,你懂其中的含金量]

1 a~z 包括大小写与0~9 组成的N 个数, 用最快的方式把其中重复的元素挑出来。

2.已知一随机发生器,产生0 的概率是p,产生1 的概率是1-p,现在要你构造一个发生器,使得它构造0 和1 的概率均为1/2;构造一个发生器,使得它构造1、2、3 的概率均为1/3;...,构造一个发生器,使得它构造1、2、3、...n 的概率均为1/n,要求复杂度最低。

3.有10 个文件,每个文件1G,
每个文件的每一行都存放的是用户的query,每个文件的query 都可能重复。
要求按照query 的频度排序.

思路:

1.要求采用最快的方法,使用hash即可

2.随机发生器产生00,01,10,11的概率分别为p*p,p*(1-p),(1-p)*p,(1-p)*(1-p),产生01,10序列的概率是相同的,因此可以在产生01序列的时候构造0,在产生10序列的时候构造1,00,11序列直接丢弃,这样就可以产生等概率的0,1序列。既然可以产生等概率的0,1序列,那么使用产生的等概率的01序列来表示的数,如00,01,10,也是等概的,概率同样都是1/3,因此要构造概率均为1/n的数字1,2,3..n,直接用产生的等概率01序列构造即可。

3.10个文件,每个1G,不能完全存入内存中,因此每次只读取一个文件,对每个进行hash操作,记录每个query出现的频度,根据hash(query)%10的结果将记录存入到十个小文件中,然后再根据query频度对这十个文件进行外部排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值