名企笔试: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写入到另外一个文件中
给你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写入到另外一个文件中
相关文章推荐
- 阿里巴巴2013最新笔试题(查找树中相同节点对)
- 华为2013校园招聘上机笔试题-对源字符串中的字符串进行查找替换
- 谷歌2013校园招聘笔试题心得(附答案)
- 阿里巴巴2013实习生招聘笔试题
- 奇虎360 2013校园招聘笔试题
- 360 2013校园招聘笔试题(含参考答案)
- Microsoft 2013校园招聘笔试题及解答
- 【面试题】数码视讯---2013校园招聘---笔试题
- 华为2013校园招聘上机笔试题-整数转换成字符串
- 百度2013校园招聘笔试题(欢迎高手给予指点)
- 百度2013校园招聘笔试题
- 阿里巴巴2013实习招聘笔试题5月19日
- 2013百度笔试 求字符串中连续出现相同字符的最大值
- 厦门亿联网络2013校园招聘C++软件工程师笔试题(2012-10-17)
- 【校园招聘】2013百度软件研发笔试题
- 名企笔试:网易游戏2017招聘笔试题(调整队形)
- 2013豆瓣校园招聘研发类笔试题-A卷
- 2013校园招聘java笔试题
- 腾讯2013校园实习生招聘笔试题,附答案
- 网易2013校园招聘笔试题详解