本書是算法入門指南,基于Python語言講述算法實現(xiàn)。具體內(nèi)容包括:搜索、排序和最優(yōu)化算法;以人為本的算法,幫助人們決定如何接棒球或自助餐吃多少;先進(jìn)的高級算法,比如機器學(xué)習(xí)和人工智能相關(guān)算法;古代文明時期的算法,如古埃及和俄羅斯農(nóng)夫如何使用算法來實現(xiàn)乘法,古希臘人如何使用算法來找到最大公約數(shù),以及江戶時代的日本學(xué)者如何設(shè)計幻方生成算法。
Bradford Tuckfield,博士,數(shù)據(jù)科學(xué)家、咨詢師,是《R無監(jiān)督學(xué)習(xí)實戰(zhàn)》(Applied Unsupervised Learning with R)一書的共同作者。研究成果發(fā)表在數(shù)學(xué)、商業(yè)管理和醫(yī)學(xué)等領(lǐng)域的頂級學(xué)術(shù)期刊。他還為雜志和政策期刊撰寫文化相關(guān)的文章。
譯者:唐李洋,女,博士,畢業(yè)于合肥工業(yè)大學(xué)管理科學(xué)與工程系,F(xiàn)就職于中國電子科技集團(tuán)公司第三十八研究所,曾游學(xué)美國、香港,數(shù)據(jù)挖掘與大數(shù)據(jù)分析研究經(jīng)驗頗豐,在相關(guān)領(lǐng)域重要國際期刊及會議發(fā)表論文數(shù)篇。譯有《計算機科學(xué)中的數(shù)學(xué)》、《R語言高性能編程》、《大數(shù)據(jù)猩球:海量數(shù)據(jù)處理實踐指南》、《流式架構(gòu):Kafka與MapR Streams數(shù)據(jù)流處理》、《高可用MySQL》(第1和第2版)等書。
1 用算法解決問題 1
分析式方法 2
伽利略模型 2
解x策略 4
內(nèi)在物理學(xué)家 5
算法式方法 6
用脖子“思考” 6
應(yīng)用查普曼算法 10
用算法解決問題 11
小結(jié) 12
2 算法簡史 13
俄羅斯農(nóng)夫乘法(RPM) 14
手工實現(xiàn)RPM 14
用Python實現(xiàn)RPM 18
歐幾里得算法 20
手工實現(xiàn)歐幾里得算法 21
用Python實現(xiàn)歐幾里得算法 21
日本幻方 22
用Python創(chuàng)建洛書幻方 23
用Python實現(xiàn)Kurushima算法 24
小結(jié) 36
3 最大化和最小化 37
設(shè)定稅率 37
正確步驟 38
將邁步變成算法 41
梯度上升存在的問題 43
局部極值問題 45
教育和終身收入 45
沿著教育維度爬坡——正確方式 47
從最大化到最小化 48
通用爬山法 51
什么時候不要使用算法 52
小結(jié) 53
4 排序和搜索 54
插入排序 55
插入排序中的插入 55
通過插入完成排序 57
衡量算法效率 59
為什么追求效率 59
準(zhǔn)確衡量時間 60
計算步數(shù) 61
對比眾所周知的函數(shù) 64
增加理論精度 67
使用大O符號 68
歸并排序 69
歸并操作 70
從歸并到排序 72
睡眠排序 76
從排序到搜索 78
二進(jìn)制搜索 78
二進(jìn)制搜索的應(yīng)用 80
小結(jié) 81
5 純數(shù)學(xué) 82
連分式 82
Phi的壓縮和交換 83
連分式的更多知識 85
生成連分式的算法 86
從小數(shù)到連分式 90
從分?jǐn)?shù)到根數(shù) 92
平方根 93
巴比倫算法 93
Python中的平方根 95
隨機數(shù)生成器 96
隨機的可能性 96
線性同余生成器 97
評價PRNG 98
隨機性的Diehard測試 100
線性反饋移位寄存器 102
小結(jié) 105
6 高級優(yōu)化 106
旅行商問題 107
問題定義 107
智力對比蠻力 112
最近鄰算法 113
實現(xiàn)最近鄰搜索 113
進(jìn)一步改進(jìn) 115
貪婪算法 118
引入溫度函數(shù) 118
模擬退火 120
算法調(diào)優(yōu) 123
避免重大退步 126
允許重置 127
測試性能 128
小結(jié) 130
7 幾何學(xué) 131
郵政局長問題 131
三角形基礎(chǔ) 134
高級研究生級的三角形知識 137
尋找外心 137
提升繪圖能力 140
Delaunay三角剖分 141
增量生成Delaunay三角剖分 143
實現(xiàn)Delaunay三角網(wǎng) 146
從Delaunay到Voronoi 151
小結(jié) 155
8 語言 157
為什么語言類算法很難 157
插入空格 158
定義單詞列表并找到單詞 159
處理復(fù)合詞 161
檢查空格間的潛在單詞 161
導(dǎo)入語料庫檢查有效詞 163
找到潛在單詞的前半部分和后半部分 164
短語補全 168
分詞并求n-gram 168
我們的策略 169
找到候選n+1-gram 170
基于頻次選擇短語 171
小結(jié) 173
9 機器學(xué)習(xí) 174
決策樹 174
構(gòu)建決策樹 176
下載數(shù)據(jù)集 176
查看數(shù)據(jù) 177
分割數(shù)據(jù) 178
更聰明的分割 180
選擇分裂變量 182
增加深度 184
評估決策樹 187
過度擬合問題 189
改進(jìn)和優(yōu)化 192
隨機森林 193
小結(jié) 193
10 人工智能 194
點格棋 195
畫棋盤 196
游戲描述 197
游戲得分 198
博弈樹及如何獲勝 200
構(gòu)建樹 202
獲勝 205
改進(jìn) 209
小結(jié) 210
11 勇往直前 212
用算法做更多事情 213
構(gòu)建聊天機器人 214
文本向量化 216
向量相似度 218
變得更快更好 220
雄心勃勃的算法 221
解開最深的奧秘 224