ChatGPT掀起了現象級的風暴,趕超ChatGPT潮流,算法突破是關鍵。
本書介紹了若干常見算法,涉及排序、哈希、動態(tài)規(guī)劃與近似算法、高斯消去法、圖論與線性規(guī)劃、無約束優(yōu)化、迭代法、插值與擬合等。本書在介紹算法的同時,結合了作者自己對數學背景、應用場景的理解,便于讀者把握算法的核心思想。而且,本書不僅指出了哪些算法可以解決問題,還指出了哪些算法可以更好地解決問題,便于讀者深入理解算法。本書盡可能地避開了以應試為導向的灌輸式講解,力求引起讀者的興趣并擴大其視野,例如在介紹哈希時,講解了如何將哈希的算法思想運用于相似性搜索、負載均衡等多個實際問題中;又如在介紹高斯消去法時,講解了相關的數學理論及編程實現上的具體技巧,并將其運用于對大規(guī)模稀疏線性方程組的求解,等等。
本書面向有一定高等數學、編程語言基礎及對算法有初步了解的讀者,包括高等院校的學生、程序員、算法分析人員及設計人員等,旨在幫助讀者進一步學習算法,理解與算法相關的理論基礎和應用實例。
ChatGPT掀起了現象級的風暴,趕超ChatGPT潮流,算法突破是關鍵。
許多經典的算法教科書都詳盡地介紹了算法的各個知識點,但在覆蓋面廣的同時難免會忽略許多細節(jié)問題。例如,哪些算法真正值得運用到實際問題中,算法有哪些變種值得我們了解,算法背后有哪些數學理論支撐,等等。
本書討論了計算機算法相關的若干話題,在介紹算法的同時結合了作者自己對數學背景、應用場景的理解,便于讀者把握算法的核心思想。而且,本書不僅指出了哪些算法可以解決問題,還指出了哪些算法可以更好地解決問題,這有助于我們對算法的深入理解。
本書總計 8 章,除了講解基本知識,還回答了許多相關的有趣問題。
- 排序:排序算法有很多種,在比較流行的編程語言中都有提供排序算法的庫函數,直接調用這些庫函數會非常簡單。但它們所使用的算法為何有效,這些算法與一些經典的排序算法又有什么區(qū)別?
- 哈希:在講解哈希算法時一般主要介紹哈希函數的作用及哈希表的不同實現方法。但將哈希函數運用于不同的問題時,最為巧妙的地方在于哈希函數的設計。對于不同領域的問題,哈希函數都有哪些有趣的形式?
- 動態(tài)規(guī)劃與近似算法:通常這兩類算法并不會放在一起去探討。在面對不同復雜性的問題時,它們會有怎樣的互補作用?
- 高斯消去法:算法的基本過程是很簡單的,但在實際使用中遠遠沒有那么簡單。如何保持計算的穩(wěn)定性?如何解決稀疏矩陣的計算效率問題?
- 圖論與線性規(guī)劃:圖論中的許多問題都可以用線性規(guī)劃去解決。圖論中的一些經典結論實質上也可以用線性規(guī)劃的相關定理去解釋。線性規(guī)劃作為一個更一般的工具,如何用于處理圖論問題? 無約束優(yōu)化:無約束優(yōu)化主要用于求解函數的最大值或最小值的問題。常用的這些方法為何有效?它們之間的差別在哪里?
- 迭代法:常見的迭代算法都有哪些?它們?yōu)槭裁从行В?/li>
- 插值與擬合:插值與擬合的思想是什么?有什么異同?如何運用于圖像處理?
本書已建立讀者交流群,歡迎加入該群,與更多同道中人互動。具體加群方式,請參見本書封底的讀者服務。
由于作者水平有限,書中難免有錯誤和不足之處,歡迎讀者批評和指正。
刁瑞、謝妍
? 刁瑞,畢業(yè)于中國科學院數學與系統(tǒng)科學研究院,博士期間的研究方向為最優(yōu)化方法。曾獲2009年英特爾杯全國計算機多核程序設計大賽第1名,以及2011年KDD Cup第2名等。
? 謝妍,畢業(yè)于中國科學院數學與系統(tǒng)科學研究院,博士期間的研究方向為并行有限元計算。曾在微軟互聯網工程院從事搜索研發(fā)相關工作。
第1章 排序 1
1.1 比較排序 ................................................................................................................ 1
1.1.1 梳排序.......................................................................................................... 2
1.1.2 堆排序.......................................................................................................... 4
1.1.3 歸并排序 ...................................................................................................... 5
1.1.4 快速排序 ...................................................................................................... 8
1.1.5 內省排序 ...................................................................................................... 10
1.1.6 Timsort ......................................................................................................... 11
1.2 非比較排序............................................................................................................. 14
1.2.1 桶排序.......................................................................................................... 14
1.2.2 基數排序 ...................................................................................................... 15
1.3 總結........................................................................................................................ 16
第2章 哈希 17
2.1 基本概念與實現..................................................................................................... 17
2.1.1 哈希函數 ...................................................................................................... 17
2.1.2 哈希表.......................................................................................................... 19
2.2 哈希的應用............................................................................................................. 20
2.2.1 相似性搜索 .................................................................................................. 20
2.2.2 信息安全 ...................................................................................................... 23
2.2.3 比特幣.......................................................................................................... 25
2.2.4 負載均衡 ...................................................................................................... 26
第3章 動態(tài)規(guī)劃與近似算法 29
3.1 基本概念 ................................................................................................................ 29
3.1.1 動態(tài)規(guī)劃 ...................................................................................................... 29
3.1.2 計算復雜性 .................................................................................................. 30
3.2 字符串的編輯距離 ................................................................................................. 30
3.2.1 問題引入 ...................................................................................................... 31
3.2.2 動態(tài)規(guī)劃算法............................................................................................... 33
3.2.3 滾動數組優(yōu)化............................................................................................... 35
3.2.4 上界限制 ...................................................................................................... 36
3.2.5 解的回溯 ...................................................................................................... 37
3.2.6 分治算法 ...................................................................................................... 38
3.2.7 多個字符串的編輯距離 ............................................................................... 41
3.3 子集和問題............................................................................................................. 43
3.3.1 問題引入 ...................................................................................................... 43
3.3.2 子集和問題的動態(tài)規(guī)劃算法........................................................................ 43
3.3.3 最優(yōu)化問題 .................................................................................................. 44
3.3.4 滾動數組的技巧........................................................................................... 45
3.3.5 貪婪算法 ...................................................................................................... 46
3.3.6 松弛動態(tài)規(guī)劃............................................................................................... 47
3.3.7 相關問題 ...................................................................................................... 48
3.4 旅行商問題............................................................................................................. 50
3.4.1 問題引入 ...................................................................................................... 50
3.4.2 動態(tài)規(guī)劃算法............................................................................................... 52
3.4.3 一筆畫問題 .................................................................................................. 52
3.4.4 Christofides算法 .......................................................................................... 54
3.4.5 Lin-Kernighan算法 ...................................................................................... 55
3.5 總結........................................................................................................................ 58
第4章 高斯消去法 59
4.1 問題引入 ................................................................................................................ 59
4.2 矩陣編程基礎......................................................................................................... 60
4.3 三角方程組............................................................................................................. 62
4.3.1 三角矩陣 ...................................................................................................... 62
4.3.2 三角矩陣的存儲........................................................................................... 63
4.3.3 三角方程組求解........................................................................................... 64
4.4 高斯消去法的原理 ................................................................................................. 66
4.4.1 算法概述 ...................................................................................................... 66
4.4.2 高斯變換 ...................................................................................................... 68
4.4.3 LU分解 ........................................................................................................ 69
4.4.4 Cholesky分解............................................................................................... 70
4.5 主元選擇 ................................................................................................................ 71
4.5.1 列選主元 ...................................................................................................... 71
4.5.2 全選主元 ...................................................................................................... 73
4.5.3 主元與計算量............................................................................................... 74
4.6 稀疏矩陣的編程基礎 ............................................................................................. 75
4.6.1 稀疏向量 ...................................................................................................... 76
4.6.2 稀疏矩陣 ...................................................................................................... 79
4.7 稀疏LU分解.......................................................................................................... 82
4.7.1 Markowitz算法 ............................................................................................ 82
4.7.2 最小度算法 .................................................................................................. 83
第5章 圖論與線性規(guī)劃 86
5.1 線性規(guī)劃基礎......................................................................................................... 86
5.1.1 Fourier Motzkin 消去法............................................................................... 89
5.1.2 基.................................................................................................................. 91
5.1.3 單純形方法 .................................................................................................. 93
5.1.4 對偶.............................................................................................................. 95
5.2 全單模矩陣詳解..................................................................................................... 98
5.2.1 關聯矩陣 ...................................................................................................... 98
5.2.2 全單模矩陣 .................................................................................................. 99
5.2.3 全單模矩陣與圖論....................................................................................... 100
5.2.4 全單模矩陣與線性規(guī)劃 ............................................................................... 103
5.3 圖論中的經典問題 ................................................................................................. 104
5.3.1 單源最短路問題........................................................................................... 104
5.3.2 二分圖的最大匹配與最小覆蓋問題 ............................................................ 106
5.3.3 最大流與最小割問題 ................................................................................... 108
5.4 延伸閱讀 ................................................................................................................ 109
5.4.1 逐步線性規(guī)劃............................................................................................... 109
5.4.2 半正定規(guī)劃 .................................................................................................. 111
第6章 無約束優(yōu)化 113
6.1 單峰函數的最值..................................................................................................... 114
6.1.1 三分法.......................................................................................................... 115
6.1.2 對分法.......................................................................................................... 115
6.1.3 黃金分割法 .................................................................................................. 116
6.1.4 小結.............................................................................................................. 117
6.2 無導數優(yōu)化方法..................................................................................................... 118
6.2.1 模式搜索法 .................................................................................................. 118
6.2.2 坐標下降法 .................................................................................................. 119
6.2.3 代理模型法 .................................................................................................. 120
6.3 導數優(yōu)化方法......................................................................................................... 121
6.3.1 線搜索.......................................................................................................... 122
6.3.2 梯度下降法 .................................................................................................. 123
6.3.3 共軛梯度法 .................................................................................................. 124
6.3.4 牛頓法.......................................................................................................... 127
6.3.5 擬牛頓法 ...................................................................................................... 128
6.4 最小二乘 ................................................................................................................ 132
6.4.1 線性最小二乘............................................................................................... 133
6.4.2 非線性最小二乘........................................................................................... 133
第7章 迭代法 136
7.1 線性方程組的迭代法 ............................................................................................. 136
7.1.1 一階定常格式迭代法 ................................................................................... 136
7.1.2 Krylov子空間算法....................................................................................... 142
7.1.3 無約束優(yōu)化方法........................................................................................... 147
7.2 非線性方程組的迭代法.......................................................................................... 147
7.2.1 不動點迭代 .................................................................................................. 148
7.2.2 Newton-Raphson迭代.................................................................................. 149
7.2.3 無約束優(yōu)化方法........................................................................................... 152
第8章 插值與擬合 153
8.1 插值........................................................................................................................ 153
8.1.1 常見的插值算法........................................................................................... 154
8.1.2 插值的應用 .................................................................................................. 158
8.2 擬合........................................................................................................................ 163
8.2.1 常見的擬合算法........................................................................................... 164
8.2.2 擬合的應用 .................................................................................................. 166
參考文獻 169