關于我們
書單推薦
新書推薦
|
算法設計與分析 第2版 讀者對象:主要面向計算機專業(yè)本科生,以及其他需要學習計算機科學基本知識與了解計算機程序設計背后原理的讀者。
本書是作者在多年從事算法設計與分析課程教學和研究的基礎上編寫而成,系統(tǒng)地介紹了算法設計與分析的理論、方法和技術。內容圍繞兩條主線來組織。一條主線是介紹典范性的算法問題,如排序、選擇、圖遍歷等。 另一條主線是介紹典范性的算法設計分析策略,如分治、貪心、動態(tài)規(guī)劃等算法設計策略和對手分析、平攤分析等算法分析策略。本書中兩條主線交替進行,每條主線又各自分為基本和進階兩部分。
前言
教學建議 第一部分計算模型 第1 章抽象的算法設計與分析........... 2 1.1 RAM 模型的引入................... 2 1.1.1 計算的基本概念................... 2 1.1.2計算模型的基本概念. . . . . . . .. .. . . . . 3 1.1.3RAM 模型........................ 3 1.1.4計算模型的選擇:易用性與精確性........................... 5 1.2 抽象算法設計...................... 6 1.2.1 算法問題規(guī)約..................... 6 1.2.2 算法正確性證明:數(shù)學歸納法....... 7 1.3 抽象算法分析...................... 8 1.3.1 抽象算法的性能指標. . . . . . . .. .. . . . . 8 1.3.2 最壞情況時間復雜度分析.......... 9 1.3.3 平均情況時間復雜度分析......... 10 1.4 習題. .. . . . . . . . .. .. .. .. . . . . . . . . . .. .. 11 第2 章從算法的視角重新審視數(shù)學的概念. . . . . . . . . . .. .. .. .. . . . . 14 2.1 數(shù)學運算背后的算法操作......... 14 2.1.1 取整. x . 和. x . . . . . . . . . . .. .. .. .. . 14 2.1.2 對數(shù)log n . . . . .. .. .. . . . . . . . . . .. .. . 14 2.1.3 階乘n!. . . . .. .. .. .. . . . . . . . . . .. .. . 15 2.1.4 常用級數(shù)求和.f (i). . . . . . .. .. .. .. 16 2.1.5 期望E[X] ....................... 18 2.2 函數(shù)的漸近增長率................ 19 2.3 “分治遞歸”求解................. 21 2.3.1 替換法. .. .. . . . . . . . . . .. .. .. .. . . . . 21 2.3.2 分治遞歸與遞歸樹.. . . . . . . . . . .. .. .21 2.3.3 Master 定理. .. .. .. . . . . . . . . . .. .. .. 22 2.4 習題. . . . . . . . .. .. .. . . . . . . . . . .. .. .. .. 23 第二部分從蠻力到分治 第3 章蠻力算法設計................... 31 3.1 蠻力選擇與查找. . . . . . .. .. .. . . . . . . . 31 3.2 蠻力排序.. . . . . . .. .. .. .. . . . . . . . . . .. 32 3.2.1選擇排序. . . .. .. .. .. . . . . . . . . . .. .. 32 3.2.2插入排序. . . .. .. .. .. . . . . . . . . . .. .. 33 3.3 習題. . . . . . . . .. .. .. . . . . . . . . . .. .. .. .. 35 第4 章分治排序.. .. .. .. . . . . . .. .. .. .. . . . 37 4.1 快速排序. . . . . . . .. .. .. .. . . . . . . . . . .. 37 4.1.1插入排序的不足. .. .. . . . . . . . . . .. .. 37 4.1.2快速排序的改進. .. .. . . . . . . . . . .. .. 38 4.1.3最壞情況時間復雜度分析......... 39 4.1.4基于遞歸方程的平均情況時間復雜度分析. . . . . . .. .. .. . . . . . . . . . . 40 4.1.5基于指標隨機變量的平均情況時間復雜度分析. . . . . . .. .. .. . . . . . . . . . . 41 4.2 合并排序.. . . . . . .. .. .. .. . . . . . . . . . .. 43 4.3 基于比較的排序的下界. .. .. .. . . . . . 44 4.3.1決策樹的引入. . . . . . .. .. .. . . . . . . . . 45 4.3.2比較排序的最壞情況時間復雜度的下界. . . . . .. .. .. .. . . . . . . . .. .. .. 45 4.3.3比較排序的平均情況時間復雜度的下界. . . . . .. .. .. .. . . . . . . . .. .. .. 46 4.4 習題. . . . . . . . .. .. .. . . . . . . . . . .. .. .. .. 48 第5 章線性時間選擇................... 50 5.1 期望線性時間選擇................ 50 5.1.1選擇算法設計. . . . . . .. .. .. . . . . . . . . 50 5.1.2選擇算法分析. . . . . . .. .. .. . . . . . . . . 51 5.2 最壞情況線性時間選擇. .. .. .. . . . . . 52 5.2.1選擇算法設計. . . . . . .. .. .. . . . . . . . . 52 5.2.2選擇算法分析. .. . . . . . . . . . .. .. . . . . 53 5.3 習題. .. . . . . . . . .. .. .. .. . . . . . . . . . .. .. 54 第6 章對數(shù)時間查找................... 57 6.1 折半查找.. .. . . . . . . . .. .. .. .. . . . . . . . 57 6.1.1經典折半查找. .. . . . . . . . .. .. .. . . . . 57 6.1.2查找峰值. . . . . . . .. .. .. . . . . . . . . . .. 58 6.1.3計算√N ........................ 59 6.2 平衡二叉搜索樹. . . . . . . . .. .. .. . . . . . 59 6.2.1二叉搜索樹及其平衡性........... 59 6.2.2紅黑樹的定義. .. . . . . . . . . . .. .. . . . . 60 6.2.3紅黑樹的平衡性. .. .. .. .. . . . . . . . . . 62 6.3 習題. .. . . . . . . . .. .. .. .. . . . . . . . . . .. .. 62 第7 章分治算法設計要素. . . . . . . . . . .. .. .65 7.1 分治算法的關鍵特征. . . . . . . .. .. .. . 65 7.2 計算逆序對的個數(shù)................ 66 7.2.1依托于合并排序的逆序對計數(shù).. .. . 66 7.2.2原地的逆序對計數(shù).. .. . . . . . . . . . .. .67 7.3 整數(shù)乘法.. .. . . . . . . . .. .. .. .. . . . . . . . 68 7.3.1簡單分治. . . . . . . .. .. .. . . . . . . . . . .. 69 7.3.2更精細的分治. .. . . . . . .. .. .. .. . . . . 69 7.4 芯片檢測.. .. . . . . . . . .. .. .. .. . . . . . . . 70 7.5 習題. .. . . . . . . . .. .. .. .. . . . . . . . . . .. .. 71 第三部分從圖遍歷到圖優(yōu)化 第8 章圖的深度優(yōu)先遍歷. . . . . . . . . . .. .. .76 8.1 圖和圖遍歷. . . . . . . .. .. .. .. . . . . . . . . . 76 8.2 有向圖上的深度優(yōu)先遍歷......... 77 8.2.1遍歷框架. . . . . . . .. .. .. . . . . . . . . . .. 77 8.2.2深度優(yōu)先遍歷樹. .. .. .. .. . . . . . . . . . 79 8.2.3活動區(qū)間. . . . . . . .. .. .. . . . . . . . . . .. 79 8.3 有向圖上深度優(yōu)先遍歷的應用.. .. .82 8.3.1拓撲排序. . . . . . . .. .. .. . . . . . . . . . .. 82 8.3.2關鍵路徑. . . . . . . .. .. .. . . . . . . . . . .. 85 8.3.3有向圖中的強連通片............. 87 8.4 無向圖上的深度優(yōu)先遍歷......... 91 8.4.1無向圖的深度優(yōu)先遍歷樹......... 91 8.4.2無向圖的深度優(yōu)先遍歷框架....... 92 8.5 無向圖上深度優(yōu)先遍歷的應用.. .. .93 8.5.1容錯連通. . . .. .. .. .. . . . . . . . . . .. .. 93 8.5.2尋找割點. . . .. .. .. .. . . . . . . . . . .. .. 94 8.5.3尋找橋. . . . . . . . . . .. .. .. .. . . . . . . . . 96 8.6 習題. . . . . . . . . . .. .. .. . . . . . . . .. .. .. .. 97 第9 章圖的廣度優(yōu)先遍歷............. 102 9.1 廣度優(yōu)先遍歷. . . . . . . .. .. .. .. . . . . . 102 9.1.1廣度優(yōu)先遍歷框架.............. 103 9.1.2有向圖的廣度優(yōu)先遍歷樹. . . . . . . . 105 9.1.3無向圖的廣度優(yōu)先遍歷樹. . . . . . . . 106 9.2 廣度優(yōu)先遍歷的應用. . . . .. .. .. . . . 107 9.2.1判斷二分圖. .. . . . . . . . . . .. .. .. .. . 107 9.2.2尋找k 度子圖.. .. .. . . . . . . . .. .. .. 108 9.3 習題. . . . . . . . . .. .. .. . . . . . . . . . .. .. .. 109 第10 章圖優(yōu)化問題的貪心求解. . . . . . ..111 10.1最小生成樹問題與給定源點最短路徑問題. . . . .. .. .. . . . . . . . . . 111 10.2Prim 算法. .. . . . . . . . .. .. .. . . . . . . . .112 10.2.1Prim 算法的正確性. .. . . . . . . . . . . 113 10.2.2Prim 算法的實現(xiàn). . . . . . .. .. .. . . . 116 10.2.3Prim 算法的分析. . . . . . .. .. .. . . . 117 10.3Kruskal 算法. . . . . . . . . .. .. .. .. . . . . 118 10.3.1Kruskal 算法的正確性. . . . . . . . . . .119 10.3.2Kruskal 算法的實現(xiàn)與分析...... 120 10.4最小生成樹貪心構建框架MCE. . . . . . . . . . .. .. .. . . . . . . . . . .. ..120 10.4.1從MCE 框架的角度分析Prim 算法..................... 121 10.4.2從MCE 框架的角度分析Kruskal 算法. .. . . . . . . . . . .. .. .. . 122 10.5Dijkstra 算法. .. .. . . . . . . . . . .. .. .. . 123 10.5.1Dijkstra 算法的設計.. . . . . . . . . . ..123 10.5.2Dijkstra 算法的正確性證明與性能分析. .. . . . . . . . . . .. .. .. .. . . 125 10.6貪心遍歷框架BestFS. .. .. .. . . . . . 126 10.7 習題. . . . . . . . . .. .. . . . . . . . . . .. .. .. .128 第11 章貪心算法設計要素............ 134 11.1貪心算法的基本結構. . .. .. .. .. . . 134 11.2相容任務調度問題.............. 134 11.2.1直覺的嘗試. . . .. .. .. . . . . . . . . . .. 135 11.2.2基于任務結束時間的貪心算法. . . 135 11.3Hu.man 編碼.. .. .. . . . . . . . .. .. .. . 136 11.3.1可變長度編碼.. . . . . . . . . . .. .. .. .136 11.3.2最優(yōu)編碼方案的性質........... 137 11.3.3貪心的Hu.man 編碼........... 139 11.4 習題.. .. . . . . . . . .. .. .. . . . . . . . . . .. .139 第12 章圖優(yōu)化問題的動態(tài)規(guī)劃求解. . . 142 12.1有向無環(huán)圖上的給定源點最短路徑問題. . . . . . . . .. .. . . . . . . . 142 12.2所有點對最短路徑問題......... 143 12.2.1傳遞閉包問題和Shortcut 算法... 143 12.2.2所有點對最短路徑:基于路徑長度的遞歸........... 145 12.2.3Floyd-Warshall 算法:基于中繼節(jié)點范圍的遞歸. . . . . . . 146 12.3 習題.. .. . . . . . . . . . .. .. . . . . . . . . . .. .147 第13 章動態(tài)規(guī)劃算法設計要素. . . . . . . .150 13.1動態(tài)規(guī)劃的動機. . . . . . . .. .. .. . . . . 150 13.2動態(tài)規(guī)劃的引入. . . . . . . .. .. .. . . . . 151 13.2.1基于樸素遍歷的遞歸........... 152 13.2.2未做規(guī)劃的遞歸............... 152 13.2.3采用動態(tài)規(guī)劃的遞歸........... 153 13.3動態(tài)規(guī)劃的關鍵特征. . . . . . .. .. .. 155 13.4動態(tài)規(guī)劃應用舉例.............. 156 13.4.1編輯距離問題.. . . . . . . . . . .. .. .. .156 13.4.2硬幣兌換問題.. . . . . . . . . . .. .. .. .158 13.4.3最大和連續(xù)子序列問題......... 159 13.4.4相容任務調度問題............. 160 13.5習題.. .. . . . . . .. .. .. .. . . . . . . . . . .. .161 第四部分圍繞數(shù)據(jù)結構的算法設計 第14 章堆與偏序關系.. .. .. .. . . . . . . . . . 168 14.1堆的定義. .. . . . . . . . .. .. .. .. . . . . . . 168 14.2堆的抽象維護.. . . . . . . . . . .. .. .. . . 168 14.2.1堆的修復. . . . . . . . .. .. .. .. . . . . . . 169 14.2.2堆的構建. . . . .. .. .. .. . . . . . . . . . . 169 14.3堆的具體實現(xiàn). . . . . . . . . .. .. .. . . . . 171 14.4堆的應用. . . . . . .. .. .. .. . . . . . . . . . . 172 14.4.1堆排序.. .. .. . . . . . . . . . .. .. . . . . . 172 14.4.2基于堆實現(xiàn)優(yōu)先隊列........... 173 14.5 習題. . . . . . . .. .. .. . . . . . . . . . .. .. .. .174 第15 章并查集與動態(tài)等價關系. . . . . . ..176 15.1動態(tài)等價關系. . . . . . . . . .. .. . . . . . . 176 15.2基于根樹的基礎實現(xiàn):普通“并”+普通“查”. .. .. .. . . .177 15.3保證合并的平衡性:加權“并”+普通“查”. .. .. .. . . .178 15.4降低查找的代價:加權“并”+路徑壓縮“查”.. .. . 179 15.5 習題. . . . . . . . . .. .. . . . . . . . . . .. .. .. .180 第16 章哈希表與查找.. .. . . . . . . . . . .. .. 182 16.1直接尋址表:查找表的蠻力實現(xiàn). .. .. . . . . . . . . . .. .. .. ..182 16.2哈希表的基本原理.............. 183 16.3封閉尋址沖突消解.............. 183 16.4開放尋址沖突消解.............. 185 16.5 習題. . . . . . . . . .. .. . . . . . . . . . .. .. .. .188 第17 章有限自動機與串匹配. .. . . . . . . . 189 17.1蠻力串匹配..................... 189 17.2基于有限自動機的串匹配. . . . . .. 190 17.3從有限自動機的角度理解KMP 算法....................... 191 17.3.1對傳統(tǒng)匹配自動機的改進.. . . . . . 191 17.3.2自動機構建的原理............. 192 17.3.3KMP 算法的實現(xiàn).. .. . . . . . .. .. .. 193 17.4習題. . . . . . . . . .. .. . . . . . . . . . .. .. .. .194 第五部分算法分析進階 第18 章平攤分析. .. . . . . . . . . . .. .. .. .. . . 198 18.1平攤分析的動機. . . .. .. .. .. . . . . . . 198 18.2平攤分析的基本過程. . .. .. .. .. . . 199 18.3MultiPop 棧. . . . . . . . .. .. .. . . . . . . . . 200 18.4 數(shù)組擴充. . . . . . . . . . .. .. .. .. . . . . . . 201 18.5 二進制計數(shù)器.. . . . . . . . . . .. .. .. . . 202 18.6 基于棧實現(xiàn)隊列. . . . . . . .. .. .. . . . . 203 18.7 習題.. .. . . . . . . . . . .. .. . . . . . . . . . .. .204 第19 章對手論證. .. .. .. . . . . . . . . . .. .. .. 207 19.1 對手論證的基本形式. . . . . . . . .. .. 207 19.2 選擇最大或最小元素. . . . . . .. .. .. 207 19.3 同時選擇最大和最小元素. . . . . . . 208 19.4 選擇次大元素.. . . . . . . . . . .. .. .. . . 209 19.5 選擇中位數(shù)..................... 211 19.6 習題.. .. . . . . . . . .. .. .. . . . . . . . . . .. .212 第六部分計算復雜性初步 第20 章問題與歸約................... 216 20.1 NP 問題. . . . . . . . . . .. .. .. .. . . . . . . . 216 20.1.1 優(yōu)化問題和判定問題........... 216 20.1.2 P 問題的定義. . . . . . . . . .. .. .. .. . 216 20.1.3 NP 問題的定義. .. .. .. .. . . . . . . . .217 20.2 問題間的歸約. . . . . . . .. .. .. . . . . . . 218 20.2.1 歸約的定義. .. .. . . . . . . . . . .. .. .. 218 20.2.2 歸約的代價與問題難度的比較. .. 219 20.3 習題. . . . . . . .. .. .. . . . . . . . . . .. .. .. .219 第21 章NP 完全性理論初步.. .. .. .. . . . 221 21.1 NP 完全問題的定義. . . . .. .. .. . . . 221 21.2 NP 完全性證明的初步知識. . . .. . 222 21.2.1 一般問題和特例問題........... 222 21.2.2 等價問題. . . . .. .. .. .. . . . . . . . . . . 223 21.3 習題. . . . . . . .. .. .. . . . . . . . . . .. .. .. .224 附錄A 數(shù)學歸納法. .. .. . . . . . . . . . .. .. .. . 226 附錄B 二叉樹. . . . . . . . .. .. .. . . . . . . . . . .. .227 參考文獻................................ 228
你還可能感興趣
我要評論
|