大文件排序的问题(一)

题目

内存只有1G,有一个10G的文件,里面保存的是UUID(固定48位),需要对UUID排序

快速排序的空间复杂度

被快速排序所使用的空间,依照使用的版本而定。使用原地(in-place)分割的快速排序版本,在任何递归调用前,仅会使用固定的額外空間。然而,如果需要产生log n嵌套递归调用,它需要在他们每一个存储一个固定数量的信息。因为最好的情况最多需要log n次的嵌套递归调用,所以它需要log n的空间。最坏情况下需要O(n次嵌套递归调用,因此需要O(n)的空间。

拆分

  • 如果不考虑快速排序的空间复杂度,每个拆成1G,如果考虑,每个拆成500M,这里没有严格的定量计算
  • 是边拆边排序,还是拆完在排序,建议通过缓冲区边拆边排序
  • 这两点其实都不是本题的重点,下面的合并才是重点

合并

  • 很早之前我们都做个两个有序链表,合并为一个新的有序链表,但是这道题还需要我们合并设置文件的偏移量和缓冲区
  • 1G的空间在不考虑临时空间的条件下,我们分成三个部署,两个250M的待合并文件的缓冲区,一个500M的合并完文件的缓冲区
  • 这两个250M缓冲区的数据合并就和链表的合并是一个意思了,设置两个指针遍历就行
  • 现在从20个500M的文件变成1G的文件和18个500M的文件,按照之前的步骤再次合并就行
  • 是不是需要每次需要从最小的开始,完全没有必要
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Hive是基于Hadoop的一个数据仓库工具。通过hive,我们可以方便地进行ETL的工作。Hive定义了一个类似...
    CLOcean阅读 7,575评论 0 1
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,541评论 11 349
  • 排序 内部排序:全部数据可同时放入内存进行的排序。 外部排序:文件中数据太多,无法全部调入内存进行的排序。 插入...
    北风知我意阅读 4,683评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 9,819评论 0 13
  • 感觉自己有点神经衰弱,总是觉得手机响了;屋外有人走过;每次妈妈不声不响的进房间突然跟我说话,我都会被吓得半死!一整...
    章鱼的拥抱阅读 6,653评论 4 5

友情链接更多精彩内容