名人博客阅读摘要三:外部排序
2014-07-29 08:40
232 查看
6. 外部排序
6.1 如何给10^7个数据量的磁盘文件排序
(1)位图方案。熟悉位图的朋友可能会想到用位图来表示这个文件集合。例如正如编程珠玑一书上所述,用一个20位长的字符串来表示一个所有元素都小于20的简单的非负整数集合,边框用如下字符串来表示集合{1,2,3,5,8,13}:0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 00 0 0上述集合中各数对应的位置则置1,没有对应的数的位置则置0。
(2)多路归并外部排序方案。
1、内存排序。由于要求的可用内存为1MB,那么每次可以在内存中对250K的数据进行排序,然后将有序的数写入硬盘。那么10M的数据需要循环40次,最终产生40个有序的文件。
2、归并排序。将每个文件最开始的数读入(由于有序,所以为该文件最小数),存放在一个大小为40的first_data数组中;选择first_data数组中最小的数min_data,及其对应的文件索引index;将first_data数组中最小的数写入文件result,然后更新数组first_data(根据index读取该文件下一个数代替min_data);判断是否所有数据都读取完毕,否则返回2。
所以,本程序按顺序分两步,第一步、Memory Sort,第二步、MergeSort。程序的流程图,如下图所示。
相关文章推荐
- 名人博客阅读摘要一:教你如何迅速秒杀掉:99%的海量数据处理面试题
- 名人博客阅读摘要二(Hash算法、HashSet、Bitmap、boomfilter)
- sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
- sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
- Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
- 博客系统开发推送第一季----编写发表博客,并生成阅读摘要
- 败者树 多路平衡归并外部排序 - Dreaming.O的专栏 - 博客频道 - CSDN.NET
- Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
- 开发者是如何提升技能水平的 发表于1小时前| 770次阅读| 来源SquareSpace| 1 条评论| 作者Denis Gobo 开源程序员博客代码编程经验分享 摘要:作为一个技术开发人员,不断的学
- 博客内容摘要及阅读顺序
- 第一周阅读博客摘要
- 阅读摘要
- mysql++ 官方文档阅读简略摘要
- 使用Oracle外部表对大文件排序
- 提高博客阅读体验的六种技巧
- CLR Via C# 3rd 阅读摘要 -- Chapter 26 – Compute-Bound Asynchronous Operations
- 难道我的博客也成了名人博客?
- CLR Via C# 3rd 阅读摘要 -- Chapter 29 – Hybrid Thread Synchronization Constructs
- 近期团队博客的摘要 3
- 一个开源工作者对开源与赚钱的一些想法 发表于2013-01-28 21:22| 16670次阅读| 来源Antirez weblog| 70 条评论| 作者Antirez 开源开源软件 摘要:本文作者