相信大家或多或少都看过一些算法类的面试题,其中比较常出现的就有大数据排序问题。因为目前的内存仍无法处理TB级的数据,只能通过不同的算法优化以及I/O来进行尽可能快速的排序。
对于这类题目,我总结了以下几种排序方法,同时也提出了自己的一些疑问,希望大家可以一起讨论。这里只讨论nlogn级别的算法,其他的不列入讨论范围。
题型:亿级别数据(同型且有重复),统计其中出现次数最多的前N个数据
两种情况:可一次读入内存,不可一次读入
解法:
一、区间快速排序(当某个区间的长度=N则输出排序区间)
二、堆排序(维护N个结点的堆结构)
三、哈希映射(用hash将大文件映射为小文件,依次进内存排序后输出)
四、trie树
五、位图 (Bit Map)
所谓的是否能一次读入内存,实际上应该指去除重复后的数据量。如果去重后数据可以放入内存,我们可