《编程珠玑》第三部分总结

第三部分讲的是产品,利用前两部分的材料创建出了有趣的程序。

第11章讲述了几个一般用途的排序算法,如插入排序、简单快速排序、更好的快速排序等。

第12章介绍了一个来自实际应用的特定问题(抽样问题),展示了用几种不同的方法解决这个问题。

第13章介绍一种方法及将产生随机数看成是集合表示中的一个问题,涉及到查找问题,通过接口及线性结构等进行程序的优化。

第14章介绍了数据结构,展示了如何为排序优先队列获得高效的算法,重点介绍堆这个数据结构解决问题。

第15章解决了在非常长的文本字符串中查找单词或词组时涉及的几个问题。

时间: 2024-10-11 06:30:17

《编程珠玑》第三部分总结的相关文章

<编程珠玑>笔记(三) 四条原则

第三章作者重在阐述一种编程观念, 即 “data does indeed strcture programs” 这一章貌似没什么干货,只好把作者的几个例子贴出来,反复看看了. 1  A survey program   Total US Citi Perm Visa Temp Visa Male Female African American 1289 1239 17 2 684 593 Mexican American 675 577 80 11 448 219 Native American

《编程珠玑》高清pdf版

下载地址:网盘下载 作者简介 编辑 Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobb's Joumal杂志的特约编辑,他的"编程珠玑"专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上. 目录 编辑 第一部分 基础 第1章 开篇 1.1 一次友好的对话 1.2 准确的问题描述 1.3 程序设计 1.4

《编程珠玑》笔记:数组循环左移

问题描述:数组元素循环左移,将包含 num_elem 个元素的一维数组 arr[num_elem] 循环左移 rot_dist 位.能否仅使用数十个额外字节的存储空间,在正比于num_elem的时间内完成数组的旋转? 一:Bentley's Juggling Alogrithm 移动变量 arr[0] 到临时变量 tmp,移动 arr[rot_dist] 到 arr[0],arr[2rot_dist] 到 arr[rot_dist],依此类推,直到返回到取 arr[0] 中的元素,此时改为从 t

《编程珠玑》第一章

一.题目: 如何在1MB的空间里面对一千万个整数进行排序?并且每个数都小于1千万.实际上这个需要1.25MB的内存空间(这里所说的空间是考虑用位图表示法时,每一位代表一个数,则1千万/(1024*1024*8) 约为1.25MB  ). 1MB总共有838,8608个可用位.所以估计也可以在1MB左右的空间里面进行排序了. 分析: 1)基于磁盘的归并排序(耗时间) 2)每个号码采用32位整数存储的话,1MB大约可以存储250 000 个号码,需要读取文件40趟才能把全部整数排序.(耗时间) 3)

编程珠玑第二章

编程珠玑第二章 A题 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中一32位整数. 1.在文件中至少存在这样一个数? 2.如果有足够的内存,如何处理? 3.如果内存不足,仅可以用文件来进行处理,如何处理? 答案: 1.32位整数,包括-2146473648~~2146473647,约42亿个整数,而文件中只有40亿个,必然有整数少了. 2.如果采用位数思想来存放,则32位整数最多需要占用43亿个位.约512MB的内存空间. 可以采用前一章的位处理方法.然后判断每个in

《编程珠玑》阅读小记(9) — 取样问题

问题 本章研究的问题是取样问题,也就是程序设计中的随机数,问题描述如下: 程序的输入包含两个整数m和n,其中 m < n:输出是0~n-1范围内m个随机整数的有序列表,不允许重复.从概率的角度看,我们希望没有重复的有序选择,其中每个选择出现的概率相等. 条件假设: 我们假设有一个能返回很大的随机整数(远远大于m 和 n )的函数bigrand(),以及一个能返回i-j范围内均匀选择的随机整数的randint(i,j). 本章关于这个问题提供了三种算法,接下来详细叙述每个算法的程序实现. 算法1

JavaScript 编程珠玑 - 《JavaScript: The good parts》总结(2)

一.扩展函数原型的更好办法: // 定义下面的通用方法 Function.prototype.method = function (name, func) {     this.prototype[name] = func;     return this; }; // 使用上面的通用方法作为工具进行扩展,以免每次扩展都访问Function.prototype.XXX (that's ugly). Number.method('integer', function() {     return 

编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈(ZZ)

http://blog.youxu.info/2014/05/11/language-and-vm/ 导言 编程语言的发展历史,总的来说,是一个从抽象机器操作逐步进化为抽象人的思维的过程.机器操作和人的思维如一枚硬币的两面,而语言编译器就像是个双面胶,将这两面粘在一起,保证编程语言源程序和机器代码在行为上等价.当然,人本身并不是一个完美的编译器,不能无错的将思维表达为高级语言程序,这种偏差,即Bug.因为编译器的帮助,我们可以脱离机器细节,只关心表达思维和程序行为这一面. 编程语言的发展日新月异

编程珠玑(一)

这是学习编程珠玑的第一章~ 问题描述: 输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复. 输出:这n个正整数升序排列输出列表 约束:最多1MB的内存空间,有充足的磁盘存储空间可用,运行时间最多几分钟,运行时间为10秒则不需要优化了. 一.多通道实现: 题目中的限制为所有正整数都不重复.这代表: 输入文件中范围在1~249 999的正整数至多只有250 000个,至多占内存为1MB. 输入文件中范围在250 000~499 999的正整数至多只有250

[编程珠玑]如何使用位逻辑来实现位向量

编程珠玑开篇的一道题目是这样的: 如何使用位逻辑运算(如与.或.移位)来实现位向量? 一.何为位向量? 在许多情况下(如对象为满足或不满足某条性质的情况),用一个二进制位就足够表示一个对象了.但是,不能用一个变量名直接表示一个位(不存在单独为一位的数据类型).于是,就考虑将多个位组成一个基本数据类型,通过对这个基本数据类型的操作,达到使用位的方法.同时,为了方便,把由位组成的基本数据类型组成数组,这样,就可以对一定范围的位数据集合进行操作.我们把这种形式的数据结构称为位向量. 接下来,再考虑一点