2014 网易互联网在线笔试题

称号:有四个文件,在那里每个文件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

版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/zfyouxi/p/4844709.html