题目:百度面试:
1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,
最多可以从y个小球中找出较轻的那个,求y与x的关系式。
2.有一个很大很大的输入流,大到没有存储器可以将其存储下来,
而且只输入一次,如何从这个输入流中随机取得m个记录。
3.大量的URL字符串,如何从中去除重复的,优化时间空间复杂度
1.解答:
将小球分成三堆:A B C ,如果A == B,那么就在C里面,A<B,在A里面,否则在B里面
x==1 => y==3 x==2 => y==9称一次,把总量缩小到1/3,所以 y=3^x;
2.解答:
http://c.blog.sina.com.cn/profile.php?blogid=eb52001d89000ljl
http://blog.csdn.net/jiyanfeng1/article/details/7937715
都讲的挺好
用大小为m的数组arr[0:m-1]来保存随机抽取的元素,arr[0:m-1]逐步初始化为输入流的前m个元素的一个随机排列。
对于输入流中的第k (k>m)个元素,随机生成一个[0,k-1]区间内的整数i,如果此随机整数i小于等于m,那么就用第k个元素覆盖掉arr[i-1],否则,丢弃第k个元素。
注意,每从输入流中提取一个新元素,我们都要随机生成一个整数,而此整数的有可能出现的范围都要加1.
3.解答:
海量数据处理,如果url个数上亿,那么可以——分而治之/hash映射:遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件,相同的url一定在同一个小文件里面
然后处理每个小文件,可以继续设计hash函数,hash(url)相等时候,判断url是不是一样,将每个小文件中的url去重,最后再将这1000个文件合并