泛型編程是一種專注于對(duì)算法及數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì)的編程方式,它使得這些算法及數(shù)據(jù)結(jié)構(gòu)能夠在不損失效率的前提下,運(yùn)用到通用的環(huán)境中。在這本內(nèi)容豐富且通俗易懂的著作中,軟件設(shè)計(jì)先驅(qū)亞歷山大·斯捷潘諾夫 (Alexander Stepanov)和他的同事丹尼爾·羅斯(Daniel Rose)闡明了泛型編程的原理及其所基于的數(shù)學(xué)抽象概念,幫助讀者編寫更簡(jiǎn)潔、更強(qiáng)大的代碼。只要讀者熟悉編程,并且擅長(zhǎng)邏輯思考,那么就可以順利閱讀本書。在閱讀本書的過程中,讀者將掌握高效編程的思路,并學(xué)會(huì)怎樣在保持效率的前提下,對(duì)適用范圍較窄的算法做推廣。這可以讓讀者深刻地領(lǐng)悟到:數(shù)學(xué)與編程相結(jié)合有著什么樣的意義。無論采用何種編程語言與編程范式,數(shù)學(xué)思想都能給編程工作帶來巨大的價(jià)值。
亞歷山大·斯捷潘諾夫(Alexander Stepanov)是一位俄裔美國(guó)計(jì)算機(jī)學(xué)家,他是為人熟知的泛型編程的倡導(dǎo)者,以及C 標(biāo)準(zhǔn)模板庫(kù)的主要設(shè)計(jì)者和實(shí)現(xiàn)者。他于1992年左右在惠普實(shí)驗(yàn)室工作期間開始開發(fā)該庫(kù),并于1995年榮獲Dr. Dobbs Journal杰出編程獎(jiǎng)。他在編程基礎(chǔ)方面的工作得到了通用電氣公司 (GE)、貝爾實(shí)驗(yàn)室、惠普、SGI、Adobe 以及亞馬遜搜索技術(shù)子公司A9.com的支持。
丹尼爾·羅斯(Daniel Rose)是一位研究科學(xué)家,曾在蘋果、AltaVista、Xigo、雅虎和A9.com擔(dān)任管理職務(wù)。他的研究涵蓋搜索技術(shù)的各個(gè)方面,從索引壓縮的低級(jí)算法到網(wǎng)絡(luò)搜索中的人機(jī)交互問題。羅斯領(lǐng)導(dǎo)的蘋果團(tuán)隊(duì)為Macintosh開發(fā)了桌面搜索功能。他擁有加州大學(xué)圣地亞哥分校認(rèn)知科學(xué)和計(jì)算機(jī)科學(xué)博士學(xué)位以及哈佛大學(xué)學(xué)士學(xué)位。
第 1 章 內(nèi)容提要
1.1 編程與數(shù)學(xué)
1.2 從歷史的角度來講解
1.3 閱讀準(zhǔn)備
1.4 各章概述
第 2 章 算法初談
2.1 埃及乘法算法
2.2 改進(jìn)該算法
2.3 本章要點(diǎn)
第 3 章 古希臘的數(shù)論
3.1 整數(shù)的幾何屬性
3.2 篩選素?cái)?shù)
3.3 實(shí)現(xiàn)該算法并優(yōu)化其代碼
3.4 完美數(shù)
3.5 畢達(dá)哥拉斯學(xué)派的構(gòu)想
3.6 畢氏構(gòu)想中的嚴(yán)重缺陷
3.7 本章要點(diǎn)
第 4 章 歐幾里得算法
4.1 雅典與亞歷山大
4.2 歐幾里得的最大公度量算法
4.3 缺乏數(shù)學(xué)成就的一千年
4.4 奇怪的0
4.5 求余及求商算法
4.6 用同一份代碼來實(shí)現(xiàn)求余及求商
4.7 對(duì)最大公約數(shù)算法進(jìn)行驗(yàn)證
4.8 本章要點(diǎn)
第 5 章 現(xiàn)代數(shù)論的興起
5.1 梅森素?cái)?shù)與費(fèi)馬素?cái)?shù)
5.2 費(fèi)馬小定理
5.3 消去
5.4 證明費(fèi)馬小定理
5.5 歐拉定理
5.6 模運(yùn)算的應(yīng)用
5.7 本章要點(diǎn)
第 6 章 數(shù)學(xué)中的抽象
6.1 群
6.2 幺半群與半群
6.3 與群有關(guān)的定理
6.4 子群及循環(huán)群
6.5 拉格朗日定理
6.6 理論與模型
6.7 舉例說明范疇理論與非范疇理論
6.8 本章要點(diǎn)
第 7 章 推導(dǎo)泛型算法
7.1 厘清算法所應(yīng)滿足的要求
7.2 對(duì)模板參數(shù)A提出要求
7.3 對(duì)模板參數(shù)N提出要求
7.4 提出新的要求
7.5 將乘法算法改編為冪算法
7.6 對(duì)運(yùn)算本身加以泛化
7.7 計(jì)算斐波那契數(shù)
7.8 本章要點(diǎn)
第 8 章 更多代數(shù)結(jié)構(gòu)
8.1 斯蒂文、多項(xiàng)式及最大公約數(shù)
8.2 哥廷根與德國(guó)數(shù)學(xué)
8.3 埃米·諾特與抽象代數(shù)的誕生
8.4 環(huán)
8.5 矩陣乘法與半環(huán)
8.6 半環(huán)的運(yùn)用:社交網(wǎng)絡(luò)與最短路徑
8.7 歐幾里得整環(huán)
8.8 域及其他的代數(shù)結(jié)構(gòu)
8.9 本章要點(diǎn)
第 9 章 整理數(shù)學(xué)知識(shí)
9.1 證明
9.2 數(shù)學(xué)史上的第一個(gè)定理
9.3 歐幾里得與公理化方法
9.4 與歐氏幾何并立的其他幾何學(xué)
9.5 希爾伯特的形式化方法
9.6 皮亞諾與他的公理
9.7 用皮亞諾公理來構(gòu)建算術(shù)體系
9.8 本章要點(diǎn)
第 10 章 編程的基本概念
10.1 亞里士多德與抽象
10.2 值與類型
10.3 concept
10.4 迭代器
10.5 迭代器的種類、所支持的操作及所具備的特性
10.6 區(qū)間
10.7 線性搜索
10.8 二分搜索
10.9 本章要點(diǎn)
第 11 章 置換算法
11.1 置換與換位
11.2 交換兩個(gè)區(qū)間內(nèi)的元素
11.3 旋轉(zhuǎn)
11.4 利用循環(huán)來執(zhí)行旋轉(zhuǎn)
11.5 倒置
11.6 空間復(fù)雜度
11.7 內(nèi)存自適應(yīng)算法
11.8 本章要點(diǎn)
第 12 章 再論最大公約數(shù)算法
12.1 硬件的限制催生出更為高效的算法
12.2 Stein 算法的推廣
12.3 貝祖等式
12.4 擴(kuò)展最大公約數(shù)算法
12.5 最大公約數(shù)算法的運(yùn)用
12.6 本章要點(diǎn)
第 13 章 實(shí)際運(yùn)用
13.1 密碼學(xué)
13.2 素?cái)?shù)測(cè)試
13.3 米勒 - 拉賓素?cái)?shù)測(cè)試
13.4 RSA 算法的步驟及原理
13.5 本章要點(diǎn)
第 14 章 全書總結(jié)
延伸閱讀
附錄 A 記法
附錄 B 常用的證明方法
附錄 C 寫給非C 程序員看的C 知識(shí)
參考文獻(xiàn)
索引