定 價:39.99 元
叢書名:國外經(jīng)典教材·計(jì)算機(jī)科學(xué)與技術(shù)
- 作者:Sanjoy Dasgupta,王沛
- 出版時間:2008/7/1
- ISBN:9787302179399
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:O241
- 頁碼:
- 紙張:膠版紙
- 版次:1
- 開本:16
作為一本介紹算法技術(shù)和思想的書籍,本書不僅可以面向信息學(xué)科大學(xué)生作為基本的教材(或參考書),更是將任何具有初等數(shù)學(xué)基礎(chǔ)的人引入算法應(yīng)用與研究殿堂的一塊引路石。本書循序漸進(jìn)、深入淺出地展示了算法研究與應(yīng)用中,從模型分析、算法構(gòu)造到復(fù)雜性分析和算法優(yōu)化的方方面面。涉及的內(nèi)容從古老的算術(shù)算法、排序算法、簡單圖論到近現(xiàn)代出現(xiàn)的計(jì)算圖論、貪心算法、分治算法、線性規(guī)劃、動態(tài)規(guī)劃、隨機(jī)算法以及NP復(fù)雜性理論,甚至是尚未完全顯現(xiàn)全貌的量子計(jì)算,覆蓋了經(jīng)典、現(xiàn)代和未來算法發(fā)展的眾多代表性工作。
本書選材新穎,內(nèi)容豐富,適用于作為計(jì)算機(jī)學(xué)科以及相關(guān)學(xué)科算法課程的教材和參考書,同時也可作為從事算法研究的一本好的入門書籍。
前 言
本書是在加州大學(xué)Berkeley分校和San Diego分校本科生算法課程講義的基礎(chǔ)上,歷經(jīng)十年,逐漸整理、日益完善而成的。我們教授此門課程的方法在過去幾年間經(jīng)歷了巨大變革,它一方面照顧到了學(xué)生的背景(學(xué)生們除編程之外并不具備正式而完善的應(yīng)用技巧),一方面反映了算法領(lǐng)域總體上走向成熟的趨勢,正如過去數(shù)十年我們已經(jīng)見證了的。隨著當(dāng)初的教學(xué)講義被逐漸提煉成娓娓道來的文字,我們也逐漸調(diào)整著課程的結(jié)構(gòu),以突出教學(xué)材料編排中蘊(yùn)含的“故事情節(jié)”。因此,本書的內(nèi)容經(jīng)過仔細(xì)選擇后才得以結(jié)集成篇。我們不求把此書編成一本算法百科全書,這使我們可以自由地把大多數(shù)傳統(tǒng)算法書籍未曾強(qiáng)調(diào)或忽略的主題包含進(jìn)來。
我們根據(jù)學(xué)生的特點(diǎn)(這些特點(diǎn)也是當(dāng)今計(jì)算機(jī)科學(xué)專業(yè)的大多數(shù)本科生所共有的),提煉出能使每個算法運(yùn)轉(zhuǎn)下去的簡潔數(shù)學(xué)思想,而不是沉湎于正式而冗長的理論證明。換言之,我們在活力和刻板之間,更強(qiáng)調(diào)前者。我們發(fā)現(xiàn),學(xué)生更能接受這種形式帶來的數(shù)學(xué)的生命力。正是在這些簡潔有力的數(shù)學(xué)思想的推動下,我們才得以展開我們的闡述。
一旦按照這種方式來理解算法,那么從它的歷史本源開始研究就顯得很有意義,并且,對于今天的我們來說,一方面,歷史的主題看似那樣的熟悉,另一方面,其與今天的對比卻又是那樣的顯著:數(shù)論、素性測試和因子分解。這就是本書第一部分的主題,此外它還包括RSA密碼系統(tǒng)、整數(shù)乘法的分治算法、排序與尋找中項(xiàng)以及快速Fourier變換。本書還包含其他三個部分:其中第二部分堪稱本書內(nèi)容最傳統(tǒng)的章節(jié),主要圍繞數(shù)據(jù)結(jié)構(gòu)和圖論展開。這一部分中,錯綜復(fù)雜的問題結(jié)構(gòu)和用于解決問題的簡潔明快的偽代碼形成了鮮明對比。如果希望以傳統(tǒng)的方式進(jìn)行講授,可以直接從本書的第二部分開始,這部分自成體系(在序言之后),如有需要,可再跳回第一部分。在本書的第一和第二部分,我們介紹了某些用于解決特定問題的技術(shù)(例如貪心算法和分治技術(shù));第三部分介紹一些強(qiáng)有力的算法設(shè)計(jì)技術(shù),它們被廣泛地用于解決實(shí)際問題:如動態(tài)規(guī)劃技術(shù)(一種新穎的可用于清除學(xué)生的傳統(tǒng)學(xué)習(xí)障礙的方法)和線性規(guī)劃技術(shù)(一種簡潔而直觀地處理單純形法、對偶問題以及原問題的簡化問題的技術(shù))。本書最后的第四部分介紹了對付困難問題的方法:NP完全性、各種啟發(fā)式算法以及量子算法,后者或許是當(dāng)今最前沿的課題。碰巧的是,我們關(guān)于算法的講述在本書的末尾又回到了最初討論的問題:針對因子分解問題的Shor量子算法。
本書包含了三個附加的脈絡(luò)。為了保持全書的可讀性(兼顧學(xué)生的不同需求和興趣)和邏輯的完整性,它們以三組自成系列的“灰色方框”形式出現(xiàn),分別對應(yīng)于一些算法技術(shù)的歷史背景、對所介紹算法如何在實(shí)際中應(yīng)用(突出了互聯(lián)網(wǎng)應(yīng)用)的描述,以及對相關(guān)數(shù)學(xué)知識的簡要闡釋。
我們的很多同事為此書的出版做出了重要貢獻(xiàn)。在此對Dimitris Achlioptas、Dorit Aharanov、Mike Clancy、Jim Demmel、Monika Henzinger、Mike Jordan、Milena Mihail、Gene Myers、Dana Randall、Satish Rao、Tim Roughgarden、Jonathan Shewchuk、Martha Sideri、Alistair Sinclair,以及David Wagner表示由衷的感謝,他們均對本書提出了寶貴意見,并對本書的初稿作了校對。Satish Rao、Leonard Schulman和Vijay Vazirani對本書幾個核心章節(jié)的內(nèi)容給出了重要建議。Gene Myers、Satish Rao、Luca Trevisan、Vijay Vazirani和Lofti Zadeh提供了本書的習(xí)題。最后,向加州大學(xué)Berkeley分校和San Diego分校的同學(xué)們表示感謝,是他們推動了本書的出版工作,并參與審閱本書的手稿。
目 錄
第0章 序言1
0.1 書籍和算法1
0.2 從Fibonacci數(shù)列開始3
0.3 大O符號6
習(xí)題9
第1章 數(shù)字的算法13
1.1 基本算術(shù)13
1.1.1 加法13
1.1.2 乘法和除法16
1.2 模運(yùn)算18
1.2.1 模的加法和乘法21
1.2.2 模的指數(shù)運(yùn)算21
1.2.3 Euclid的最大公因數(shù)算法23
1.2.4 Euclid算法的一種擴(kuò)展24
1.2.5 模的除法27
1.3 素性測試28
1.4 密碼學(xué)35
1.4.1 密鑰機(jī)制:一次一密亂碼本和AES36
1.4.2 RSA38
1.5 通用散列表40
1.5.1 散列表41
1.5.2 散列函數(shù)族41
習(xí)題44
第2章 分治算法53
2.1 乘法53
2.2 遞推式57
2.3 合并排序59
2.4 尋找中項(xiàng)62
2.5 矩陣乘法66
2.6 快速Fourier變換67
2.6.1 多項(xiàng)式的另一種表示法68
2.6.2 計(jì)算步驟的分治實(shí)現(xiàn)71
2.6.3 插值75
2.6.4 快速Fourier變換的細(xì)節(jié)78
習(xí)題83
第3章 圖的分解93
3.1 為什么是圖93
3.2 無向圖的深度優(yōu)先搜索96
3.2.1 迷宮探索96
3.2.2 深度優(yōu)先搜索99
3.2.3 無向圖的連通性100
3.2.4 前序和后序100
3.3 有向圖的深度優(yōu)先搜索101
3.3.1 邊的類型101
3.3.2 有向無環(huán)圖103
3.4 強(qiáng)連通部件105
3.4.1 定義有向圖的連通性105
3.4.2 一個有效的算法106
習(xí)題110
第4章 圖中的路徑119
4.1 距離119
4.2 廣度優(yōu)先搜索120
4.3 邊的長度122
4.4 Dijkstra算法123
4.4.1 廣度優(yōu)先搜索的一個改進(jìn)123
4.4.2 另一種解釋127
4.4.3 運(yùn)行時間129
4.5 優(yōu)先隊(duì)列的實(shí)現(xiàn)129
4.5.1 數(shù)組129
4.5.2 二分堆130
4.5.3 d堆131
4.6 含有負(fù)邊的圖的最短路徑131
4.6.1 負(fù)邊131
4.6.2 負(fù)環(huán)135
4.7 有向無環(huán)圖中的最短路徑135
習(xí)題136
第5章 貪心算法143
5.1 最小生成樹143
5.1.1 一個貪心方法144
5.1.2 分割性質(zhì)146
5.1.3 Kruskal算法147
5.1.4 一種用于分離集的數(shù)據(jù)結(jié)構(gòu)148
5.1.5 Prim算法153
5.2 Huffman編碼156
5.3 Horn公式160
5.4 集合覆蓋162
習(xí)題164
第6章 動態(tài)規(guī)劃173
6.1 重新審視有向無環(huán)圖的最短路徑問題173
6.2 最長遞增子序列175
6.3 編輯距離177
6.4 背包問題183
6.5 矩陣鏈?zhǔn)较喑?86
6.6 最短路徑問題189
6.7 樹中的獨(dú)立集193
習(xí)題195
第7章 線性規(guī)劃與歸約205
7.1 線性規(guī)劃簡介205
7.1.1 示例:利潤最大化206
7.1.2 示例:生產(chǎn)計(jì)劃210
7.1.3 示例:最優(yōu)帶寬分配212
7.1.4 線性規(guī)劃的變體214
7.2 網(wǎng)絡(luò)流216
7.2.1 石油運(yùn)輸216
7.2.2 最大流216
7.2.3 對算法的深入觀察217
7.2.4 最優(yōu)性的保證221
7.2.5 算法的效率222
7.3 二部圖的匹配222
7.4 對偶224
7.5 零和博弈(游戲)228
7.6 單純形算法232
7.6.1 n維空間中的頂點(diǎn)和鄰居232
7.6.2 算法233
7.6.3 補(bǔ)遺236
7.6.4 單純形法的運(yùn)行時間238
7.7 后記:電路值241
習(xí)題243
第8章 NP-完全問題253
8.1 搜索問題253
8.2 NP-完全問題264
8.3 所有的歸約268
習(xí)題286
第9章 NP-完全問題的處理293
9.1 智能窮舉搜索294
9.1.1 回溯294
9.1.2 分支定界297
9.2 近似算法299
9.2.1 頂點(diǎn)覆蓋300
9.2.2 聚類302
9.2.3 TSP304
9.2.4 背包問題306
9.2.5 逼近的層次307
9.3 局部搜索中的啟發(fā)方法308
9.3.1 重新審視旅行商問題308
9.3.2 圖劃分311
9.3.3 處理局部最優(yōu)313
習(xí)題316
第10章 量子算法321
10.1 量子位元、疊加狀態(tài)和度量321
10.2 算法設(shè)計(jì)325
10.3 量子傅立葉變換327
10.4 周期性329
10.5 量子電路331
10.5.1 基本量子門331
10.5.2 量子電路的兩種基本類型332
10.5.3 量子傅立葉變換電路333
10.6 將因子分解問題轉(zhuǎn)化為周期求解問題335
10.7 因子分解的量子算法337
習(xí)題339
歷史背景及深入閱讀的資料343