程序員必會的40種算法 40 Algorithms Every Programmer Should Know Get to grips with writing algorithms with the help of case studies and their implementation in Python

Imran Ahmad

買這商品的人也買了...

商品描述

本書致力於利用算法求解實際問題,分為三部分。
第一部分介紹算法的核心內容,探討什麼是算法、如何設計算法,
同時學習在算法中使用的數據結構,還深入講解排序算法、
查找算法和求解圖問題的算法。
第二部分討論各種機器學習算法,
包括無監督機器學習算法和傳統監督學習算法,詳細討論一些自然語言處理算法,以及推薦引擎。
第三部分討論更高級的算法,重點討論密碼算法和大規模算法,
還探討在算法實現時應該考慮的實際因素。
此外,本書還包含一些案例分析
(如天氣預測、推文聚類和電影推薦引擎),用來說明如何才能最佳地應用這些算法。

作者簡介

Imran Ahmad

伊姆蘭是一名谷歌認證講師,多年來一直在谷歌和學習樹(Learning Tree)任教,
主要教授Python、機器學習、算法、大數據和深度學習。
他在攻讀博士學位期間基於線性規劃方法提出了名為ATSRA的新算法,用於雲計算環境中資源的優化分配。
近4年來,他一直在加拿大聯邦政府的高級分析實驗室參與一個備受關注的機器學習項目。
該項目旨在開發機器學習算法,使移民過程自動化。
他目前正致力於開發最優地使用GPU來訓練複雜的機器學習模型的算法。

目錄大綱

譯者序
前言
關於作者
關於審校者
第一部分 基礎與核心算法
第1章 算法概述2
1.1 什麼是算法2
1.2 描述算法邏輯4
1.2.1 理解偽代碼4
1.2.2 使用代碼片段6
1.2.3 制定執行計劃6
1.3 Python包簡介7
1.3.1 Python包8
1.3.2 通過Jupyter Notebook執行Python9
1.4 算法設計技術10
1.4.1 數據維度11
1.4.2 計算維度12
1.5 性能分析13
1.5.1 空間複雜度分析13
1.5.2 時間複雜度分析14
1.5.3 性能評估14
1.5.4 選擇算法15
1.5.5 大O記號15
1.6 驗證算法19
1.6.1 精確算法、近似算法和隨機算法19
1.6.2 可解釋性20
1.7 小結20

第2章 算法中的數據結構21
2.1 Python中的數據結構21
2.1.1 列表22
2.1.2 元組26
2.1.3 字典27
2.1.4 集合28
2.1.5 數據幀30
2.1.6 矩陣32
2.2 抽像數據類型33
2.2.1 向量33
2.2.2 棧34
2.2.3 隊列36
2.2.4 棧和隊列背後的基本思想37
2.2.5 樹38
2.3 小結40

第3章 排序算法和查找算法41
3.1 排序算法簡介41
3.1.1 在Python中交換變量42
3.1.2 冒泡排序42
3.1.3 插入排序44
3.1.4 歸併排序46
3.1.5 希爾排序48
3.1.6 選擇排序50
3.2 查找算法簡介51
3.2.1 線性查找52
3.2.2 二分查找52
3.2.3 插值查找53
3.3 實際應用54
3.4 小結56

第4章 算法設計57
4.1 算法設計基本概念57
4.1.1 第一點—所設計算法是否能產生預期的結果58
4.1.2 第二點—所設計算法是否是獲取結果的方法58
4.1.3 第三點—所設計算法在更大的數據集上表現如何61
4.2 理解算法策略61
4.2.1 分治策略62
4.2.2 動態規劃策略64
4.2.3 貪心算法64
4.3 實際應用—求解TSP65
4.3.1 使用蠻力策略66
4.3.2 使用貪心算法68
4.4 PageRank算法70
4.4.1 問題定義70
4.4.2 實現PageRank算法70
4.5 了解線性規劃73
4.6 實例—用線性規劃實現產量規劃73
4.7 小結76

第5章 圖算法77
5.1 圖的表示77
5.1.1 圖的類型79
5.1.2 特殊類型的邊81
5.1.3 自我中心網絡82
5.1.4 社交網絡分析82
5.2 網絡分析理論簡介83
5.2.1 理解最短路徑83
5.2.2 創建鄰域84
5.2.3 理解中心性度量85
5.2.4 用Python計算中心性指標87
5.3 理解圖的遍歷88
5.3.1 廣度優先搜索89
5.3.2 深度優先搜索92
5.4 實例—欺詐分析93
5.4.1 進行簡單的欺詐分析96
5.4.2 瞭望塔欺詐分析法97
5.5 小結99

第二部分 機器學習算法
第6章 無監督機器學習算法102
6.1 無監督學習簡介102
6.1.1 數據挖掘生命週期中的無監督學習103
6.1.2 無監督學習的當前研究趨勢105
6.1.3 實例106
6.2 理解聚類算法107
6.2.1 量化相似性107
6.2.2 分層聚類113
6.2.3 評估聚類效果115
6.2.4 聚類算法的應用115
6.3 降維116
6.3.1 主成分分析116
6.3.2 主成分分析的局限性118
6.4 關聯規則挖掘119
6.4.1 實例119
6.4.2 市場購物籃分析119
6.4.3 關聯規則120
6.4.4 排序規則122
6.4.5 關聯分析算法123
6.5 實例—聚類相似推文127
6.5.1 主題建模128
6.5.2 聚類128
6.6 異常檢測算法129
6.6.1 基於聚類的異常檢測129
6.6.2 基於密度的異常檢測129
6.6.3 基於支持向量機的異常檢測129
6.7 小結130

第7章 傳統監督學習算法131
7.1 理解監督機器學習131
7.1.1 描述監督機器學習132
7.1.2 理解使能條件134
7.1.3 區分分類器和回歸器134
7.2 理解分類算法135
7.2.1 分類器挑戰性問題135
7.2.2 評估分類器139
7.2.3 分類器的各個階段142
7.2.4 決策樹分類算法143
7.2.5 理解集成方法146
7.2.6 邏輯回歸149
7.2.7 支持向量機算法151
7.2.8 理解樸素貝葉斯算法153
7.2.9 各種分類算法的勝者156
7.3 理解回歸算法156
7.3.1 回歸器挑戰性問題156
7.3.2 線性回歸158
7.3.3 回歸樹算法162
7.3.4 梯度提升回歸算法163
7.3.5 各種回歸算法的勝者163
7.4 實例—預測天氣164
7.5 小結166

第8章 神經網絡算法167
8.1 理解人工神經網絡168
8.2 人工神經網絡的演化169
8.3 訓練神經網絡171
8.3.1 解析神經網絡結構171
8.3.2 定義梯度下降172
8.3.3 激活函數173
8.4 工具和框架178
8.4.1 Keras178
8.4.2 理解TensorFlow181
8.4.3 理解神經網絡的類型183
8.5 遷移學習185
8.6 實例—用深度學習實現欺詐檢測186
8.7 小結189

第9章 自然語言處理算法190
9.1 自然語言處理簡介190
9.1.1 理解自然語言處理術語191
9.1.2 自然語言工具包192
9.2 基於詞袋的自然語言處理193
9.3 詞嵌入簡介195
9.3.1 詞的鄰域195
9.3.2 詞嵌入的性質195
9.4 用循環神經網絡實現自然語言處理196
9.5 用自然語言處理實現情感分析197
9.6 實例—電影評論情感分析198
9.7 小結200

第10章 推薦引擎201
10.1 推薦系統簡介201
10.2 推薦引擎的類型202
10.2.1 基於內容的推薦引擎202
10.2.2 協同過濾推薦引擎204
10.2.3 混合推薦引擎205
10.3 理解推薦系統的局限性207
10.3.1 冷啟動問題207
10.3.2 元數據需求207
10.3.3 數據稀疏性問題207
10.3.4 由社會影響產生的偏差207
10.3.5 有限的數據207
10.4 實際應用領域208
10.5 實例—創建推薦引擎208
10.6 小結210

第三部分 高 級 主 題
第11章 數據算法212
11.1 數據算法簡介212
11.2 數據存儲算法簡介213
11.3 流數據算法簡介216
11.4 數據壓縮算法簡介216
11.5 實例—推文實時情感分析218
11.6 小結221

第12章 密碼算法222
12.1 密碼算法簡介222
12.1.1 理解最薄弱環節的重要性223
12.1.2 基本術語223
12.1.3 理解安全性需求224
12.1.4 理解密碼基本設計225
12.2 理解加密技術類型228
12.2.1 加密哈希函數228
12.2.2 對稱加密231
12.2.3 非對稱加密233
12.3 實例—機器學習模型部署時的安全問題236
12.3.1 MITM攻擊236
12.3.2 避免偽裝238
12.3.3 數據加密和模型加密238
12.4 小結240

第13章 大規模算法241
13.1 大規模算法簡介241
13.1.1 定義精心設計的大規模算法241
13.1.2 術語242
13.2 並行算法設計242
13.2.1 阿姆達爾定律243
13.2.2 任務粒度245
13.2.3 負載均衡246
13.2.4 局部化問題246
13.2.5 在Python中啟用並發處理246
13.3 制定多資源處理策略246
13.3.1 CUDA簡介247
13.3.2 集群計算250
13.3.3 混合策略251
13.4 小結252

第14章 實踐中要考慮的要素253
14.1 實踐要素簡介253
14.2 算法的可解釋性254
14.3 理解倫理和算法258
14.3.1 使用學習算法易出現的問題258
14.3.2 理解倫理因素259
14.4 減少模型偏差260
14.5 處理NP難問題261
14.5.1 簡化問題261
14.5.2 改造類似問題的已知求解方案261
14.5.3 使用概率方法262
14.6 何時使用算法262
14.7 小結264