内容简介
本书是算法学习的宝典,为解决实际编程难题提供了强大工具。书中精心挑选50种在软件开发中极为重要的算法,对每种算法与示例都进行了详尽解释,涵盖数据结构操作、搜索策略、排序方法、图形处理技术等。相比第1版,新版内容更丰富,范围更广泛,更新了部分过时信息,增加了如机器学习中的算法优化技巧、大数据处理方法,以及现代顺序模型及其变体、实现大语言模型(LLM)的算法、方法和架构等新兴领域算法。每一章都遵循相同结构:先介绍算法基本概念与适用场景,接着通过代码展示工作原理,最后进行实际案例分析,助力读者将知识转化为实践技能。此外,本书注重培养算法思维,剖析算法背后的逻辑推理过程,可帮助读者学会设计有效算法,在不断变化的技术环境中保持竞争力,是程序员提升自我的宝藏资源 。
目录
目 录 Contents
序
前言
作者简介
审校者简介
第一部分 基础算法和核心算法
第1章 算法概述 2
1.1 什么是算法 3
1.1.1 算法的各个阶段 3
1.1.2 开发环境 4
1.2 Python包 5
1.3 算法设计技巧 7
1.3.1 数据维度 7
1.3.2 计算维度 9
1.4 性能分析 9
1.4.1 空间复杂度分析 9
1.4.2 时间复杂度分析 11
1.4.3 性能评估 12
1.4.4 大O记号 12
1.4.5 常数时间复杂度 14
1.4.6 线性时间复杂度 15
1.4.7 平方时间复杂度 15
1.4.8 对数时间复杂度 16
1.5 选择算法 17
1.6 验证算法 17
1.6.1 精确算法、近似算法和随机
算法 17
1.6.2 可解释性 18
1.7 小结 19
第2章 算法中的数据结构 20
2.1 探讨Python中的数据结构 20
2.1.1 列表 21
2.1.2 元组 25
2.1.3 字典和集合 26
2.1.4 使用序列和数据帧 30
2.1.5 矩阵 33
2.2 探索抽象数据类型 34
2.2.1 向量 34
2.2.2 栈 35
2.2.3 队列 37
2.2.4 树 39
2.3 小结 42
第3章 排序算法和搜索算法 43
3.1 排序算法简介 43
3.1.1 在Python中交换变量 44
3.1.2 冒泡排序 44
3.1.3 插入排序 47
3.1.4 归并排序 49
3.1.5 希尔排序 52
3.1.6 选择排序 53
3.1.7 选择一种排序算法 54
3.2 搜索算法简介 55
3.2.1 线性搜索 56
3.2.2 二分搜索 56
3.2.3 插值搜索 57
3.3 实际应用 58
3.4 小结 60
第4章 算法设计 61
4.1 算法设计基本概念简介 61
4.1.1 正确性:所设计的算法是否会
产生我们期望的结果 62
4.1.2 性能:所设计算法是获取结果的
最佳方法吗 63
4.1.3 可扩展性:所设计算法在更大的
数据集上表现得怎么样 67
4.2 理解算法策略 67
4.2.1 理解分治策略 68
4.2.2 理解动态规划策略 70
4.2.3 理解贪婪算法 71
4.3 实际应用—求解TSP 72
4.3.1 使用蛮力策略 73
4.3.2 使用贪婪算法 76
4.3.3 两种策略比较 77
4.4 PageRank算法 77
4.4.1 问题定义 77
4.4.2 实现PageRank算法 78
4.5 理解线性规划 80
4.5.1 线性规划问题的形式化描述 81
4.5.2 实际应用—用线性规划实现
产量规划 81
4.6 小结 83
第5章 图算法 84
5.1 理解图:简要介绍 85
5.1.1 图:现代数据网络的支柱 85
5.1.2 图的基础:顶点(或节点) 86
5.2 图论与网络分析 87
5.3 图的表示 87
5.4 图的机制和类型 87
5.5 网络分析理论简介 89
5.5.1 理解最短路径 90
5.5.2 理解中心性度量 92
5.5.3 用Python计算中心性指标 94
5.5.4 社交网络分析 97
5.6 理解图的遍历 97
5.6.1 广度优先搜索 97
5.6.2 深度优先搜索 101
5.7 案例研究:使用SNA进行欺诈
检测 103
5.7.1 介绍 103
5.7.2 在这种情况下,什么是欺诈 103
5.7.3 进行简单的欺诈分析 105
5.7.4 瞭望塔欺诈分析法 106
5.8 小结 108
第二部分 机器学习算法
第6章 无监督机器学习算法 110
6.1 无监督学习简介 110
6.1.1 数据挖掘生命周期中的无监督
学习 111
6.1.2 无监督学习的当前研究趋势 114
6.1.3 实例 114
6.2 理解聚类算法 115
6.2.1 量化相似性 115
6.2.2 k-means 聚类算法 118
6.3 分层聚类的步骤 122
6.4 编写分层聚类算法 123
6.5 理解DBSCAN 124
6.6 在Python中使用DBSCAN
创建簇 125
6.7 评估聚类效果 126
6.8 降维 127
6.9 关联规则挖掘 133
6.9.1 关联规则的类型 133
6.9.2 关联分析算法 136
6.10 小结 141
第7章 传统的监督学习算法 142
7.1 理解监督机器学习 143
7.2 描述监督机器学习 143
7.2.1 理解使能条件 146
7.2.2 区分分类器和回归器 146
7.3 理解分类算法 147
7.3.1 分类器挑战性问题 147
7.3.2 混淆矩阵 153
7.3.3 理解召回率和精确度的权衡 155
7.4 决策树分类算法 162
7.4.1 理解决策树的分类算法 162
7.4.2 决策树分类器的优势和劣势 165
7.4.3 用例 165
7.5 理解集
前言/序言
前 言 Preface
在计算机领域,从基础理论到实际应用,算法是推动技术进步的关键。在本书中,我们进一步深入研究了算法的动态世界,扩大了我们解决现实世界中迫切问题的范围。从算法的基础知识开始,我们通过多种设计技术进行探索,涉及线性编程、页面排序、图等复杂领域,并深入探讨了机器学习和其他相关技术。为了确保我们始终处于技术进步的前沿,我们还进行了大量关于时序网络、LLM、LSTM、GRU以及在密码学和云计算环境下部署大规模算法的讨论。
在当今数字时代,推荐系统至关重要,算法在其中扮演着关键的角色。为了有效地应用这些算法,深入理解它们的数学和逻辑原理是非常重要的。本书中的实践案例研究涵盖了多个领域,从天气预报、推特分析到电影推荐,甚至对LLM进行了深入研究,以便更好地展示它们的实际应用。通过这些案例,本书详细阐述了算法的细微差别和它们在实际场景中的应用。
本书的目的是帮助读者增强在部署算法来应对现代计算挑战方面的信心。在当今不断发展的数字时代,我们需要不断探索并掌握算法的各种应用。希望本书能带领读者踏上一段学习和利用算法的拓展之旅。
目标读者
如果你是一位渴望利用算法解决问题、编写高效代码的程序员或开发者,那么本书非常适合你。它涵盖了从经典且广泛应用的算法到最新的数据科学、机器学习和密码学的全面内容。如果你熟悉Python编程,会对理解本书内容更有帮助,但并不是必需的。无论你是初学者还是有经验的专业人士,本书都将为你提供宝贵的见解和实用的指导。
无论你具备哪种编程语言的基础,本书都对你非常有用。此外,即使你不是一名程序员,但对技术有一定的偏好,你也可以通过本书深入了解解决问题的算法这一广阔世界。
本书内容
第一部分:基础算法和核心算法
第1章提供了对算法基本原理的介绍。它从算法的基本概念开始,讲述人们如何使用算法来描述问题,以及不同算法的局限性。由于本书中使用Python编写算法,因此将解释如何设置Python环境来运行这些示例。接着,我们研究了如何量化算法的性能,并与其他算法进行比较。
第2章讨论了算法上下文中的数据结构。由于我们在本书中使用的是Python,因此该章重点关注Python数据结构,但所提供的概念可以在其他语言中使用,如Java和C++。该章展示了Python如何处理复杂的数据结构,并介绍哪些数据结构适用于某些类型的数据。
第3章首先介绍了不同类型的排序算法和各种设计方法。然后,通过实际示例,讨论了搜索算法。
第4章讨论了描述我们正在试图解决的问题使用算法设计的重要性。接下来,应用我们介绍的设计技术来求解著名的旅行商问题(TSP)。最后,介绍了线性规划,并讨论了其应用。
第5章涵盖了我们可以捕获图形来表示数据结构的方法。它涵盖了一些与图算法相关的基本理论、技术和方法,如网络理论分析和图遍历。我们通过一个案例来研究图算法在欺诈分析方面的应用。
第二部分:机器学习算法
第6章阐释了无监督机器学习如何应用于现实世界的问题。我们介绍了它的基本算法和方法,如聚类算法、降维算法和关联规则挖掘。
第7章深入研究了监督机器学习的本质,即具有分类器和回归器的特征。我们将利用现实世界的问题作为案例来探索它们的作用。本书先后介绍了6种不同的分类算法和3种回归算法。最后,通过比较它们的结果,以得出关键结论。
第8章介绍了典型神经网络的主要概念和组成部分。然后介绍了各种类型的神经网络,并阐述了用于实现这些神经网络的各种激活函数。之后,详细讨论了反向传播算法,这是目前应用最广泛的神经网络训练算法。最后,给出一个学习示例,讨论如何在现实世界中利用深度学习进行欺诈检测。
第9章介绍了自然语言处理(Natural Language Processing,NLP)的算法。该章介绍了NLP的基础知识以及如何为NLP任务准备数据。接下来解释了向量化文本数据和词嵌入的概念。最后给出了一个详细的用例。
第10章深入探讨了针对序列数据训练神经网络的方法。该章涵盖了序列模型的核心原理,并初步概述了其技术和方法。接下来,该章探讨了深度学习如何改进自然语言处理技术。
第11章探讨了序列模型的局限性以及序列建模如何发展以克服这些局限性,还深入探讨了序列模型的高级方面,以帮助读者理解复杂配置的创建过程。首先,对自动编码器和序列到序列(Seq2Seq)模型等关键要素进行了分解。接下来研究了注意力机制和Transformer,它们在大型语言模型(LLM)的开发中起着关键作用。
第三部分:高级主题
第12章详细介绍了主要类型的推荐引擎及其内部工作原理。这些系统能够熟练地向用户推荐个性化的物品或产品,但同时也面临一些挑战。我们深入探讨了它们的优点和局限性。最后介绍如何利用推荐引擎来解决现实世界中的问题。
第13章介绍了数据算法和数据分类背后的基本概念。我们研究了用于有效管理数据