人民幣定價:59 元
定價
:NT$ 354 元優惠價
:
87 折 308 元
絕版無法訂購
商品簡介
作者簡介
名人/編輯推薦
序
目次
商品簡介
《編程原本》提供了有關編程的一種與眾不同的理解。其主旨是,實際的編程也應像其他科學和工程領域一樣基于堅實的數學基礎。本書展示了在實際編程語言(如C++)中實現的算法如何在最一般的數學背景中操作。例如,如何定義快速求冪算法,使之能使用任何可交換運算。使用抽象算法將能得到更高效、可靠、安全和經濟的軟件。
這不是一本很容易讀的書,它也不是能提升你的編程技能的秘訣和技巧匯編。本書的價值是更根本性的,其終極目標是提升你對編程的洞察力。要想從中大獲裨益,你需要從頭到尾認真學習:閱讀代碼,證明引理,完成練習。到結束之時,你將看到如何把這里討論的演繹方法應用到你的程序中,保證你做出的軟件部件能一起工作,并表現出它們所應該表現的行為。
書中給出的算法和需求針對某些被操作的類型。有關這些描述的代碼(也可以通過Web得到)采用C++的一個小子集書寫,這樣做是為了讓所有有經驗的程序員都能理解。這個小子集可以看做一種特殊語言,是由Sean Parent和Bjarne Stroustrup一起設計的。
無論你是一位軟件開發者,還是其他以編程作為一項重要活動的專業人員,或者是一名在校的學生,你都會逐漸理解本書的經驗豐富的作者多年來一直在教授和闡釋的道理:數學對于編程是絕好的東西,理論對于實際是絕好的東西。
這不是一本很容易讀的書,它也不是能提升你的編程技能的秘訣和技巧匯編。本書的價值是更根本性的,其終極目標是提升你對編程的洞察力。要想從中大獲裨益,你需要從頭到尾認真學習:閱讀代碼,證明引理,完成練習。到結束之時,你將看到如何把這里討論的演繹方法應用到你的程序中,保證你做出的軟件部件能一起工作,并表現出它們所應該表現的行為。
書中給出的算法和需求針對某些被操作的類型。有關這些描述的代碼(也可以通過Web得到)采用C++的一個小子集書寫,這樣做是為了讓所有有經驗的程序員都能理解。這個小子集可以看做一種特殊語言,是由Sean Parent和Bjarne Stroustrup一起設計的。
無論你是一位軟件開發者,還是其他以編程作為一項重要活動的專業人員,或者是一名在校的學生,你都會逐漸理解本書的經驗豐富的作者多年來一直在教授和闡釋的道理:數學對于編程是絕好的東西,理論對于實際是絕好的東西。
作者簡介
Alexander Stepanov 于1967~1972年間在國立莫斯科大學學習數學,從1972年開始在蘇聯,1977年移民後繼續在美國從事編程工作。他編寫過操作系統、編程工具、編譯器和各種程序庫。他在程序設計基礎方面的工作先後得到GE、Polytechnic、AT&T、惠普、SGI和Adobe的支持。1995年因C++標準模板庫的設計獲Dr. Dobb, Journal的程序設計杰出貢獻獎。
名人/編輯推薦
追溯數學原理,探求編程的本質
STL之父Alexander Stepanov力作
C++之父Bjarne Stroustrup鼎力推薦
北大數學學院教授裘宗燕老師傾情獻譯
STL之父Alexander Stepanov力作
C++之父Bjarne Stroustrup鼎力推薦
北大數學學院教授裘宗燕老師傾情獻譯
序
前言:
本書將演繹方法應用于程序設計,討論程序與保證它們能正確工作的抽象數學理論之間的聯系.書中把反映這些理論的規程(speci.cation),基于這些理論寫出的算法,以及描述算法性質的引理和定理一起呈現給讀者.這些算法在一種實際程序設計語言里的實現是本書的中心。雖然規程主要是供人閱讀,但它們也應該(或者說必須)嚴格地與非形式化的、供機器使用的代碼相結合,必須在通用的同時又是抽象而且精確的。
與在其他科學和工程領域里的情況一樣,適合作為程序設計的基礎的同樣是演繹方法。演繹方法能幫助我們將復雜系統分解為一些具有特定數學行為的組件,而這種分解又是設計高效、可靠、安全和經濟的軟件的前提。
本書是想奉獻給那些希望更深入地理解程序設計的人們,無論他們是專職軟件開發人員,還是把程序設計看作其專業活動中一個重要組成部分的科學家或工程師。
本書編寫的基本想法是讓讀者從頭到尾完整閱讀。讀者只有通過閱讀代碼、證明引理、完成練習,才能真正理解書中的各方面材料。此外我們還建議了一些項目,其中有些是完全開放的。本書的內容很緊湊,認真的讀者最終會看到書中各部分之間的聯系,以及我們選擇這些材料的理由。發現本書在體系結構方面的原理應該是讀者的一個目標。
我們假定讀者已經具有完成各種基本代數操作的能力。還假定讀者熟悉邏輯和集合論的基本術語,如普通本科生在離散數學課程中學習的內容。附錄A總結了書中使用的各種記法。如果在一些特定的算法里需要某些抽象代數的概念,書中會給出相應的定義。我們還假定讀者熟悉程序設計,理解計算機體系結構,理解最基本的算法和數據結構。
我們選用C++,是因為它組合了強有力的抽象設施和基礎機器的正確表示。這里只用了該語言的一個小子集,需求被寫成程序里的結構化注釋。我們希望不熟悉C++的讀者也能閱讀本書。附錄B描述了書中使用的C++子集。在書中的任何地方,在需要區分數學記法和C++的地方,根據所用的字體、排版和上下文就能確定用的是哪種意義(是數學的還是C++的)。雖然書中的許多概念和程序與STL(C++標準模板庫)里的東西對應,但這里的一些設計決策是與STL不同的。書中還忽略了實際程序庫(如STL)必須考慮和處理的許多問題,如名字空間、可見性、inline指令等等。
第1章描述值、對象、類型、過程和概念。第2~5章描述各種代數結構(如半群、全序集)上的算法。第6~11章討論抽象內存上的算法。第12章討論包含對象成員的對象。跋給出了我們對本書中闡釋的工作途徑的反思。
本書將演繹方法應用于程序設計,討論程序與保證它們能正確工作的抽象數學理論之間的聯系.書中把反映這些理論的規程(speci.cation),基于這些理論寫出的算法,以及描述算法性質的引理和定理一起呈現給讀者.這些算法在一種實際程序設計語言里的實現是本書的中心。雖然規程主要是供人閱讀,但它們也應該(或者說必須)嚴格地與非形式化的、供機器使用的代碼相結合,必須在通用的同時又是抽象而且精確的。
與在其他科學和工程領域里的情況一樣,適合作為程序設計的基礎的同樣是演繹方法。演繹方法能幫助我們將復雜系統分解為一些具有特定數學行為的組件,而這種分解又是設計高效、可靠、安全和經濟的軟件的前提。
本書是想奉獻給那些希望更深入地理解程序設計的人們,無論他們是專職軟件開發人員,還是把程序設計看作其專業活動中一個重要組成部分的科學家或工程師。
本書編寫的基本想法是讓讀者從頭到尾完整閱讀。讀者只有通過閱讀代碼、證明引理、完成練習,才能真正理解書中的各方面材料。此外我們還建議了一些項目,其中有些是完全開放的。本書的內容很緊湊,認真的讀者最終會看到書中各部分之間的聯系,以及我們選擇這些材料的理由。發現本書在體系結構方面的原理應該是讀者的一個目標。
我們假定讀者已經具有完成各種基本代數操作的能力。還假定讀者熟悉邏輯和集合論的基本術語,如普通本科生在離散數學課程中學習的內容。附錄A總結了書中使用的各種記法。如果在一些特定的算法里需要某些抽象代數的概念,書中會給出相應的定義。我們還假定讀者熟悉程序設計,理解計算機體系結構,理解最基本的算法和數據結構。
我們選用C++,是因為它組合了強有力的抽象設施和基礎機器的正確表示。這里只用了該語言的一個小子集,需求被寫成程序里的結構化注釋。我們希望不熟悉C++的讀者也能閱讀本書。附錄B描述了書中使用的C++子集。在書中的任何地方,在需要區分數學記法和C++的地方,根據所用的字體、排版和上下文就能確定用的是哪種意義(是數學的還是C++的)。雖然書中的許多概念和程序與STL(C++標準模板庫)里的東西對應,但這里的一些設計決策是與STL不同的。書中還忽略了實際程序庫(如STL)必須考慮和處理的許多問題,如名字空間、可見性、inline指令等等。
第1章描述值、對象、類型、過程和概念。第2~5章描述各種代數結構(如半群、全序集)上的算法。第6~11章討論抽象內存上的算法。第12章討論包含對象成員的對象。跋給出了我們對本書中闡釋的工作途徑的反思。
目次
譯者序
前言
關于作者
第1章 基礎
1.1理念范疇:實體,類別,類屬
1.2值
1.3對象
1.4過程
1.5規范類型
1.6規范過程
1.7概念
1.8總結
第2章 變換及其軌道
2.1變換
2.2軌道
2.3碰撞點
2.4軌道規模的度量
2.5動作
2.6總結
第3章 可結合運算
3.1可結合性
3.2計算乘冪
3.3程序變換
3.4處理特殊情況的過程
3.5參數化算法
3.6線性遞歸
3.7累積過程
3.8總結
第4章 線性序
4.1關系的分類
4.2全序和弱序
4.3按序選取
4.4自然全序
4.5派生過程組
4.6按序選取過程的擴展
4.7總結
第5章 有序代數結
5.1基本代數結構
5.2有序代數結構
5.3求余
5.4最大公因子
5.5廣義gcd
5.6Steingcd
5.7商
5.8負量的商和余數
5.9概念及其模型
5.10計算機整數類型
5.11結論
第6章 迭代器
6.1可讀性
6.2迭代器
6.3范圍
6.4可讀范圍
6.5遞增的范圍
6.6前向迭代器
6.7索引迭代器
6.8雙向迭代器
6.9隨機訪問迭代器
6.10總結
第7章坐標結構
7.1二叉坐標
7.2雙向二叉坐標
7.3坐標結構
7.4同構,等價和有序
7.5總結
第8章 後繼可變的坐標
8.1鏈接迭代器
8.2鏈接重整
8.3鏈接重整的應用
8.4鏈接的二叉坐標
8.5結論
第9章拷貝
9.1可寫性
9.2基于位置的拷貝
9.3基于謂詞的拷貝
9.4范圍的交換
9.5總結
第10章 重整
10.1置換
10.2重整
10.3 反轉算法
10.4 輪換算法
10.5 算法選擇
10.6 總結
200
第11章 劃分和歸并
11.1劃分
11.2平衡的歸約
11.3歸并
11.4總結
第12章 復合對象
12.1簡單復合對象
12.2動態序列
12.3基礎類型
12.4總結
跋
附錄A 數學表示
附錄B 程序設計語言
參考文獻
索引
前言
關于作者
第1章 基礎
1.1理念范疇:實體,類別,類屬
1.2值
1.3對象
1.4過程
1.5規范類型
1.6規范過程
1.7概念
1.8總結
第2章 變換及其軌道
2.1變換
2.2軌道
2.3碰撞點
2.4軌道規模的度量
2.5動作
2.6總結
第3章 可結合運算
3.1可結合性
3.2計算乘冪
3.3程序變換
3.4處理特殊情況的過程
3.5參數化算法
3.6線性遞歸
3.7累積過程
3.8總結
第4章 線性序
4.1關系的分類
4.2全序和弱序
4.3按序選取
4.4自然全序
4.5派生過程組
4.6按序選取過程的擴展
4.7總結
第5章 有序代數結
5.1基本代數結構
5.2有序代數結構
5.3求余
5.4最大公因子
5.5廣義gcd
5.6Steingcd
5.7商
5.8負量的商和余數
5.9概念及其模型
5.10計算機整數類型
5.11結論
第6章 迭代器
6.1可讀性
6.2迭代器
6.3范圍
6.4可讀范圍
6.5遞增的范圍
6.6前向迭代器
6.7索引迭代器
6.8雙向迭代器
6.9隨機訪問迭代器
6.10總結
第7章坐標結構
7.1二叉坐標
7.2雙向二叉坐標
7.3坐標結構
7.4同構,等價和有序
7.5總結
第8章 後繼可變的坐標
8.1鏈接迭代器
8.2鏈接重整
8.3鏈接重整的應用
8.4鏈接的二叉坐標
8.5結論
第9章拷貝
9.1可寫性
9.2基于位置的拷貝
9.3基于謂詞的拷貝
9.4范圍的交換
9.5總結
第10章 重整
10.1置換
10.2重整
10.3 反轉算法
10.4 輪換算法
10.5 算法選擇
10.6 總結
200
第11章 劃分和歸并
11.1劃分
11.2平衡的歸約
11.3歸并
11.4總結
第12章 復合對象
12.1簡單復合對象
12.2動態序列
12.3基礎類型
12.4總結
跋
附錄A 數學表示
附錄B 程序設計語言
參考文獻
索引
主題書展
更多
主題書展
更多書展購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

