編程原本是一款關于編程學習的科教書籍,它對編程提供了不同的理解,讓學者可以更好的進行學習和編程,其主旨是,實際的編程也應像其他科學和工程領域一樣基于堅實的數學基礎。《編程原本》展示了在實際編程語言(如C++)中實現的算法如何在最一般的數學背景中操作。例如,如何定義快速求冪算法,使之能使用任何可交換運算。使用抽象算法將能得到更高效、可靠、安全和經濟的軟件。
這不是一本很容易讀的書,它也不是能提升你的編程技能的秘訣和技巧匯編。《編程原本》的價值是更根本性的,其終極目標是提升你對編程的洞察力。要想從中大獲裨益,你需要從頭到尾認真學習:閱讀代碼,證明引理,完成練習。到結束之時,你將看到如何把這里討論的演繹方法應用到你的程序中,保證你做出的軟件部件能一起工作,并表現出它們所應該表現的行為。
編程原本中給出的算法和需求針對某些被操作的類型。有關這些描述的代碼(也可以通過Web得到)采用C++的一個小子集書寫,這樣做是為了讓所有有經驗的程序員都能理解。這個小子集可以看做一種特殊語言,是由Sean Parent和Bjarne Stroustrup一起設計的。
無論你是一位軟件開發者,還是其他以編程作為一項重要活動的專業人員,或者是一名在校的學生,你都會逐漸理解《編程原本本》的經驗豐富的作者多年來一直在教授和闡釋的道理:數學對于編程是絕好的東西,理論對于實際是絕好的東西。
編輯推薦《編程原本》編輯推薦:追溯數學原理,探求編程的本質,STL之父Alexander Stepanov力作,C++之父Bjarne Stroustrup鼎力推薦,北大數學學院教授裘宗燕老師傾情獻譯。
編程原本目錄:
譯者序
前言
關于作者
第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程序設計系統和語言論文獎。