编程珠玑 II
分類: 图书,计算机/网络,程序设计,其他,
作者: (美)本特利(Bentley,J.)著;钱丽艳等译
出 版 社: 人民邮电出版社
出版时间: 2008-10-1字数: 289000版次: 1页数: 186印刷时间: 2008/10/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787115176066包装: 平装编辑推荐
历史上最伟大的计算机科学著作之一;融深邃思想、实战技术与趣味轶事于一炉的奇书;带你真正领略计算机科学之美。
“《编程珠玑》第1版是对我职业生涯早期影响最大的书之一,其中的许多真知灼见多年之后仍然使我受益匪浅。Jon在第2版中对素材进行了大量更新,许多新内容让我耳目一新。”
——Steve McConnell,软件工程大师,IEEE Software前主编。《代码大全》作者“对每一位遇到的程序员,我都会毫不迟疑地建议他阅读并不断重读这部经典之作。”
——Slashdot
多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上最受欢迎的专栏,最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。本书为第二卷,秉承了第一卷的风格,但本书涉及的范围更广,包括文档、小语言、性能监视、图形输出等。
在书中,作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和总结了许多独特而精妙的设计原则、思考和解决问题的方法以及实用程序设计技巧。每章后所附习题极具挑战性和启发性,书末给出了简洁的解答。
内容简介
本书是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容结合成一个有机的整体,如一串串珠玑展示给程序员。本书适合各级程序员阅读参考。
作者简介
Jon Bentley,世界著名计算机科学家,被誉为影响算法发展的十位大师之一。他先后任职于卡内基—梅隆大学(P976-1982)、贝尔实验室(1982—2001)和Avaya实验室(2001年至今)。在卡内基—梅隆大学担任教授期间,他培养了包括Tcl语言设计者John Ousterhout、Java语言设计者James Gosling、《算法导论》作者之-Charles Leiserson在内的许多计算机科学大家。2004年荣获Dr.Dobb’S程序设计卓越奖
目录
第一部分 编程技术
第1章 性能监视工具
1.1 计算素数
1.2 使用性能监视工具
1.3 一个专用的性能监视工具
1.4 开发性能监视工具
1.5 原理
1.6 习题
1.7 深入阅读
第2章 关联数组
2.1 Awk中的关联数组
2.2 有穷状态机模拟器
2.3 拓扑排序
2.4 原理
2.5 习题
2.6 深入阅读
第3章 程序员的忏悔
3.1 二分搜索
3.2 选择算法
3.3 子程序库
3.4 原理
3.5 习题
第4章 自描述数据
4.1 名字—值对
4.2 记录来历
4.3 排序实验
4.4 原理
4.5 习题
第二部分 实用技巧
第5章 劈开戈尔迪之结
5.1 小测验
5.2 解答
5.3 提示
5.4 原理
5.5 习题
5.6 深入阅读
5.7 调试(边栏)
第6章 计算机科学箴言集
6.1 编码
6.2 用户界面
6.3 调试
6.4 性能
6.5 文档
6.6 软件管理
6.7 其他
6.8 原理
6.9 习题
6.10 深入阅读
第7章 粗略估算
7.1 头脑热身
7.2 性能的经验法则
7.3 Little定律
7.4 原理
7.5 习题
7.6 深入阅读
7.7 日常速算(边栏)
第8章 人员备忘录
8.1 备忘录
8.2 原理
8.3 深入阅读
第三部分 人性化I/O
第9章 小语言
9.1 Pic语言
9.2 视角
9.3 Pic预处理器
9.4 用来实现Pic的小语言
9.5 原理
9.6 习题
9.7 深入阅读
第10章 文档设计
10.1 表格
10.2 三条设计原则
10.3 插图
10.4 文本
10.5 合适的媒介
10.6 原理
10.7 习题
10.8 深入阅读
10.9 次要问题目录(边栏)
第11章 图形化输出
11.1 实例研究
11.2 显示结果取样
11.3 原理
11.4 习题
11.5 深入阅读
11.6 拿破仑远征莫斯科(边栏)
第12章 对调查的研究
12.1 有关民意调查的问题
12.2 语言
12.3 图片
12.4 原理
12.5 习题
第四部分 算法
第13章 绝妙的取样
13.1 取样算法一瞥
13.2 Floyd算法
13.3 随机排列
13.4 原理
13.5 习题
13.6 深入阅读
第14章 编写数值计算程序
14.1 问题
14.2 牛顿迭代
14.3 良好的起点
14.4 代码
14.5 原理
14.6 习题
14.7 深入阅读
14.8 数值算法的力量(边栏)
第15章 选择
15.1 问题
15.2 程序
15.3 运行时间分析
15.4 原理
15.5 习题
15.6 深入阅读
附录A C和Awk语言
附录B 一个子程序库
部分习题答案
索引
书摘插图
第一部分 编程技术
第2章关联数组
人类学家说,语言深刻地影响了世界观。一般把这个观察结果称为“Whorf假说”,也经常把它总结为“语言塑造了人的思想”。
跟大多数程序员一样,我使用的Algol系列的语言塑造了我的计算思维。对于像我这样的程序员来说,PL/1、C和Pascal看起来都很相似,我们不难把这样的代码翻译成COBOL或Fortran的代码。用这些语言能轻易地表达我们旧的、习以为常的思维模式。
另外一些语言则挑战了我们对于计算的看法。我们感到惊奇的是:Lisp用户们用S表达式和递归来神奇地工作,APL迷们用一组长向量的外积来为世界建模,Snobol程序员把任何问题都变成一个很大的字符串。我们这些Algol系列的程序员可能会发现,研究这些“异族文化”是痛苦的,但是这种体验一般会增长我们的见识。
本章讨论Algol传统之外的一种语言特性:关联数组(associative array)。我们熟悉的数组都用数值作下标,而关联数组则允许像count[“car”]这样的引用。这样的数据结构出现在Snobol和Rexx(一种IBM命令解释器)这样的语言中,它允许我们用简单的程序宋表达复杂的算法。这些数组与Algol相似到可以很快被理解的程度,又新到足以挑战我们思维习惯的程度。
本章将讨论Awk语言提供的关联数组。虽然Awk的大多数成分都来生Algol传统,但是关联数组和其他几个特性还是值得研究的。下面这一节介绍Awk的关联数组;后续几节描述两个重要的程序,这两个程序用大多数Algol系列的语言来写都是很麻烦的,却可以用Awk优雅地表达出来。
……