现在的位置: 首页 > 综合 > 正文

Q9.4外排序

2018年04月29日 ⁄ 综合 ⁄ 共 512字 ⁄ 字号 评论关闭

外排序


外排序是一种处理海量数据的排序手段,在不爆内存的前提下完成大量数据的排序处理。以下面CTCI的一道题为例:

题目:如果你有个2GB的文件,其中每一行是一个字符串,你会使用哪种算法来排序,为什么?


解答:显然不可能一次性将该文件读入内存,然后来个qsort, heap_sort。于是想到利用硬盘(外存储)。


1. 读100M from 2GB,写到某个临时文件,如1.dat。循环此步,直到将2GB文件拆分成1.dat、2.dat、``` 21.dat;

2. 拿100M内存来实施这个归并排序。将这100M的内存拆分 (21 + 1) 份,其中“21”对应为输入缓冲区,

   "1"对应输出缓冲区;

3. 21个输入缓冲区各自插个管子到21个dat,1个输出缓冲区插个管子到写出文件(sorted);

4. 分别从1.dat~21.dat 读入数据将 21 个输入缓冲区填满,阔以联想开闸放水。对这21个输入缓冲区的数据多路
            归并,
结果放入输出缓冲区;

5.
哪路输入缓冲区空了就再从对应.dat文件读满,输出缓冲区满了就写出结果文件;

6.
.dat文件读空了就拔掉管子,21个.dat文件都拔掉管子后,将输出缓冲区里的数据全部写出(如果有);

7.
完毕。

【上篇】
【下篇】

抱歉!评论已关闭.