您的位置:首页 > 其它

名企笔试:2013 Facebook招聘笔试(查找相同url)

2017-06-16 14:37 465 查看
设计算法
给你a、b两个文件,各存放50亿条url,每条url各占用64字节,内存限制是4G,找出a、b文件共同的url

思路
一个文件中能有50亿条的记录也是够可以的。这题整体上不难,只要学过数据结构的基本上都能明白考点在哪里。

首先内存不够,肯定是将这两个大文件分别有序的粉碎成若干个不同的小文件。

每个文件的大小必须小于2G (两个文件比较,所以单个文件不能超过2G)

然后排序找出相同的url写入另外一个文件中

实现
1.计算出应该分成多少个文件。如果文件分的过多也影响效率的,所以每个文件的大小不能过小,也不能超过2G。
这里举例每个文件的大小为 1000*1000*1000*2 ~ 2G = 2000000000 字节 
50亿 = 5000000000 * 64 = 320000000000 字节
320000000000 / 2000000000 = 160
所以分成160个文件 实际当中应该经过反复的测试调整文件个数

2.使用 hash(url)%160 处理a、b两个文件,分别放入160个不同的文件中(a_0,a_1,...a_159)(b_0,b_1,...b_159)
1个文件中有 320000000000 / 160 / 64 = 31250000 个url 

3.分别对所有文件先进行排序,再去除每个文件中相同的url (相同相近)

4.一一对应的方式提取(a_0, b_0) 提取两个文件中的url放入内存中,先排序再获取相同的url

5.将相同的url写入到另外一个文件中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法