《编程原本》预订网址【互动网
】【当当网
】【卓越网
】【京东网
】
《编程原本》(Elements of Programming)前言
《编程原本》将演绎方法应用于程序设计,讨论程序与保证它们能正确工作的抽象数学理论之间的联系。书中把反映这些理论的规程(speci.cation),基于这些理论写出的算法,以及描述算法性质的引理和定理一起呈现给读者。这些算法在一种实际程序设计语言里的实现是本书的中心。虽然规程主要是供人阅读, 但它们也应该(或者说必须)严格地与非形式化的、供机器使用的代码相结合,必须在通用的同时又是抽象而且精确的。
与在其他科学和工程领域里的情况一样,适合作为程序设计的基础的同样是演绎方法。演绎方法能帮助我们将复杂系统分解为一些具有特定数学行为的组件,而这种分解又是设计高效、可靠、安全和经济的软件的前提。
本书是想奉献给那些希望更深入地理解程序设计的人们,无论他们是专职软件开发人员,还是把程序设计看作其专业活动中一个重要组成部分的科学家或工程师。
本书编写的基本想法是让读者从头到尾完整阅读。读者只有通过阅读代码、证明引理、完成练习,才能真正理解书中的各方面材料。此外我们还建议了一些项 目,其中有些是完全开放的。本书的内容很紧凑,认真的读者最终会看到书中各部分之间的联系,以及我们选择这些材料的理由。发现本书在体系结构方面的原理应 该是读者的一个目标。
我们假定读者已经具有完成各种基本代数操作的能力。还假定读者熟悉逻辑和集合论的基本术语,如普通本科生在离散数学课程中学习的内容。附录A总结了 书中使用的各种记法。如果在一些特定的算法里需要某些抽象代数的概念,书中会给出相应的定义。我们还假定读者熟悉程序设计,理解计算机体系结构,理解最基 本的算法和数据结构。
我们选用C++,是因为它组合了强有力的抽象设施和基础机器的正确表示。这里只用了该语言的一个小子集,需求被写成程序里的结构化注释。我们希望不 熟悉C++的读者也能阅读本书。附录B描述了书中使用的C++子集。在书中的任何地方,在需要区分数学记法和C++的地方,根据所用的字体、排版和上下文 就能确定用的是哪种意义(是数学的还是C++的)。虽然书中的许多概念和程序与STL(C++标准模板库)里的东西对应,但这里的一些设计决策是与STL 不同的。书中还忽略了实际程序库(如STL)必须考虑和处理的许多问题,如名字空间、可见性、inline指令等等。
第1章描述值、对象、类型、过程和概念。第2~5章描述各种代数结构(如半群、全序集)上的算法。第6~11章讨论抽象内存上的算法。第12章讨论包含对象成员的对象。跋给出了我们对本书中阐释的工作途径的反思。
【本书目录】
第1章 基础................................ 1
1.1理念范畴:实体,类别,类属.................1
1.2值.....................................2
1.3对象....................................4
1.4过程....................................6
1.5规范类型.................................7
1.6规范过程.................................8
1.7概念....................................10
1.8总结....................................14
第2章 变换及其轨道........................ 15
2.1变换....................................15
2.2轨道....................................18
2.3碰撞点...................................21
2.4轨道规模的度量.............................27
2.5动作....................................28
2.6总结....................................29
第3章 可结合运算.......................... 31
3.1可结合性.................................31
3.2计算乘幂.................................32
3.3程序变换.................................35
3.4处理特殊情况的过程..........................40
3.5参数化算法................................43
3.6线性递归.................................44
3.7累积过程.................................47
3.8总结....................................48
第4章 线性序................................ 49
4.1关系的分类................................49
4.2全序和弱序................................51
4.3按序选取.................................52
4.4自然全序.................................62
4.5派生过程组................................63
4.6按序选取过程的扩展..........................63
4.7总结....................................64
第5章 有序代数结........................... 65
5.1基本代数结构..............................65
5.2有序代数结构..............................70
5.3求余....................................72
5.4最大公因子................................76
5.5广义gcd..................................79
5.6Steingcd.................................81
5.7商.....................................82
5.8负量的商和余数.............................84
5.9概念及其模型..............................87
5.10计算机整数类型.............................88
5.11结论....................................89
第6章 迭代器.............................. 91
6.1可读性...................................91
6.2迭代器...................................92
6.3范围....................................94
6.4可读范围.................................97
6.5递增的范围................................106
6.6前向迭代器................................108
6.7索引迭代器................................113
6.8双向迭代器................................114
6.9随机访问迭代器.............................115
6.10总结....................................117
第7章坐标结构.............................. 119
7.1二叉坐标.................................119
7.2双向二叉坐标..............................123
7.3坐标结构.................................129
7.4同构,等价和有序............................129
7.5总结....................................137
第8章 后继可变的坐标....................... 139
8.1链接迭代器................................139
8.2链接重整.................................140
8.3链接重整的应用.............................147
8.4链接的二叉坐标.............................151
8.5结论....................................155
第9章拷贝.................................. 157
9.1可写性...................................157
9.2基于位置的拷贝.............................159
9.3基于谓词的拷贝.............................166
9.4范围的交换................................174
9.5总结....................................178
第10章 重整............................... 179
10.1置换....................................179
10.2重整....................................182
10.3 反转算法.................................184
10.4 轮换算法.................................188
10.5 算法选择.................................196
10.6 总结....................................200
第11章 划分和归并.......................... 201
11.1划分....................................201
11.2平衡的归约................................207
11.3归并....................................212
11.4总结....................................218
第12章 复合对象........................... 219
12.1简单复合对象..............................219
12.2动态序列.................................227
12.3基础类型.................................233
12.4总结....................................236
跋......................................... 237
附录A 数学表示............................ 241
附录B 程序设计语言........................ 243
参考文献................................... 253
索引....................................... 257
【作者简介】
Alexander Stepanov 于1967~1972年间在国立莫斯科大学学习数学,从1972年开始在苏联,1977年移民后继续在美国从事编程工作。他编写过操作系统、编程工具、编译器和各种程序库。他在程序设计基础方面的工作先后得到GE、Polytechnic、AT&T、惠普、SGI和Adobe的支持。1995年因C++标准模板库的设计获Dr. Dobb, Journal的程序设计杰出贡献奖。
Paul McJones 于1967~1971年间在加州大学伯克利分校学习工程数学。从1967年开始介入程序设计,涉足的领域包括操作系统、程序设计环境、事务处理系统以及企业和客户应用系统等。他先后在加州大学、IBM、Xerox、Tandem、DEC和Adobe工作。1982年他与合作者一起因论文“The Recovery Manager of the System R Database Manager”获得ACM程序设计系统和语言论文奖。
【译者简介】
裘宗燕,北京大学数学学院信息科学系教授。长期从事计算机软件理论,形式化方法,程序设计和程序设计语言等方面的教学和研究工作。译著包括《程序设计实践》、《从规范出发的程序设计》、《C++语言的设计和演化》、《C++程序设计语言》、《计算机程序的构造和解释》、《程序设计语言——实践之路》等,著作有《从问题到程序——程序设计与C语言引论》等。
分享到:
相关推荐
Elements of Programming Interviews: The Insiders' Guide的题目和code都很赞,觉得是目前准备coding interview最好的书了,超全面超详细,有不少leetcode的题解。 书名:Elements of Programming Interviews: The ...
本书《Elements of Programming Interviews》是由Adnan Aziz、Tsung-Hsien Lee和Amit Prakash三位专家共同撰写,旨在为读者提供编程面试中的各种问题解决策略。Adnan Aziz是德克萨斯大学奥斯汀分校电气和计算机工程...
Elements of Propulsion: Gas Turbines and Rocks
《编程的本质》是一本深入探讨编程艺术和技术的著作,它旨在揭示编程的内在规律和基本要素,帮助程序员提升代码质量,提高编程效率。书中的内容不仅涵盖了编程的基础概念,也探讨了高级编程技巧和设计原则,是每一个...
Elements of Programming Interviews in Python The Insiders Guide.pdf Elements of Programming Interviews in Python The Insiders Guide.pdf Elements of Programming Interviews in Python The Insiders Guide....
This is a larger-format version of Elements of Programming Interviews. The language is C++.Specifically, the font size is larger, and the page size is 7"x10" (the regular format uses 6"x9"). The ...
Elements of Programming Interviews. Authored to help in Tech interviews
The ElementsThe Elements of Programming Style.pdf ofThe Elements of Programming Style.pdf Programming Style.pdf
《Elements of Programming》这本书提供了对编程理解的一种不同视角,不同于其他编程书籍中常见的介绍。该书的主要前提是,实际的编程工作,就像科学和工程的其他领域一样,必须建立在扎实的数学基础之上。书中提出...
综上所述,从标题、描述和标签中可以得出,《The Elements of Programming Style (2nd edition)》是一本重编程风格、代码美学和实用编程技术的书籍。这本书不仅为程序员提供了一套改善编程习惯的指南,还可能包括了...
《Elements of Programming》特别强调了数学抽象在编程中的作用。书中通过将数学理论与编程实践相结合,使得读者能够更加深刻地理解程序设计的基本原则。例如,书中解释了如何利用数学抽象来定义和实现高效的幂运算...
Elements of Programming interviews,最经典的面试书籍。
《编程面试的元素》是由Adnan Aziz、Tsung-Hsien Lee和Amit Prakash三位作者合著的一本书,主要面向希望在编程领域找到工作的求职者。书中的内容涵盖了在技术面试中可能会遇到的各种编程问题,以及如何有效地解决...
practitioners and advanced students will gain new insight and guidance by seeing how a recognized master approaches the elements of his art.Provides a Broad ViewThe first half of the book covers a ...
《Elements of Programming》是一本由Alexander Stepanov和Paul McJones合著的计算机科学经典著作,专注于编程的本质和原理。这本书深入探讨了程序设计的基本概念,包括数据、操作、算法和程序结构。"Mappings of ...
《编程风格的要素》第二版(Kernighan & Plauger)是一本经典且具有深远影响力的编程书籍,由Brian W. Kernighan和P.J. Plauger共同撰写。这本书旨在提高程序员的代码质量,强调了编程风格的重要性,不仅关乎代码的...
相比于面试类经典书籍crack the interview等,涵盖了相对较新但仍然很经典的面试题,非常值得一看!自己虽然有了本电子版,但是还是忍不住买了原版书。
The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 和之前上传的略有差别,这个要更好。
The Elements of Programming Style 2nd edition