Skip to content

Latest commit

 

History

History
121 lines (70 loc) · 13 KB

File metadata and controls

121 lines (70 loc) · 13 KB

零、前言

算法在计算科学和实践中一直扮演着重要的角色。这本书的重点是利用这些算法来解决现实世界的问题。为了充分利用这些算法,必须深入理解它们的逻辑和数学。您将从算法介绍开始,探索各种算法设计技术。接下来,您将学习线性规划、页面排名和图形,甚至学习机器学习算法,理解它们背后的数学和逻辑。本书还包含一些案例研究,如天气预报、推特聚类和电影推荐引擎,它们将向您展示如何最佳地应用这些算法。完成本书后,您将对使用算法解决实际计算问题充满信心。

这本书是给谁的

这本书是给严肃的程序员的!无论您是一名经验丰富的程序员,希望对算法背后的数学有更深入的了解,还是编程或数据科学知识有限,并且希望了解更多关于如何利用这些经过战斗测试的算法来改进设计和编写代码的方法的信息,您都会发现本书很有用。必须有 Python 编程经验,尽管数据科学知识很有帮助,但不是必需的。

这本书涵盖的内容

第一章算法概述,总结了算法的基本原理。本节首先介绍理解不同算法工作所需的基本概念。它总结了人们是如何开始使用算法来数学地表述某些类别的问题的。它还提到了不同算法的局限性。下一节将解释指定算法逻辑的各种方法。由于本书使用 Python 编写算法,接下来将解释如何设置环境以运行示例。然后,讨论了量化算法性能并与其他算法进行比较的各种方法。最后,本章讨论了验证算法特定实现的各种方法。

第 2 章中,算法中使用的数据结构,重点关注算法对能够保存临时数据的必要内存数据结构的需求。算法可以是数据密集型、计算密集型或两者兼而有之。但是对于所有不同类型的算法,选择正确的数据结构对于它们的最佳实现至关重要。许多算法具有递归和迭代逻辑,需要本质上是迭代的专门数据结构。由于我们在本书中使用 Python,本章重点介绍可用于实现本书中讨论的算法的 Python 数据结构。

第 3 章排序和搜索算法介绍了用于排序和搜索的核心算法。这些算法以后可以成为更复杂算法的基础。本章首先介绍不同类型的排序算法。它还比较了各种方法的性能。然后,给出了各种搜索算法。对它们进行比较,并对它们的性能和复杂性进行量化。最后,本章介绍了这些算法的实际应用。

第 4 章设计算法介绍了各种算法的核心设计理念。它还解释了不同类型的算法,并讨论了它们的优缺点。在设计最优复杂算法时,理解这些概念非常重要。本章首先讨论不同类型的算法设计。然后,给出了著名旅行商问题的求解方法。然后讨论线性规划及其局限性。最后,本文给出了一个实例,说明了如何将线性规划用于容量规划。

第 5 章图形算法主要介绍计算机科学中常见的图形问题的算法。有许多计算问题可以最好地用图来表示。本章介绍表示图和搜索图的方法。搜索图意味着系统地跟踪图的边,以便访问图的顶点。图搜索算法可以发现很多关于图的结构的信息。许多算法首先通过搜索输入图来获得这种结构信息。其他几种图算法详细介绍了基本图搜索。搜索图的技术是图算法领域的核心。第一部分讨论了图的两种最常见的计算表示:作为邻接列表和作为邻接矩阵。接下来,介绍了一种简单的图搜索算法广度优先搜索,并展示了如何创建广度优先树。下一节介绍深度优先搜索,并提供有关深度优先搜索访问顶点的顺序的一些标准结果。

第 6 章无监督机器学习算法介绍了无监督机器学习算法。这些算法被归类为无监督的,因为模型或算法试图在没有任何监督的情况下从给定数据中学习固有的结构、模式和关系。首先,讨论了聚类方法。这是一种机器学习方法,它试图在我们的数据集中发现数据样本之间的相似模式和关系,然后将这些样本分为不同的组,这样每个数据样本组或簇都会根据固有属性或特征具有一定的相似性。下一节将讨论降维算法,当我们最终拥有许多特征时,将使用这些算法。接下来,介绍了一些处理异常检测的算法。最后,本章介绍关联规则挖掘,这是一种数据挖掘方法,用于检查和分析大型事务数据集,以识别感兴趣的模式和规则。这些模式表示事务中各种项目之间有趣的关系和关联。

第 7 章传统监督学习算法针对一组机器学习问题描述了传统监督机器学习算法,其中存在一个带有输入属性和相应输出标签或类的标记数据集。然后使用这些输入和相应的输出来学习一个广义系统,该系统可用于预测以前未看到的数据点的结果。首先,在机器学习的背景下引入分类的概念。然后,介绍了最简单的机器学习算法——线性回归。接下来是最重要的算法之一,决策树。讨论了决策树算法的局限性和优势,然后讨论了两种重要的算法,SVM 和 XGBoost。

第 8 章神经网络算法首先介绍了一种典型的神经网络的主要概念和组成部分,这种神经网络正成为最重要的机器学习技术类型。然后,介绍了各种类型的神经网络,并解释了用于实现这些神经网络的各种激活函数。然后详细讨论了反向传播算法。这是收敛神经网络问题最广泛使用的算法。接下来,将解释迁移学习技术,该技术可用于大大简化和部分自动化模型的训练。最后,作为一个真实的例子,介绍了如何使用深度学习来检测多媒体数据中的对象。

第 9 章自然语言处理算法介绍了自然语言处理算法NLP)。本章从理论到实践,循序渐进。首先,它介绍了基础知识,其次是基础数学。然后,讨论了一种最广泛使用的神经网络,用于设计和实现文本数据的几个重要用例。还讨论了 NLP 的局限性。最后,本文给出了一个案例研究,其中训练了一个模型来根据写作风格检测论文的作者。

第 10 章推荐引擎重点介绍推荐引擎,这是一种对与用户偏好相关的可用信息进行建模的方法,然后使用此信息根据该信息提供明智的推荐。推荐引擎的基础始终是用户和产品之间记录的交互。本章首先介绍推荐引擎背后的基本思想。然后,讨论了各种类型的推荐引擎。最后,本章讨论如何使用推荐引擎向不同的用户推荐项目和产品。

第 11 章数据算法重点关注以数据为中心的算法相关问题。本章首先简要概述了与数据相关的问题。然后,给出了数据分类的标准。接下来,将描述如何将算法应用于流数据应用程序,然后介绍密码学主题。最后,给出了一个从 Twitter 数据中提取模式的实例。

第 12 章密码学介绍了与密码学相关的算法。本章首先介绍背景。然后,讨论了对称加密算法。解释了 MD5 和 SHA 哈希算法,并介绍了与实现对称算法相关的限制和弱点。接下来,将讨论非对称加密算法以及如何使用它们创建数字证书。最后,讨论了一个总结所有这些技术的实例。

第 13 章大规模算法解释了大规模算法如何处理无法放入单个节点内存的数据,并涉及需要多个 CPU 的处理。本章首先讨论什么类型的算法最适合并行运行。然后,讨论了算法并行化的相关问题。本文还介绍了 CUDA 体系结构,并讨论了如何使用单个 GPU 或 GPU 阵列来加速算法,以及为了有效利用 GPU 的功能,需要对算法进行哪些更改。最后,本章讨论了集群计算,并讨论了 Apache Spark 如何创建弹性分布式数据集RDDs,以创建标准算法的极快并行实现。

第 14 章实践考虑从可解释性这一重要话题开始,随着对自动决策背后逻辑的解释,可解释性变得越来越重要。然后,本章介绍了使用算法的道德规范以及在实现算法时产生偏见的可能性。接下来,详细讨论了处理 NP 难问题的技术。最后,总结了实现算法的方法以及与此相关的现实挑战。

充分利用这本书

| 章节号 | 所需软件(含版本) | 免费/专有 | 硬件规格 | 需要操作系统 | | 1-14 | Python 版本 3.7.2 或更高版本 | 自由的 | 最小 4GB 内存,建议 8GB 以上。 | Windows/Linux/Mac |

如果您使用的是本书的数字版本,我们建议您自己键入代码或通过 GitHub 存储库访问代码(下一节提供链接)。这样做将帮助您避免与复制和粘贴代码相关的任何潜在错误。

下载示例代码文件

您可以从您的账户www.packt.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,将文件通过电子邮件直接发送给您。

您可以通过以下步骤下载代码文件:

  1. 登录或注册www.packt.com
  2. 选择“支持”选项卡。
  3. 点击代码下载。
  4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。

下载文件后,请确保使用以下最新版本解压或解压缩文件夹:

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 适用于 Linux 的 7-Zip/PeaZip

该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/40-Algorithms-Every-Programmer-Should-Know 。如果代码有更新,它将在现有 GitHub 存储库中更新。

我们的丰富书籍和视频目录中还有其他代码包,请访问**https://github.com/PacktPublishing/** 。看看他们!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:https://static.packt-cdn.com/downloads/9781789801217_ColorImages.pdf

使用的惯例

本书中使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:“让我们看看如何使用push将新元素添加到堆栈中,或者使用pop从堆栈中删除元素。”

代码块设置如下:

define swap(x, y)
    buffer = x
    x = y
    y = buffer

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

define swap(x, y)
    buffer = x
    x = y
 y = buffer

任何命令行输入或输出的编写方式如下:

pip install a_package

粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个例子:“降低算法复杂性的一种方法是降低其准确性,产生一种称为近似算法的算法类型。”

Warnings or important notes appear like this. Tips and tricks appear like this.

联系

我们欢迎读者的反馈。

一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中注明书名,并发送电子邮件至[email protected]

勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata,选择您的书籍,单击 errata 提交表单链接,然后输入详细信息。

盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过[email protected]与我们联系,并提供该材料的链接。

如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com

评论

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。

有关 Packt 的更多信息,请访问Packt.com