输入:

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

输出:

以增序形式输出的经过排序的整数列表。

基本思想:使用一个具有一千万位的字符串表示该文件,在该字符串中,当且仅当整数i在该文件中时,第i个位才打开(设为1)。解决该问题的过程可以分为三个自然阶段。第一个阶段关闭所有的位,将集合初始化为空集。第二个阶段读取文件中的每个整数,并打开相应的位,建立该集合。第三个阶段检查每个位,如果某个位是1,就写出相应的整数,从而创建已排序的输出文件。如果n是向量中位的数目(在本例中是10000000),该程序可以用伪码如下表示:

/*phase 1: initialize set to empty */
for i = [0, n]
    bit[i] = 0;
/*phase 2: insert present elements into the set */
for each i in the input file
    bit[i] = 1;
/*phase 3: write sorted output */
for i = [0,n)
    if bit[i] == 1
         write i on the output file

原则:

位图数据结构 此数据结构代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。即使不滞这些条件(例如存在多重元素或额外数据时),也可以使用有限域中的键作为表索引(表具有更复杂的条目)

多通道(Multiple-Pass)算法 这些算法具有多个输入数据的通道,每读一次就向完成前进一步。

时间和空间的权衡 二者不可偏废。

简单的设计 与复杂程序相比,简单程序通常要更加可靠、安全、健壮和有效些,构建和维护时也要更加容易一些。

Technorati Tags: 编程珠玑,算法,排序,磁盘排序

转载于:https://www.cnblogs.com/jcleung/archive/2011/05/12/2044069.html

编程珠玑读书笔记之磁盘文件排序相关推荐

  1. 《FPGA并行编程》读书笔记专栏启动说明

    <FPGA并行编程>读书笔记专栏启动说明 1. <FPGA并行编程>内容简介 2. 专栏内容简介 3. 开启专栏目的 4. 专栏内容安排 5. 专栏时间安排 6. 相关资料下载 ...

  2. JAVA编程思想读书笔记(三)--RTTI

    接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...

  3. 《C#高级编程》读书笔记

    本文已同步发表在博客园:http://www.cnblogs.com/davidsheh/p/5236686.html C#类型的取值范围 访问限制符 修饰符 应用于 说明 public 所有类型或成 ...

  4. C语言编程精髓读书笔记(怎样有效地使用断言和避免自由主义编码)

    从网景公司那个首席黑客口中,我终于知道了还有这本书,这本书老实说,比我看到的所有C语言书都新颖和独特,一看就知道是大牛(微软首席架构师)写的书 谭浩强之辈该学习学习了 以下是这本书我写的读书笔记,望有 ...

  5. Java编程思想读书笔记(七)

    点击蓝字 关注我们 今天是端午节,在这里祝大家端午节安康.过节的同时也不要忘记知识储备,今天我 为大家带来了Java编程思想第七节多形性读书笔记.请大家一起品鉴,如果发现里面有啥写的不对的地方,请大家 ...

  6. [C++]《Windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

  7. 《编程珠玑》笔记3 数据结构选择

    这一章主要讨论良好的数据结构对程序的重要影响 1.调查程序:问题的关键是决定怎样用数组来存储哪些数据. 格式信函编程:(更像是脚本程序所使用的形式) 对于一段应用较多的程序,只有个别变量与外界输入有关 ...

  8. JAVA编程思想——读书笔记 对象的容纳

    文章目录 对象的容纳 1.数组(array) 数组和第一类对象 基本数据类型集合 数组的返回 2.集合(collection) 集合的缺点:类型未知 它不适用于一下场合: 1.错误有时显露不出来 生成 ...

  9. Java 并发编程艺术 读书笔记

    第 1 章 并发编程的挑战 1.1.3 如何减少上下文切换 减少上下文切换的方法有无锁并发编程.CAS 算法.使用最少线程和使用协程. 无锁并发编程.多线程竞争锁时,会引起上下文切换,所以多线程处理数 ...

最新文章

  1. CentOS 5.6 修改国内网易163高速源
  2. 【STM32】SYSTEM文件夹介绍,delay,sys,usart
  3. 自我认为挺全面的【Web Service渗透测试总结】
  4. 高一数学集合知识点整理_高一数学 | 高一数学函数图像知识点总结,实用!
  5. PaddlePaddle实现波士顿房价预测
  6. java标记错误_标记电子邮件Java时出错
  7. 听说Unscrambler HSI是个很牛的光谱分析软件?
  8. 自动化运维平台-OpManager
  9. 修复谷歌浏览器翻译插件无法使用的问题
  10. [源码解析]ESPnet脚本源码解析-aishell-asr.sh
  11. mac风扇控制_如何监视和控制Mac的风扇
  12. 19间断点的判别与分类
  13. python爱意满满_抖音ohbaby你就是我最想要的是什么歌 歌曲分享
  14. 攻城掠地服务器维护到几点,攻城掠地玩法全解秘
  15. SpringBoot2-6 Web1-静态资源 默认4个目录,特别是resources 目录, webjars引入和内部资源访问,注意其内部resources目录 HandlerMapping
  16. android gta5 下载地址,gta5 for android
  17. 苹果手机点击输入框页面自动放大
  18. 我的Java春季历程,思维导图+源代码+笔记+项目
  19. pandas获取数据集数据类型分布(更细粒度的分割)
  20. 照片尺寸大小怎样换算?

热门文章

  1. 常用音频软件:Wavesufer
  2. 单片机小白学步系列(十) 单片机程序下载相关知识
  3. 在FSM模型中使用两态数据类型
  4. java 使用string_java中string怎么使用
  5. 台式计算机计量单位,计算机的计量单位以及常见的数据类型
  6. mysql 视图 查询速度慢_mysql 视图查询速度慢
  7. Unity URP高度雾效果Shader
  8. C# int[,] 和 int[][]
  9. java word文档生成目录_JAVA合并word文档生成目录
  10. hive币2021年预计涨到多少_比特币突破4万美元,比特币2021年会涨到多少?