本文主要是介绍第八十四题 (百度面试题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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频度对这十个文件进行外部排序。
这篇关于第八十四题 (百度面试题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!