分享
 
 
 

编程珠玑(第2版)

编程珠玑(第2版)  点此进入淘宝搜索页搜索
  特别声明:本站仅为商品信息简介,并不出售商品,您可点击文中链接进入淘宝网搜索页搜索该商品,有任何问题请与具体淘宝商家联系。
  參考價格: 点此进入淘宝搜索页搜索
  分類: 图书,计算机/网络,程序设计,其他,

作者: (美)本特利(Bentley,J.)著;黄倩、钱丽艳译

出 版 社: 人民邮电出版社

出版时间: 2008-10-1字数: 354000版次: 1页数: 228印刷时间: 2008/10/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787115179289包装: 平装编辑推荐

历史上最伟大的计算机科学著作之一,融深邃思想、实战技术与趣味轶事于一炉的奇书,带你真正领略计算机科学之症状。

“《编程珠玑》第1版是对我职业生涯早期影响最大的书之一,其中的许多真知灼见多年之后仍然使我受益匪浅。Jon在第2版中对素材进行了大量更新,许多新内容让我耳目一新。”

——Steve McConnell,软件工程大师,IEEE Software前主编,《代码大全》作者“对每一位遇到的程序员,我都会毫不迟疑地建议他阅读并不断重读这部经典之作。”

——Stashdot

多年以来。当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺。计算机科学大量Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上最受欢迎的专栏,最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。

在书中。作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和总结了许多独特而精妙的设计原则、思考和解决问题的方法以及实用程序设计技巧。解决方案的代码均以C/C++语言编写。不仅有趣。而且有很大的实战示范意义。每章后所附习题极具挑战性和启发性,书末给出了简洁的解答。

作者简介:

Jon Bentley,世界著名计算机科学家,被誉为影响算法发展的十位大师之一。他先后任职于卡内基-梅隆大学(1976-1982)、贝尔实验室(1982-2001)和Avaya实验室(2001年至今)。在卡内基-梅隆大学担任教授期间,他培养了包括Tcl语言设计者John Ousterhout、Java语言设计者James Gosling、《算法导论》作者之- Charles Leisersond在内的许多计算机科学大家。2004年荣获Dr.Dobb's程序设计卓越奖。

内容简介

本书是计算机科学方面的经典名著。书的内容围绕程序设计人员面对的一系列实际问题展开。作者Jon Bentley 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路。本书对各个层次的程序员都具有很高的阅读价值。

目录

第一部分基础

第1章开篇

1.1一次友好的对话

1.2准确的问题描述

1.3程序设计

1.4实现概要

1.5原理

1.6习题

1.7深入阅读

第2章啊哈!算法

2.1三个问题

2.2无处不在的二分搜索

2.3基本操作的威力

2.4排序

2.5原理

2.6习题

2.7深入阅读

2.8变位词程序的实现(边栏)

第3章数据决定程序结构

3.1一个调查程序

3.2格式信函编程

3.3一组示例

3.4结构化数据

3.5用于特殊数据的强大工具

3.6原理

3.7习题

3.8深入阅读

第4章编写正确的程序

4.1二分搜索的挑战

4.2编写程序

4.3理解程序

4.4原理

4.5程序验证的角色

4.6习题

4.7深入阅读

第5章编程小事

5.1从伪代码到C程序

5.2测试工具

5.3断言的艺术

5.4自动测试

5.5计时

5.6完整的程序

5.7原理

5.8习题

5.9深入阅读

5.10调试(边栏)

第二部分性能

第6章程序性能分析

6.1实例研究

6.2设计层面

6.3原理

6.4习题

6.5深入阅读

第7章粗略估算

7.1基本技巧

7.2性能估计

7.3安全系数

7.4Little定律

7.5原理

7.6习题

7.7深入阅读

7.8日常生活中的速算(边栏)

第8章算法设计技术

8.1问题及简单算法

8.2两个平方算法

8.3分治算法

8.4扫描算法

8.5实际运行时间

8.6原理

8.7习题

8.8深入阅读

第9章代码调优

9.1典型的故事

9.2急救方案集锦

9.3大手术——二分搜索

9.4原理

9.5习题

9.6深入阅读

第10章节省空间

10.1关键在于简单

10.2示例问题

10.3数据空间技术

10.4代码空间技术

10.5原理

10.6习题

10.7深入阅读

10.8巨大的节省(边栏)

第三部分应用

第11章排序

11.1插入排序

11.2一种简单的快速排序

11.3更好的几种快速排序

11.4原理

11.5习题

11.6深入阅读

第12章取样问题

12.1问题

12.2一种解决方案

12.3设计空间

12.4原理

12.5习题

12.6深入阅读

第13章搜索

13.1接口

13.2线性结构

13.3二分搜索树

13.4用于整数的结构

13.5原理

13.6习题

13.7深入阅读

13.8一个实际搜索问题(边栏)

第14章堆

14.1数据结构

14.2两个关键函数

14.3优先级队列

14.4一种排序算法

14.5原理

14.6习题

14.7深入阅读

第15章字符串

15.1单词

15.2短语

15.3生成文本

15.4原理

15.5习题

15.6深入阅读

第1版跋

第2版跋

附录A算法分类

附录B估算测试

附录C时空开销模型

附录D代码调优法则

附录E用于搜索的C++类

部分习题提示

部分习题答案

索引

书摘插图

第一部分基础

第1章开篇

1.2准确的问题描述

对程序员来说,这些需求加起来就是:“如何给磁盘文件排序?”在试图解决这个问题之前,先将已知条件组织成一种更客观、更易用的形式。

输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=107。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数相关联。

输出:按升序排列的输入整数的列表。

约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多

几分钟,运行时间为10秒就不需要进一步优化了。

请花上一分钟思考一下该问题的规范说明。现在你打算给程序员什么样的建议呢?

1.3程序设计

显而易见的方法是以一般的基于磁盘的归并排序程序为起点,但是要对其进行调整,因为我们是对整数进行排序。这样就可以将原来的200行程序减少为几十行,同时也使得程序运行得更快,但是完成程序并使之运行可能仍然需要几天的时间。

另一种解决方案更多地利用了该排序问题的特殊性。如果每个号码都使用7个字节来存储,那么在可用的1MB存储空间里大约可以存143 000个号码。如果每个号码都使用32位整数来表示的话,在1MB存储空间里就可以存储250000个号码。因此,可以使用遍历输入文件40趟的程序

来完成排序。在第一趟遍历中,将0至249999之间的任何整数都读入内存,并对这(最多)250000个整数进行排序,然后写到输出文件中。第二趟遍历排序250000至499999之间的整数,依此类推,到第40趟遍历的时候对9750000至9999999之问的整数进行排序。对内存中的排序来说,快速排序会相当高效,而且仅仅需要20行代码。于是,整个程序就可以通过一两页纸的代码实现。该程序拥有所期望的特性——不必考虑使用中间磁盘文件;不幸的是,为此所付出的代价是要读取输入文件40次。

1.5原理

那个程序员打电话把他的问题告诉我,然后我们花了大约一刻钟时问明确了问题所在,并找到了位图解决方案。他花了几个小时来实现这个几十行代码的程序。该程序远远优于我们在电话刚开始时所担心的需要花费一周时间编写的几百行代码的那个程序。而且程序执行得很快:磁盘上的归并排序可能需要许多分钟的时间,该程序所需的时间只比读取输入和写入输出所需的时间多一点点——大约10秒钟。答案3包含了对完成该任务的几种不同程序的计时细节。

从这些事实中可以总结出该实例研究所得到的第一个结论:对小问题的仔细分析有时可以得到明显的实际益处。在该实例中,几分钟的仔细研究可以大幅削减代码的长度、程序员时间和程序运行时间。Chuck Yeager将军(第一个超音速飞行的人)赞扬一架飞机的机械系统时用的词是“结构简单、部件很少、易于维护、非常坚固”,该程序拥有同样的属性。然而,当规范说明的某些因素发生改变时,该程序的特殊结构将很难修改。除了需要精巧的编程以外,该实例阐明了如下一般原理。

正确的问题。明确问题,这场战役就成功了90%——我很庆幸程序员没有满足于我给出的第一个程序。一旦正确理解了问题,习题10、习题11和习题12的答案都会很优雅。在查看提示和答案以前,请努力思考这些问题。

位图数据结构。该数据结构描述了一个有限定义域内的稠密集合,其中的每一个元素最多出现一次并且没有其他任何数据与该元素相关联。即使这些条件没有完全满足(例如,存在重复元素或额外的数据),也可以用有限定义域内的作为一个表项更复杂的表格的索引,见习题6和习题8。

多趟算法。这些算法多趟读入其输入数据,每次完成一步。在1.3节已经见到了一个40趟算法,习题5鼓励读者去完成一个两趟算法。

时间一空间折中与双赢。编程文献和理论中充斥着时间一空间的折中:通过使用更多的时间,可以减少程序所需的空间。例如,答案5中的两趟算法让程序运行时间加倍从而使空间减半。但我的经验常常是这样的:减少程序的空间需求也会减少其运行时间。空间上高效的位图结构显著地减少了排序的运行时问。空间需求的减少之所以会导致运行时间的减少,有两个原因:需要处理的数据变少了,意味着处理这些数据所需的时间也变少了;同时将这些数据保存在内存中而不是磁盘上,进一步避免了磁盘访问的时间。当然了,只有在原始的设计远非最佳方案时,才有可能时空双赢。

简单的设计。Antoine de Saint—Exupery是法国作家兼飞机设计师,他曾经说过:“设计者确定其设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西。”更多的程序员应该使用该标准来检验自己完成的程序。简单的程序通常比具有相同功能的复杂程序更可靠、更安全、更健壮、更高效,而且易于实现和维护。

……

编程珠玑(第2版)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
>>返回首頁<<
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有