首页>参考读物>计算机科学与技术>综合

程序员必会的40种算法
作者 : [加] 伊姆兰·艾哈迈德(Imran Ahmad) 著
译者 : 赵海霞 译
丛书名 : 华章程序员书库
出版日期 : 2021-09-06
ISBN : 978-7-111-69033-7
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 278
开本 : 16
原书名 : 40 Algorithms Every Programmer Should Know
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书致力于利用算法求解实际问题。第1部分介绍算法的核心内容,探讨什么是算法、如何设计算法,同时学习在算法中使用的数据结构。重点讲解排序算法、查找算法和求解图问题的算法。第二部分讨论各种机器学习算法,包括无监督机器学习算法和传统有监督学习算法,详细讨论一些自然语言处理算法和推荐引擎。第三部分讨论更高级的算法概念,重点介绍了密码算法和大规模算法。本书还包含一些案例分析(如天气预测、推文聚类和电影推荐引擎),用来说明如何才能更好地应用这些算法。

图书特色

本书致力于利用算法求解实际问题,
帮助初学者理解算法背后的逻辑和数学知识。

本书内容丰富,涉及算法基础、设计技术、分析方法、排序算法、查找算法、图算法、
线性规划算法、机器学习算法、推荐算法、数据算法、密码算法和并行算法等内容,
重点讲述如何使用Python进行算法实现和算法性能的比较与分析。

图书前言

算法一直在计算科学和计算实践中发挥着重要作用。本书致力于利用算法求解实际问题。为了最大限度地利用算法,必须深入理解算法背后的逻辑和数学知识。我们先概要地介绍算法,并探索各种算法设计技术。接下来,学习线性规划算法、PageRank算法、图算法以及机器学习算法。本书还包含一些案例(如天气预测、推文聚类和电影推荐引擎),用来说明如何才能最佳地应用这些算法。通过学习本书,你将对使用算法求解实际计算问题充满信心。
读者对象
本书为程序员而写!无论你是希望深刻理解算法背后的数学知识的经验丰富的程序员,还是希望了解如何利用经过实践检验的算法来改进代码设计和编写方式的经验不足的程序员,阅读本书都大有裨益。在阅读本书前必须具有Python编程经验,数据科学知识对阅读本书有帮助,但不是必需的。
本书内容
第1章概述算法基础。1.1节介绍理解不同算法如何工作所需的基本概念,概述人们最初如何用算法以数学的形式表达特定类型的问题,还提到不同算法的局限性。1.2节讲述描述算法逻辑的各种方法。由于本书用 Python编写算法,1.3节说明如何设置环境以运行书中给出的例子。1.4节介绍算法设计技术。1.5节讨论如何用不同方法量化算法性能,并与其他算法进行比较。1.6节讨论验证算法的特定实现的各种方法。
第2章着重讲述算法中用于存储临时数据的内存数据结构。算法可能是数据密集型的,也可能是计算密集型的,或者既是数据密集型的又是计算密集型的。对于所有不同类型的算法,选择恰当的数据结构对其最佳实现而言至关重要。许多算法具有递归和迭代逻辑,因而需要面向这种本征逻辑的专用数据结构。由于本书用 Python编写算法,这一章主要关注实现书中算法所需的 Python 数据结构。
第3章给出用于排序和查找的核心算法。这些算法在后面将作为其他更复杂算法的基础。本章先讲述不同类型的排序算法,包括各种算法的性能比较。然后,讲述各种查找算法,量化这些算法的性能和复杂度,并进行比较。最后,讲述这些算法的实际应用。
第4章讲述设计各种算法所需的核心概念,阐述各种算法并讨论它们的优缺点。理解这些概念对设计最优的复杂算法而言至关重要。这一章先讨论不同类型的算法设计,然后求解著名的旅行商问题。之后讨论线性规划及其局限性。最后,用实例展示如何用线性规划进行产量规划。
第5章着重讲述常见于计算机科学中的图算法。图是许多计算问题的最佳模型。本章讲述表示和搜索图的各种方法。搜索图意味着用系统化的方法沿图中的边访问图中的顶点。图搜索算法可以发现图的很多结构。很多算法都通过在输入图上执行搜索算法来获得结构信息。其他几个图算法都是基本图搜索算法的细化。图的搜索技术是图算法领域的核心。该章首先讨论图的两种常见的计算表示:邻接表和邻接矩阵。接下来,讲述广度优先搜索这种简单的图搜索算法,并说明如何创建广度优先搜索树。然后讲述深度优先搜索,并给出深度优先搜索算法访问顶点顺序的标准结论。
第6章讨论无监督机器学习算法。之所以被归类为无监督方法,是由于这些模型或算法在无监督条件下从给定数据中学习固有的结构、模式和关系。我们先讨论聚类方法,这种机器学习方法基于固有的属性或特征,试图从数据集的数据样本中找出相似性模式和关系模式,然后把数据样本划分为集群,使得各个集群内的数据样本具有相似性。接下来,讨论降维算法,该算法用于处理特征较多的问题。之后,讨论关联规则挖掘算法,它们属于数据挖掘方法,用于检查和分析大规模交易数据集,以发现有意义的模式和规则,而这些模式表示了跨交易的各种商品之间有意义的关系和关联。最后,讨论处理异常检测的算法。
第7章描述与一组机器学习问题相关的传统监督机器学习算法。这些问题中的标记数据集具有输入属性和相应的输出标签或类别。这些输入和其相应的输出用于学习一个一般性系统,该系统用于预测不在数据集中的其他数据点的结果。我们先从机器学习的角度概述分类的相关概念。接下来,讨论重要的算法之一—决策树,给出决策树算法的局限性和优势。接着介绍支持向量机和XGBoost这两种重要的算法。最后,讨论线性回归这种最简单的机器学习算法。
第8章首先介绍典型神经网络这种最重要的机器学习技术的主要概念和组成部分。然后介绍各种神经网络,并阐述用于实现这些神经网络的激活函数。之后,详细讨论反向传播算法,这是目前应用最广泛的训练神经网络的收敛算法。接下来,介绍迁移学习技术,它可以大大简化模型训练并部分地使其自动化。最后,给出一个学习实例,讨论如何在现实世界中利用深度学习进行欺诈检测。
第9章介绍自然语言处理算法,从理论到实践循序渐进地展开。首先介绍基础知识,然后讨论背后的数学知识。接下来,介绍一种流行的神经网络,它广泛应用于设计和实现文本数据上的重要用例。此外,还介绍自然语言处理算法的局限性。最后,给出一个案例,讨论如何在自然语言处理领域训练机器学习模型,以进行电影评论情感分析。
第10章重点讨论推荐引擎,它先用与用户偏好相关的信息建立模型,然后基于模型和信息向用户提供推荐。推荐引擎总是建立在顾客和商品之间被记录的交互过程基础之上。我们先介绍推荐引擎背后的基本思想,然后讨论各种推荐引擎,最后讨论如何利用推荐引擎向用户推荐各种商品。
第11章着重讨论以数据为中心的算法的相关问题。本章先简要概述与数据相关的一些问题,然后讨论用于数据分类的标准。接下来,介绍如何应用算法处理流数据,然后讨论压缩数据的各种方法。最后,通过实例学习如何从推文数据中提取模式。
第12章讨论与密码学相关的算法。我们先介绍背景知识,之后讨论对称加密算法。然后,阐述消息摘要算法MD5和SHA,并解释实现对称加密算法的局限性和不足。接下来,讨论非对称加密算法和如何使用它创建数字证书。最后用一个实例总结所有这些技术。
第13章阐述大规模算法如何处理单个节点内存无法容纳的数据和需要多CPU才能进行的处理。本章首先讨论何种算法最适于并行运行。然后讨论算法并行化的相关问题。接下来介绍CUDA架构,并讨论如何使用单个或多个GPU来加速算法。此外,还讨论如何修改算法才能有效利用GPU的性能。最后,讨论集群计算和Apache Spark如何创建弹性分布式数据集(RDD),进而创建标准算法的高速并行实现。
第14章先讨论可解释性,这一重要主题为自动决策背后的逻辑做出解释,因而变得越来越重要。之后,讨论算法使用过程中的伦理和算法实现时产生偏差的可能性。接下来,详细讨论处理NP难问题的技术。最后,总结算法的实现方式和与此相关的各种现实挑战。
软硬件要求
所需软件(版本号) 免费/付费 硬件指标 操作系统
Python 3.7.2及以上版本 免费 至少 4GB RAM,推荐8GB以上内存 Windows/Linux/Mac

下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
书中的代码也可以通过访问GitHub代码库(https:/?/?github.?com/PacktPublishing/40- ?Algorithms-?Every-?Programmer-?Should-?Know)获取。
本书约定
本书中使用了许多排版约定。
代码体:表示文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄。例如:“让我们看看如何使用push向栈内添加新的元素,或使用pop从栈中删除元素。”
代码块设置如下:

当我们希望提醒你注意代码块的某个特定部分时,相关的行或项将以粗体显示:

命令行输入或输出如下所示:

黑体:表示新术语和重要词汇。例如,在菜单或对话框中出现的文字都以这种方式处理。例如:“降低算法复杂度的一种方法是在算法的准确度上进行折中,从而得到一种称为近似算法的算法。”
表示警告或重要的说明。
表示提示和技巧。

上架指导

计算机\算法

封底文字

算法一直在计算科学和计算实践中发挥着重要作用。除了传统计算之外,使用算法解决现实问题的能力是开发人员和程序员必须具备的一项重要技能。本书不仅能帮助你拓展技能,选择强有力的算法解决现实世界的问题,还能帮助你了解算法原理。

本书带你了解各种算法设计技术,通过实例探索如何实现不同类型的算法,学习线性规划算法、PageRank算法和图算法以及机器学习算法等更复杂的算法,理解它们背后的数学知识和逻辑。此外,通过天气预测、推文聚类和电影推荐引擎等案例分析展示如何应用这些算法。最后,你将学习支持并行处理的技术,从而将这些算法用于计算密集型任务。通过学习本书,你将熟练地使用各种各样的算法解决现实世界的计算问题。

本书主要内容包括:
探索Python库中的数据结构和算法。
利用网络分析实现欺诈检测的图算法。
使用机器学习算法对类似推文进行聚类,实时处理推文数据。
使用监督学习算法预测天气。
使用孪生神经网络进行独热图像识别。
创建向订阅者推荐相关电影的推荐引擎。
在部署机器学习模型时,使用对称和非对称加密实现可靠的安全。

译者序

算法是计算科学的核心,在求解实际问题的过程中发挥着重要作用。程序员、算法设计师、架构师、数据分析师等信息技术相关从业人员都应学习算法设计基础知识,积累基础算法,掌握典型的机器学习算法、自然语言处理算法、推荐算法、大规模数据处理算法、密码算法等,理解这些算法在求解实际问题时的优势和局限性并在实践中合理处理相关约束因素。然而,学习和掌握这些知识是一个循序渐进的漫长过程。对于初学者,重要的是在学习程序设计技术的同时,快速了解算法在计算机科学和实践应用中的整体概貌,奠定系统观基础并增强使用算法来求解实际计算问题的信心。
本书是工业界给出的达成上述目标的一个解决方案,致力于利用算法求解实际问题,帮助初学者理解算法背后的逻辑和数学知识,以便最大限度地利用算法。本书概要地讨论算法基础、设计技术、分析方法、排序算法、查找算法、图算法、线性规划算法、机器学习算法、推荐算法、数据算法、密码算法和大规模算法等内容,在讲述方式上忽略对算法细节的讨论,仅给出每个算法的思想和原理,将重点放在如何用Python进行算法实现和算法性能的比较与分析上。读者通过学习本书,可以迅速了解算法的概念,掌握如何用开源包实现各种算法,并理解它们的性能、应用领域和局限性,进而对算法在计算机科学和各种应用领域中的作用有整体了解。
本书由我独立翻译完成。我在深刻理解全书内容的基础上力求准确,对于发现的原书中的多处笔误和印刷错误进行了更正。在翻译本书的过程中,我得到了哈尔滨工业大学计算学部的骆吉洲副教授的帮助和支持,他提出了很多中肯的意见和建议,使我受益匪浅。在此特别向他表示感谢!
限于水平,疏漏和错误在所难免,敬请读者批评指正。如有任何建议,请发送邮件至zhaohaixia@lj.icbc.com.cn。

图书目录

译者序
前言
关于作者
关于审校者
第一部分 基础与核心算法
第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

教学资源推荐
作者: (美) Frank R.GiordanoWilliam P.FoxSteven B. Horton     著Maurice D.Weir
作者: 刘振安 刘燕君 单继龙 编著
作者: 黄传河 主编 杜瑞颍 吴黎兵 吕慧 张春林 张沪寅 张健 参编
作者: [法]戴维?西伦(Davy Cielen),亚诺 D. B. 梅斯曼(Arno D. B. Meysman),穆罕默德•阿里(Mohamed Ali) 著
参考读物推荐