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

输入:

所输入的是一个文件,至多包含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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

辨别文件的真实类型

2019独角兽企业重金招聘Python工程师标准>>> 参考博客http://blog.csdn.net/shixing_11/article/details/5708145 每个文件类型都对应着一个编码头部 下面这些是已知的文件头部[自定义的枚举类型] package org.masque.file; /*** * Description:文件对应的文件头,资…

ng build --prod --aot打包Angluar4项目报javaScript heap out of memory,内存溢出

这里 Allocation failed - JavaScript heap out of memory JavaScript堆内存不足,我们都知道 Node 是基于V8引擎,在一般的后端开发语言中,在基本的内存使用上没有什么限制,但是我去查阅了相关的资料才发现,在 Node 中通…

GARFIELD@12-02-2004

your BELLY is more ready to be convinced than your BRAIN 转载于:https://www.cnblogs.com/rexhost/archive/2004/12/02/72000.html

LeetCode—223. 矩形面积

223. 矩形面积 题目描述: 给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2)…

Spring Android 1.0.0.M3 发布

Spring Android 项目今天发布了第三个里程碑版本。 Spring Android 是一个在 Android 环境下使用 Spring 框架的项目,M3 版本主要是为 Android 应用扩展了对 Spring Social 的支持,包括: 通过全新的 Spring Android Auth 模块支持 Spring Soc…

几种开源工作流引擎的简单比较(转)

摘要:目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他…

LeetCode—224. 基本计算器(困难)

224. 基本计算器(困难) 题目描述: 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()。 考察重点:使用go建立…

LBS业务资料随记

技术规范:设备技术要求,SP Access接口规范,GIS结构规范、L1接口规范、地图标准规范、终端规范 一个小型的ArcIMS网站 http://www.geo-spatial.net/csk/Downloads/default.aspx 基于位置的业务 。。随着用户移动终端设备的普及,简…

shell 和 || 的短路使用

shell && 和 || 的短路使用 && 和 || 在 shell 中分别表示 and 和  or,和其它语言类似,这两个操作有短路效应。也就是说,当判断式已经确定时,不再继续处理后续表达式。 && 在失败时中断, || …

XiaoKL学Python(C)__future__

__future__ in Python 1. from __future__ import xxxx 这是为了在低版本的python中使用可能在某个高版本python中成为语言标准的特性,从而 在将代码由低版本迁移到高版本的过程中,减少需要做的工作。 这种语句被称为 future_statement 2. future_state…

LeetCode—227. 基本计算器 II

227. 基本计算器 II 题目描述: 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意:不允许使用任何将…

GARFIELD@01-31-2005

savage sandwich 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/31/99836.html

js 和 query 获取页面和滚动条的高度

//页面位置及窗口大小 function GetPageSize() {var scrW, scrH; if(window.innerHeight && window.scrollMaxY) { // Mozilla scrW window.innerWidth window.scrollMaxX; scrH window.innerHeight window.scrollMaxY; } else if(document.body.scrollHe…

【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送

公众号:SAP Technical本文作者:matinal原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送前言部分 大家可以关注我的公众号,公众号里的排版更好&…

[Mac]一些命令技巧

Git相关 mac下git默认不区分大小写,通过下面脚本可以改变 #!/bin/bash# 让git区分大小写 cd path-of-project git config core.ignorecase false git不会将空文件夹添加到版本控制中,下面脚本可以让空文件夹加到git # 将所有空文件夹添加到git cd path-o…

GARFIELD@02-24-2005

a cat on a ball 转载于:https://www.cnblogs.com/rexhost/archive/2005/02/25/109153.html

LeetCode—229. 求众数 II

229. 求众数 II 题目描述&#xff1a; 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 考察重点&#xff1a;设超过 ⌊ n/3 ⌋ 次的元素有a个&#xff0c;则一定有 ⌊ n/3 ⌋ * a < n。即这种元素至多存在2个。 先用摩尔投票法求出最…

c2c网站源码

c2c网站源码是一套由网畅™(68ws.com)基于PHPMySQL技术的Web电子商务程序。c2c网站源码的主要功能有&#xff1a;采用了缓存更新处理&#xff0c;积木式查询显示&#xff0c;后台HTML模板管理&#xff0c;c2c网站源码首页商品和店铺的自助推荐功能&#xff0c;支持拍卖模式&…

网站总结 和 相关控件 总结

2019独角兽企业重金招聘Python工程师标准>>> 学习篇 https://github.com/Aufree/trip-to-iOS 开源库 http://github.ibireme.com/github/list/ios/ 项目管理和工具 测试&#xff1a;TestFlight 依赖管理&#xff1a;CocoaPods 自动生成推送证书&#xff1a;Gen…

西门子新款A系列手机【ZZ】

linked from http://www.tompda.com/neirong.asp?id809 西门子新款A系列手机   首页 > 新闻资讯 提交 shizhi 2005-2-25  阅读:2739次 10篇评论 西门子公司近日推出了A系列手机&#xff0c;A系列手机作为入门级手机&#xff0c;设计和功能十分简洁和实用。 西门子A70:设…