码迷,mamicode.com
首页 > 编程语言 > 详细

大文件小内存排序问题

时间:2021-04-13 12:30:46      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:png   节点   建立   图片   相对   使用   比较   二叉树   时间复杂度   

比如外存中有100G的字符串文件,1G的内存,对字符串进行排序操作。
1.首先将100G的内容分成若干个小部分,每个部分不超过500MB。分别读取这些小部分进行排序,然后写入到外存中。这样就得到了若干个已经排好序的小部分。
2.多路归并排序,(相对二路归并而言)。对于k个已经排好序的小部分,每次取出它们各自的最小值,找到最小值中的最小值,写入到外存,同时将最小值所在外存区域指针向右移动。
每次比较最小值需要比较k-1次,总共有n-1轮,所以时间复杂度为O((n-1)*(k-1))。
这里还可以使用胜者树(完全二叉树)优化找最小值的过程。对第一次的查找建立一颗胜者树,如下所示:
技术图片
找到最小值后,读取最小值所在外存区域的新值,然后修改胜者树对应节点的值,沿着从该结点到根结点的路径修改这棵二叉树,最多操作log(k)次。这样总体排序的时间复杂度就可以降为O(nlogk)。

大文件小内存排序问题

标签:png   节点   建立   图片   相对   使用   比较   二叉树   时间复杂度   

原文地址:https://www.cnblogs.com/ningbing/p/14651127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!