2020-12-17 , 1432 , 104 , 177
[编按: 转载于 Java知识分享网/java1234.com, 2014-08-28. 如下为样例章节,请试读后购买正版授权全部内容。]
前言
Here is your book, the one your thousands of letters have asked us
to publish. It has taken us years to do, checking and teeheeking countless
recjpes to bring you only the best, only We intemsting,only the perfect.
Now we can say, without a shadow of a doubt , that every single one of them,
if you follow the directions to the letter, will work for you exactly as well
as it did for us,even if you have never cooked before.
这就是你们要的书,你们数不清的来信要求我们出版的书,
它已花了我们多年的时光,我们一又一遍地咀嚼每一个细节,检查每一道食谱,
誰一的愿望是把最好的、最有趣的和最完美的菜肴奉献给你们。
现在我们可以毫无疑虑地说,
如果你精心仿效,即使你以前从未烹饪过,
本书任何一道食谱都如它为我们提供的那样,也为你提供最精致美味的食物。
—McCall's Cookbook (1963)
为数字计算机编写程序的过程是饶有趣味的,因为它不但具有经济和科学价值,也是犹如赋诗或作曲那样的美学实践。本书是多卷集的第1卷,旨在对读者进行作为熟练的程序员所必需的各种技巧的训练。
以下各章并不打算作为计算机程序设计的人门介绍。
我们假定在此之前,读者已经有某些经验。先决条件实际上很简单,但初学者需要时间和实践才能理解数字计算机的概念。
读者应具有:
a)一台存储程序式数字计算机如何工作的概念;但不必是电子学方面的,而是指令如何被保存于机器存储器中以及逐个地被执行的方式。
b)把问题的解法翻译成为计算机能“理解"的明确术语的能力。(这些机器没有普通感觉,它们只能按照告知它们的要求不折不扣地去做。当人们开始试图使用计算机时这是最难以掌握的概念。)
c)最基本的计算机技术的某些知识,例如循环(重复地执行一组指令),使用子程序以及使用下标变量的某些知识。
d)普通计算机术语——“存储器"、“寄存器"、“位"、“浮点"、“溢出"、“软件"等方面的少量知识。在正文中未予定义的大多数词,在每卷末尾的索引中都给出简明的定义。
这四个先决条件也许可以概括成一个要求,即读者至少应该为一台计算机编写并调试过至少四个程序。
我力图使这一丛书满足多方面的需要。
首先,这些书是一套参考书,它汇总了在若干重要领域的知识。其次,它们可以作为计算机科学和信息科学领域的大学教材或自学读物。为了实现这两方面的目标,我在本书中加人了大量的习题并为大多数习题附上了答案。我还尽力用实例充实本书的内容,而避免作含糊空泛的评论。
这套丛书的对象,不是对计算机仅仅有一时兴趣的那些人们。但这绝不是说,这部书仅仅是为计算机的专业人员写的。事实上,我的主要目标之一是使这些程序设计技术可以被工作在其它领域的许多人掌握,这些人能够有效地使用计算机,却没有时间搜寻隐藏在各种技术杂志中的必需信息。
我们可以把这些书的主题称做“非数值分析'。计算机在传统上是同求解数值问题,例如一个方程的根,插值与积分等等的求解与计算相关联的。但在这里,我们并不处理这样一些课题,除非是顺便提及。
数值计算机程序设计是极为有趣和迅速发展的领域,因而已有许多这方面的书出版。然而,自20世纪60年代初期开始,计算机已经更频繁地用于数值仅是偶尔出现的一些问题上;这里所使用的是计算机的判定能力,而不是它的算术运算能力。
在非数值问题中,我们也用一些加法和减法,但我们很少需要乘法和除法。当然,即使是主要对数值计算机程序设计感兴趣的人也将从非数值技术的学习中获益,因为非数值技术在数直程序中同样存在。
非数值分析的许多研究成果分散于许多技术杂志中。我的方法是通过研究那些最基本的技术,来提取大量文献的精华。所谓最基本是指它们可被应用于许多类型的程序设计场合。我尽力把这些思想上升为“理论",并解释如何把这一理论应用于广泛的实际问题中。
当然,“非数值分析"是关于这个研究领域的极其负面*的名称(因为用的是在“数值"之前加上“非"这样一种表述),最好应该有一个正面的描述性的术语来表征这个课题。“信息处理"对于这个内容而言太宽了,而“程序设计技术"又太窄了。因此,我希望以算法分析作为这套书所涵盖课题的恰当名称,这一名称隐含着“特定计算机算法性质的理论'啲意思。
整套丛书,以“计算机程序设计艺术"为书名,其总目录如下:
第1卷基本算法
-- 第1章基本概念
-- 第2章信息结构
第2卷半数值算法
-- 第3章随机数
-- 第4章算术
第3卷排序与查找
UfqiLong
-- 第5章排序
-- 第6章查找
第4卷组合算法
-- 第7章组合检索
-- 第8章递归
第5卷语法算法
-- 第9章词法扫描
-- 第10章语法分析
第6卷语言理论
-- 第11章
第7卷编译程序
-- 第12章
第4卷所处理的课题相当之大,它实际上包含3个分册(卷4A,4B和4C)。有关更专门课题的另外两卷也在准备中:第6卷语言理论(第11章)和第7卷编译程序(第12章)。
我从1962年开始按照这个章次来写一本书。但我很快发现,更重要的是要深人地讨论这些课题而不是浅尝辄止。我写出的文稿的篇幅使我意识到,每章所含的内容都已足以作为一学期的大学课程,因此把这部书分成几卷出版是明智的。
我知道,在一本书中仅写一两章是很少见的,但我决定仍保留原来的章目以便于交叉参考。我也计划
出一本第1卷到第5卷的缩写本,专门用作本科计算机课程的更通用的参考书或教材,其内容是这些书内容的一个子集,略去了其中更为专门的信息。在缩写本中的章目仍和全集中的一样。
本卷可看做整个丛书的一个“交叉点",意思是,它包含了在所有其它书中用到的基本材料。另一方面,第2卷至第5卷可以彼此独立地阅读。第1卷不仅可作为同其它卷相关联的一本书,而且还可以作为数据结构(重点是第2章的内容)、离散数学(重点是1.1,1.2,1.3.3和2、3.4等节的内容)或者机器语言程序设计(重点是上3和1、4节的内容)等课题的大学教材或自学教材。
在写这些章节时,我的宗旨不同于当代许多有关计算机程序设计的书,我并不试图教读者如何使用某些人的软件,我所关心的是教人们写更好的软件本身。我原来的目标是把读者带到所讨论的每一课题的知识的前沿。然而,要在经济上可以盈利的一个领域保持不落伍是极其困难的,而且计算机科学的迅速发展使这一梦想已不可能实现。
这一课题已经变成一个巨大的花毯,它由来自全世界的数以万计的智者所奉献的数以万计的精妙结果织成。因此我的新的目标已变成专注于那些“经典"的技术(它们可能在今后数十年间仍保持其重要性),并尽我之所能来描述它们。特别是,我已试图来跟踪每一课题的历史,并且为未来进展提供一个坚实基础;我尝试选择简明并同当前用法一致的术语;我试图把既优美而又易于表述的有关顺序计算机程序设计的所有已知的思想都包括进来。
🔗 连载目录
🤖 智能推荐