2014年网易互联网在线笔试题一道
2014-09-19 21:26
211 查看
题目:有四个文件,每个文件中存有100万个int型整数,内存限制1M,该如何最优地得到四个文件的交集数,也就是在四个文件都出现的数的个数?
我的想法:因为内存限制1M,也就是1024*1024个字节,小于一个文件中所有数所占的存储100 0000*4,所以文件中的数没办法一次装到内存。采用外部排序、归并等方法实现。
具体:
1、最开始应该是对每个大文件进行外部排序,也就是n次从大文件中取出一部分数在内存中进行快速排序或堆排序,然后将结果存入小文件中,存入小文件的同时去重;
2、然后对n个小文件进行归并排序,将已排序结果存入新的大文件。这样能得到四个没有重复数的新的大文件;
3、接下来对这四个已排序的文件,设为f1,f2,f3,f4进行类似归并操作,两个指针一开始指向f1与f2的头部,值不相等的“丢掉”,相等的存入新的文件f12,f3,f4进行一样操作得到f34文件,再对这两个文件进行上诉操作,得到最终结果文件result,同时可以得到其个数。
我发了个帖子收集各位的算法,有的用bitmap实现,有的用多趟遍历实现,各位可以看看还有什么优化的方法。
http://bbs.csdn.net/topics/390889640
我的想法:因为内存限制1M,也就是1024*1024个字节,小于一个文件中所有数所占的存储100 0000*4,所以文件中的数没办法一次装到内存。采用外部排序、归并等方法实现。
具体:
1、最开始应该是对每个大文件进行外部排序,也就是n次从大文件中取出一部分数在内存中进行快速排序或堆排序,然后将结果存入小文件中,存入小文件的同时去重;
2、然后对n个小文件进行归并排序,将已排序结果存入新的大文件。这样能得到四个没有重复数的新的大文件;
3、接下来对这四个已排序的文件,设为f1,f2,f3,f4进行类似归并操作,两个指针一开始指向f1与f2的头部,值不相等的“丢掉”,相等的存入新的文件f12,f3,f4进行一样操作得到f34文件,再对这两个文件进行上诉操作,得到最终结果文件result,同时可以得到其个数。
我发了个帖子收集各位的算法,有的用bitmap实现,有的用多趟遍历实现,各位可以看看还有什么优化的方法。
http://bbs.csdn.net/topics/390889640
相关文章推荐
- 网易互联网2017在线笔试题目-魔力手环
- 网易互联网2015 在线笔试(1)
- 2014 网易互联网在线笔试题
- 魔力手环-网易互联网2017在线笔试题目
- 网易互联网2015 在线笔试(1)
- 网易互联网2015 在线笔试(2)
- 网易互联网2015 在线笔试(2)
- [互联网面试笔试汇总C/C++-12] 哈希表冲突解决办法-网易游戏
- 试题:网易笔试的一道题目
- 网易的一道笔试题的参考解法---关于广告牌投放问题
- 电子数字 网易游戏在线笔试 第一题 hihocoder
- 【实习笔试面试题】2013网易互联网实习笔试算法题-找出最大连续自然数个数
- 网易互娱2017实习生招聘在线笔试第一场题目解析
- 2015.09.13 网易游戏在线笔试(运营开发工程师)
- 网易互联网笔试题(多年)
- 微软2014年在线笔试题前两题
- 一道网易笔试题
- 网易游戏2016实习生招聘在线笔试之连连看
- 2014年阿里巴巴在线笔试题-第3大题-公共最长字符串长度
- 网易互娱2017实习生招聘在线笔试(一)