本書從算法設(shè)計(jì)策略和算法實(shí)際應(yīng)用兩方面入手,較為全面地介紹了6類常用的算法:蠻力法、分治法、貪心法、動(dòng)態(tài)規(guī)劃法、回溯法和分支限界法。本書以“算法設(shè)計(jì)基礎(chǔ)知識(shí)+算法經(jīng)典應(yīng)用案例”為主線,循序漸進(jìn)地講解了各章內(nèi)容,由淺入深地分析了各類算法的特點(diǎn),幫助讀者理解算法的基本概念、掌握算法的關(guān)鍵設(shè)計(jì)步驟和了解算法所適用的問題。本書每章均配有相關(guān)習(xí)題和實(shí)訓(xùn)內(nèi)容。通過練習(xí)與實(shí)踐,讀者可鞏固所學(xué)的內(nèi)容。
本書可以作為計(jì)算機(jī)相關(guān)專業(yè)算法設(shè)計(jì)與分析課程的教材,也適合計(jì)算機(jī)軟件開發(fā)人員和廣大計(jì)算機(jī)愛好者自學(xué)使用。
本書從算法設(shè)計(jì)策略和算法應(yīng)用兩個(gè)方面介紹了幾類常見算法,包括蠻力法、分治法、貪心算法、動(dòng)態(tài)規(guī)劃、回溯法和分支限界法等,各章內(nèi)容在編排上知識(shí)難度由淺入深,講解分析循序漸進(jìn),以幫助讀者理解算法的基本概念,掌握算法的關(guān)鍵設(shè)計(jì)步驟和了解算法適用的問題。
汪江樺,中國(guó)科學(xué)院大學(xué)博士、副教授,主要研究方向?yàn)樾畔⒎治雠c數(shù)據(jù)挖掘,發(fā)表核心期刊級(jí)以上級(jí)別學(xué)術(shù)論文10余篇,主持省部級(jí)項(xiàng)目3項(xiàng),作為主研人員參與國(guó)家自然科學(xué)基金項(xiàng)目2項(xiàng)。
湯建國(guó),電子科技大學(xué)博士、副教授,主要研究方向?yàn)榱S?jì)算與機(jī)器學(xué)習(xí),發(fā)表論文20余篇,其中SCI檢索論文4篇,EI檢索論文10余篇,中文核心期刊論文數(shù)篇;主持國(guó)家自然科學(xué)基金項(xiàng)目2項(xiàng),各類省部級(jí)項(xiàng)目5項(xiàng)。
第 1章 概論\t1
1.1 算法的基本概念 2
1.1.1 算法的含義 2
1.1.2 算法的作用 3
1.1.3 算法的特性 4
1.1.4 算法的描述 6
1.1.5 算法設(shè)計(jì)的步驟 8
1.2 算法分析 9
1.2.1 算法的時(shí)間復(fù)雜度與大O表示法 9
1.2.2 算法的時(shí)間復(fù)雜度分析 12
1.2.3 算法的空間復(fù)雜度分析 15
1.3 算法設(shè)計(jì)示例 16
1.4 本章小結(jié) 20
習(xí)題1 20
實(shí)訓(xùn)1 22
第 2章 蠻力法 25
2.1 蠻力法概述 26
2.1.1 蠻力法的基本思想 26
2.1.2 蠻力法解題格式 28
2.2 蠻力法的應(yīng)用 31
2.2.1 順序查找 31
2.2.2 冒泡排序 32
2.2.3 直接選擇排序 34
2.2.4 直接插入排序 36
2.3 蠻力法的分析與設(shè)計(jì) 37
2.3.1 百錢百雞問題 38
2.3.2 解數(shù)字謎 39
2.3.3 獄吏問題 41
2.4 蠻力法示例 43
2.5 本章小結(jié) 49
習(xí)題2 49
實(shí)訓(xùn)2 50
第3章 分治法 53
3.1 遞歸技術(shù) 54
3.1.1 遞歸的定義 54
3.1.2 遞歸的執(zhí)行過程 55
3.1.3 遞歸的設(shè)計(jì)方法 56
3.1.4 遞歸技術(shù)效率分析 59
3.1.5 遞歸過程 60
3.2 遞歸設(shè)計(jì)實(shí)例 63
3.3 分治法概述 66
3.3.1 分治法的基本思想 67
3.3.2 快速排序 69
3.3.3 二路歸并排序 71
3.3.4 二分查找 73
3.4 分治法示例 74
3.5 本章小結(jié) 77
習(xí)題3 78
實(shí)訓(xùn)3 79
第4章 貪心法 81
4.1 貪心法概述 82
4.1.1 貪心法的基本思想 82
4.1.2 活動(dòng)安排問題 83
4.1.3 幣種統(tǒng)計(jì)問題 86
4.2 貪心法的應(yīng)用 87
4.2.1 哈夫曼樹 87
4.2.2 哈夫曼編碼 88
4.2.3 最小生成樹 90
4.2.4 單源最短路徑 92
4.3 貪心法的分析與設(shè)計(jì) 94
4.3.1 背包問題 94
4.3.2 田忌賽馬問題 96
4.3.3 多機(jī)調(diào)度問題 98
4.4 貪心法示例 99
4.5 本章小結(jié) 102
習(xí)題4 102
實(shí)訓(xùn)4 104
第5章 動(dòng)態(tài)規(guī)劃法 105
5.1 動(dòng)態(tài)規(guī)劃法概述 106
5.1.1 動(dòng)態(tài)規(guī)劃法的基本思想 106
5.1.2 最優(yōu)決策表 106
5.2 動(dòng)態(tài)規(guī)劃法的應(yīng)用 112
5.2.1 斐波那契數(shù)列 112
5.2.2 數(shù)字塔問題 114
5.2.3 湊硬幣問題 115
5.2.4 0-1背包問題 117
5.3 動(dòng)態(tài)規(guī)劃法的分析與設(shè)計(jì) 120
5.4 動(dòng)態(tài)規(guī)劃法示例 124
5.5 本章小結(jié) 126
習(xí)題5 126
實(shí)訓(xùn)5 128
第6章 回溯法 131
6.1 回溯法概述 132
6.1.1 問題的解空間 132
6.1.2 回溯法的基本思想 133
6.1.3 0-1背包問題 134
6.2 回溯法示例 137
6.3 本章小結(jié) 147
習(xí)題6 147
實(shí)訓(xùn)6 149
第7章 分支限界法 151
7.1 分支限界法概述 152
7.1.1 分支限界法的基本思想 152
7.1.2 0-1背包問題 153
7.2 分支限界法示例 158
7.3 本章小結(jié) 163
習(xí)題7 163
實(shí)訓(xùn)7 164