本书提供了有关编程的一种与众不同的理解。其主旨是,实际的编程也应像其他科学和工程领域一样基于坚实的数学基础。本书展示了在实际编程语言(如C++)中实现的算法如何在最一般的数学背景中操作。例如,如何定义快速求幂算法,使之能使用任何可交换运算。使用抽象算法将能得到更高效、可靠、安全和经济的软件。
这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目标是提升你对编程的洞察力。要想从中大获裨益,你需要从头到尾认真学习:阅读代码,证明引理,完成练习。到结束之时,你将看到如何把这里讨论的演绎式方法应用到你的程序中,保证你做出的软件部件能一起工作,并表现出它们所应该表现的行为。
书中给出的算法和需求针对某些被操作的类型。有关这些描述的代码(也可以通过Web得到)采用C++的一个小子集书写,这样做是为了让所有有经验的程序员都能理解。这个小子集可以看做一种特殊语言,是由Sean Parent和Bjarne Stroustrup一起设计的。
无论你是一位软件开发者,还是其他以编程作为一项重要活动的专业人员,或者是一名在校的学生,你都会逐渐理解本书的经验丰富的作者多年来一直在教授和阐释的道理:数学对于编程是绝好的东西,理论对于实际是绝好的东西。
......(更多)
Alexander Stepanov于1967~1972年间在莫斯科国立大学学习数学,从1972年开始在苏联,1977年移民美国后在美国从事编程工作。他编写过操作系统、编程工具、编译器和各种库。他在程序设计基础方面的工作先后得到GE、Polytechnic、AT&T、惠普、Silicon Graphics的支持,2002年后是Adobe的支持。1995年因C++标准模板库的设计获Dr.Dobb的程序设计杰出贡献奖。
Paul McJones于1967~1971年间在加州大学伯克利分校学习工程数学。从1967年开始介入程序设计,涉足的领域包括操作系统、程序设计环境、事务处理系统以及企业和客户应用系统等。他先后在加州大学、IBM、Xerox、Tandem、DEC工作,2003年至今在Adobe公司。1982年他与合作者一起因其论文“The Recovery Manager of the System R Database Manager”获得ACM程序设计系统和语言论文奖。
......(更多)
Preface ixAbouttheAuthors xiii1 Foundations 1.1 CategoriesofIdeas:Entity,Species,Genus 1.2 Values 1.3 Objects 1.4 rocedures6 1.5 RegularTypes 1.6 RegularProcedures 1.7 Concepts 1.8 Conclusions142 TransformationsandTheirOrbits1 2.1 Transformations 2.2 Orbits 2.3 CollisionPoint 2.4 MeasuringOrbitSizes 2.5 Actions 2.6 Conclusions3 AssociativeOperations 3.1 Associativity 3.2 ComputingPowers 3.3 ProgramTransformations 3.4 Special-CaseProcedures 3.5 ParameterizingAlgorithms 3.6 LinearRecurrences 3.7 AccumulationProcedures 3.8 Conclusions4 LinearOrderings 4.1 Classi?cationofRelations 4.2 TotalandWeakOrderings 4.3 OrderSelection 4.4 NaturalTotalOrdering 4.5 ClustersofDerivedProcedures 4.6 ExtendingOrder-SelectionProcedures 4.7 Conclusions5 OrderedAlgebraicStructures 5.1 BasicAlgebraicStructures 5.2 OrderedAlgebraicStructures 5.3 Remainder 5.4 GreatestCommonDivisor 5.5 Generalizinggcd 5.6 Steingcd 5.7 Quotient 5.8 QuotientandRemainderforNegativeQuantities 5.9 ConceptsandTheirModels 5.10 ComputerIntegerTypes 5.11 Conclusions6 Iterators 6.1 Readability 6.2 Iterators 6.3 Ranges 6.4 ReadableRanges 6.5IncreasingRanges 6.6 ForwardIterators 6.7 IndexedIterators 6.8 BidirectionalIterators 6.9 Random-AccessIterators 6.1 Conclusions7 CoordinateStructures 7.1 ifurcateCoordinates 7.2 BidirectionalBifurcateCoordinates 7.3 CoordinateStructures 7.4 Isomorphism,Equivalence,andOrdering 7.5 Conclusions8 CoordinateswithMutableSuccessors 8.1 LinkedIterators 8.2 LinkRearrangements 8.3 ApplicationsofLinkRearrangements 8.4 LinkedBifurcateCoordinates 8.5 Conclusions9 Copying 9.1 Writability 9.2 Position-BasedCopying 9.3 Predicate-BasedCopying 9.4 SwappingRanges 9.5 Conclusions10 Rearrangements 10.1 Permutations 10.2 Rearrangements 10.3 ReverseAlgorithms 10.4 RotateAlgorithms 10.5 AlgorithmSelection 10.6 Conclusions11 PartitionandMerging 11.1 Partition 11.2 BalancedReduction 11.3 Merging 11.4 Conclusions12 CompositeObjects 12.1 SimpleCompositeObjects 12.2 DynamicSequences 12.3 UnderlyingType 12.4 ConclusionsAfterwordAppendixA MathematicalNotationAppendixB ProgrammingLanguage B.1 LanguageDe?nition B.2 MacrosandTraitStructuresBibliographyIndex
......(更多)
A value type is a correspondence between a species (abstract or concrete) and a set of datums. 一集数据
......(更多)