大数据排序等问题

 

10^n个整数(亿级)的排序

http://weibo.com/1261807775/profile

1.多路归并排序

2.bitmap排序 (要求无重复数据)

扩展:对bitmap扩展后还可以查看数据是否有重复。思路:两位代表一个数据,0表示未出现,1表示出现一次,2表示出现多次。

关于本章中位图和多路归并两种方案的时间复杂度及空间复杂度的比较,如下:

             时间复杂度       空间复杂度

位图        O(N)              0.625M

多位归并  O(Nlogn)        1M   

(多路归并,时间复杂度为Ok*n/k*logn/k),严格来说,还要加上读写磁盘的时间,而此算法绝大部分时间也是浪费在这上面)

2bit-map

适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int10倍以下

基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码

扩展:bloom filter可以看做是对bit-map的扩展

问题实例:

1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

8位最多99 999 999,大概需要99mbit,大概10m字节的内存即可。

2)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map

3[外排序适用范围]大数据的排序,去重基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树扩展。问题实例:1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词。这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1mhash有些不够,所以可以用来排序。内存可以当输入缓冲区使用。

posted on 2013-10-29 09:50  redSunflower  阅读(1356)  评论(0编辑  收藏  举报

导航