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


设计算法
给你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写入到另外一个文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值