《編程本來》預訂網址【互動網】【噹噹網】【卓越網】【京東網】html
《編程本來》(Elements of Programming)前言
《編程本來》將演繹方法應用於程序 設計,討論程序與保證它們能正確工做的抽象數學理論之間的聯繫。書中把反映這些理論的規程(speci.cation),基於這些理論寫出的算法,以及描 述算法性質的引理和定理一塊兒呈現給讀者。這些算法在一種實際程序設計語言裏的實現是本書的中心。雖然規程主要是供人閱讀, 但它們也應該(或者說必須)嚴格地與非形式化的、供機器使用的代碼相結合,必須在通用的同時又是抽象並且精確的。算法
與在其餘科學和工程領域裏的狀況同樣,適合做爲程序設計的基礎的一樣是演繹方法。演繹方法能幫助咱們將複雜系統分解爲一些具備特定數學行爲的組件,而這種分解又是設計高效、可靠、安全和經濟的軟件的前提。編程
本書是想奉獻給那些但願更深刻地理解程序設計的人們,不管他們是專職軟件開發人員,仍是把程序設計看做其專業活動中一個重要組成部分的科學家或工程師。安全
本書編寫的基本想法是讓讀者從頭至尾完整閱讀。讀者只有經過閱讀代碼、證實引理、完成練習,才能真正理解書中的各方面材料。此外咱們還建議了一些項 目,其中有些是徹底開放的。本書的內容很緊湊,認真的讀者最終會看到書中各部分之間的聯繫,以及咱們選擇這些材料的理由。發現本書在體系結構方面的原理應 該是讀者的一個目標。數據結構
咱們假定讀者已經具備完成各類基本代數操做的能力。還假定讀者熟悉邏輯和集合論的基本術語,如普通本科生在離散數學課程中學習的內容。附錄A總結了 書中使用的各類記法。若是在一些特定的算法裏須要某些抽象代數的概念,書中會給出相應的定義。咱們還假定讀者熟悉程序設計,理解計算機體系結構,理解最基 本的算法和數據結構。工具
咱們選用C++,是由於它組合了強有力的抽象設施和基礎機器的正確表示。這裏只用了該語言的一個小子集,需求被寫成程序裏的結構化註釋。咱們但願不 熟悉C++的讀者也能閱讀本書。附錄B描述了書中使用的C++子集。在書中的任何地方,在須要區分數學記法和C++的地方,根據所用的字體、排版和上下文 就能肯定用的是哪一種意義(是數學的仍是C++的)。雖然書中的許多概念和程序與STL(C++標準模板庫)裏的東西對應,但這裏的一些設計決策是與STL 不一樣的。書中還忽略了實際程序庫(如STL)必須考慮和處理的許多問題,如名字空間、可見性、inline指令等等。學習
第1章描述值、對象、類型、過程和概念。第2~5章描述各類代數結構(如半羣、全序集)上的算法。第6~11章討論抽象內存上的算法。第12章討論包含對象成員的對象。跋給出了咱們對本書中闡釋的工做途徑的反思。字體
【本書目錄】 spa
第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語言引論》等。