《程序员必会的40种算法》致力于利用算法求解实际问题。第1部分介绍算法的核心内容,探讨什么是算法、如何设计算法,同时学习在算法中使用的数据结构。重点讲解排序算法、查找算法和求解图问题的算法。第二部分讨论各种机器学习算法,包括无监督机器学习算法和传统有监督学习算法,详细讨论一些自然语言处理算法和推荐引擎。第三部分讨论更高级的算法概念,重点介绍了密码算法和大规模算法。本书还包含一些案例分析(如天气预测、推文聚类和电影推荐引擎),用来说明如何才能更好地应用这些算法。
目录
- 译者序
- 前言
- 关于作者
- 关于审校者
- 第一部分基础与核心算法
- 第1章算法概述2
- 1.1什么是算法2
- 1.2描述算法逻辑4
- 1.2.1理解伪代码4
- 1.2.2使用代码片段6
- 1.2.3制定执行计划6
- 1.3Python包简介7
- 1.3.1Python包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.1Python中的数据结构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.4PageRank算法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.1Keras178
- 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.1MITM攻击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.1CUDA简介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