http://www.cnblogs.com/luxiaoxun/archive/2012/09/12/2681268.html

http://blog.csdn.net/wangkechuang/article/details/7906540

一、归并

1、内排序
由于要求的可用内存为1MB,那么每次可以在内存中对250K的数据进行排序,然后将有序的数写入硬盘。
那么10M的数据需要循环40次,最终产生40个有序的文件。

2、多路归并排序
(1)将每个文件最开始的数读入(由于有序,所以为该文件最小数),存放在一个大小为40的first_data数组中; 
(2)选择first_data数组中最小的数min_data,及其对应的文件索引index; 
(3)将first_data数组中最小的数写入文件result,然后更新数组first_data(根据index读取该文件下一个数代替min_data); 
(4)判断是否所有数据都读取完毕,否则返回(2)。

二、位图

位图方案。例如正如《编程珠玑》一书上所述,用一个20位长的位字符串来表示一个所有元素都小于20的简单的非负整数集合,边框用如下字符串来表示集合{1,2,3,5,8,13}:
0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 
上述集合中各数对应的位置则置1,没有对应的数的位置则置0。

参考《编程珠玑》一书上的位图方案,针对10^7个数据量的磁盘文件排序问题,可以这么考虑,由于每个7位十进制整数表示一个小于1000万的整数。可以使用一个具有1000万个位的字符串来表示这个文件,其中,当且仅当整数i在文件中存在时,第i位为1。采取这个位图的方案是因为我们面对的这个问题的特殊性:1、输入数据限制在相对较小的范围内,2、数据没有重复,3、其中的每条记录都是单一的正整数,没有任何其它与之关联的数据。
所以,此问题用位图的方案分为以下三步进行解决:
第一步,将所有的位都置为0,从而将集合初始化为空。 
第二步,通过读入文件中的每个整数来建立集合,将每个对应的位都置为1。 
第三步,检验每一位,如果该位为1,就输出对应的整数。

转载于:https://www.cnblogs.com/juandx/p/4083569.html

磁盘文件排序-编程珠玑相关推荐

  1. 对一千万条数据进行排序---编程珠玑第二版 第一章

    本书第一章提出了一个看似简单的问题,有最多1000万条不同的整型数据存在于硬盘的文件中,如何在1M内存的情况下对其进行尽可能快的排序. 每个数字用4byte,1M即可存储250 000个数据,显然,只 ...

  2. 编程珠玑读书笔记之磁盘文件排序

    输入: 所输入的是一个文件,至多包含n个正整数,每个正整数都要小于n,这是 n = 10^7.如果输入时某个整数出现了两次,就会产生一个致命的错误.这些整数与其他任何数据都不关联. 输出: 以增序形式 ...

  3. 编程珠玑--位图法排序

    位图法是<编程珠玑>第一章中出现的磁盘排序算法. 题目:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复.求如何将这n个正整数升序排列. 约束:最多有1 ...

  4. 程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序

    第十章.如何给10^7个数据量的磁盘文件排序 作者:July,yansha,5,编程艺术室. 出处:http://blog.csdn.net/v_JULY_v . 前奏 经过几天的痛苦沉思,最终决定, ...

  5. 《编程珠玑(第2版•修订版)》—第2章2.5节原理

    本节书摘来自异步社区<编程珠玑(第2版•修订版)>一书中的第2章2.5节原理,作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2 ...

  6. 编程珠玑第12章习题

    内容来自互联网,做了一些修改 参考: http://blog.csdn.net/tianshuai1111/article/details/7583297 http://blog.csdn.net/t ...

  7. 编程珠玑第二章习题答案

    转载自互联网,并做了修改 1.提供单词和词典,找到该单词的所有变位词,可以事先花时间和空间处理下该词典. 为了找出给定单词的所有变位词,首先是计算给定单词的标识.如果不允许预处理,只能够顺序读取文件, ...

  8. 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)

    转自:https://www.cse.msu.edu/~liyang5/?p=53 <编程珠玑>在第15章"珍珠字符串"一节,给出了一个非常漂亮的实现 – 基于目标字符 ...

  9. 《编程珠玑(第2版•修订版)》—第2章2.2节无处不在的二分搜索

    本节书摘来自异步社区<编程珠玑(第2版•修订版)>一书中的第2章2.2节无处不在的二分搜索,作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区"公 ...

最新文章

  1. 趋势科技全球首席安全官ED:人类迈向智能社会进程中不能失去掌控力
  2. 运维的shell小编(1)
  3. NHibernate重要概念的解释和说明
  4. Charm Bracelet(0-1)
  5. Detectron-MaskRCnn: 用于抠图的FCNN
  6. 把本地修改的Docker镜像推送到Docker hub
  7. java class文件 代码_java_基础——用代码编译.java文件+加载class文件
  8. kafka java api 删除_Kafka入门系列—6. Kafka 常用命令及Java API使用
  9. Schwarz导数与凹凸性
  10. Scrum:The Definition of Done —— 作业有没有写完呢?
  11. Android手机型号及产品名
  12. 阅读笔记-HTTP返回状态码
  13. pymol 分离蛋白与小分子保存;pymol分离蛋白多聚体亚基;pymol对接位点交互图展示;去除杂原子
  14. 服务器怎么设置自动连接wifi,笔记本无线网络连接IP地址设置(自动获取IP)
  15. 阿里云服务器相关操作
  16. 智能对话之对话管理综述
  17. 1017. Staircases
  18. RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍
  19. 如何对一个顶级域名设置域名解析
  20. C语言—中国古代著名算题。趣味题目:物不知其数。

热门文章

  1. 安装Sql Server 2005 失败一例
  2. Linux命令备忘实例——排序和基本统计命令
  3. Linux安装MYSQL5.7教程(一次成功)
  4. 蓝桥杯 ADV-135 算法提高 三角形面积
  5. L1-044 稳赢-PAT团体程序设计天梯赛GPLT
  6. 一个非常标准的Java连接Oracle数据库的示例代码
  7. shell脚本报错问题: -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory
  8. Fliptile 翻格子游戏[Usaco2007 Open]
  9. Next.js提供了基于React的简单通用JavaScript框架
  10. Chrome 52的变化