本书是用轻松有趣的方法学习算法的入门指南。按照算法策略分为8章。第1章以算法之美、趣味故事引入算法,讲解算法复杂度的计算方法,以及爆炸性增量问题。2~7章讲解经典算法,包括贪心算法、分治算法、动态规划算法、回溯法、分支限界法、网络流算法。第8章讲解实际应用中的算法和高频面试算法,包括启发式搜索、敏感词过滤、LRU算法、快慢指针、单调栈、单调队列、零钱兑换、股票交易等。每一种经典算法都有4~8个实例,多数按照问题分析、算法设计、完美图解、算法详解、算法分析及优化拓展的流程进行讲解。全书讲解清晰,通俗易懂,紧扣工程教育认证的要求和实用性,力求满足新工科人才培养的需要。
本书为河南省“十四五”普通高等教育规划教材,提供了丰富的教学资源与答疑服务,包括源代码、课件、教案、习题、在线答疑和在线测试系统。本书既适合作为高等院校计算机及相关专业的算法教材,也适合对算法感兴趣的初学者以及需要提升技术能力的在职人员阅读。
本书从算法之美娓娓道来,没有高深的原理,也没有枯燥的公式,通过趣味故事引出算法问题,包含50多个实例及海量图解,结合学生提问,分析算法本质,并给出代码实现的详细过程和运行结果。
本书的特色和价值:
(1)实例丰富,通俗易懂
从有趣的故事引入算法,结合大量实例讲解,从简单到复杂,使读者从实例中体会算法设计思想。
(2)海量图解,简单有趣
通过海量图解,对算法进行分解剖析,使复杂难懂的问题变得简单有趣,给读者带来巨大的阅读乐趣,在阅读中不知不觉地学到算法知识。
(3)深入浅出,透析本质
用关键代码描述算法,既简洁易懂,又能抓住本质;算法思想描述及注释使代码更加通俗易懂。对算法的分析丰富细致,既有逐步推导结论的过程,又有直观绘图展示。
(4)实战演练,循序渐进
每个算法讲解后会进行实战演练,提高读者独立思考能力和动手实践能力
(5)网络资源,技术支持
丰富的教学资源,包括源代码、教学课件、视频、教学大纲、教案、习题、在线答疑和在线测试。
(6)算法解析,优化拓展
进行详细的算法解析,分析算法的时间复杂度和空间复杂度,并对其优化拓展进一步讨论,提出优化算法。
(7)本书自上市以来,不但得到读者的认可,也在许多高校作为教材使用,已经被评为十四五规划教材。
陈小玉,南阳理工学院副教授,软件工程师,主要研究方向为算法优化和机器学习。出版作品《趣学算法》《趣学数据结构》《算法训练营:海量图解+竞赛刷题(入门篇)》《算法训练营:海量图解+竞赛刷题(进阶篇)》,所教学生多次获得ACM、蓝桥杯等算法竞赛奖项。
第 1章 算法之美 1
1.1 打开算法之门 2
1.2 妙不可言—算法复杂性 2
1.3 一棋盘的麦子 8
1.4 神奇的兔子数列 9
1.5 算法学习瓶颈 14
1.6 本章小结 15
第 2章 贪心算法 16
2.1 贪心算法基础 17
2.1.1 贪心本质 17
2.1.2 贪亦有道 17
2.1.3 贪心算法秘籍 18
2.2 最优装载问题 18
2.2.1 问题分析 18
2.2.2 算法设计 18
2.2.3 完美图解 19
2.2.4 算法详解 19
2.2.5 算法分析及优化拓展 20
2.3 阿里巴巴与四十大盗—背包问题 21
2.3.1 问题分析 21
2.3.2 算法设计 22
2.3.3 完美图解 22
2.3.4 算法详解 23
2.3.5 算法分析及优化拓展 24
2.4 高级钟点秘书—会议安排 24
2.4.1 问题分析 25
2.4.2 算法设计 26
2.4.3 完美图解 26
2.4.4 算法详解 27
2.4.5 算法分析及优化拓展 28
2.5 一场说走就走的旅行—最短路径 28
2.5.1 问题分析 29
2.5.2 算法设计 29
2.5.3 完美图解 30
2.5.4 算法详解 33
2.5.5 算法分析及优化拓展 34
2.6 神秘电报密码—霍夫曼编码 36
2.6.1 问题分析 37
2.6.2 算法设计 38
2.6.3 完美图解 38
2.6.4 算法详解 41
2.6.5 算法分析及优化拓展 48
2.7 沟通无限校园网—最小生成树 49
2.7.1 问题分析 49
2.7.2 Prim算法 50
2.7.3 完美图解 51
2.7.4 算法详解 56
2.7.5 算法分析及优化拓展 57
2.7.6 Kruskal算法 57
第3章 分治算法 62
3.1 分治算法基础 63
3.1.1 分而治之 63
3.1.2 分治算法要素 63
3.1.3 分治算法秘籍 63
3.2 二分搜索 64
3.2.1 问题分析 64
3.2.2 算法设计 64
3.2.3 完美图解 65
3.2.4 算法详解 66
3.2.5 算法分析及优化拓展 66
3.3 合并排序 68
3.3.1 问题分析 68
3.3.2 算法设计 68
3.3.3 完美图解 68
3.3.4 算法详解 68
3.3.5 算法分析及优化拓展 71
3.4 快速排序 72
3.4.1 问题分析 72
3.4.2 算法设计 73
3.4.3 完美图解 74
3.4.4 算法详解 75
3.4.5 算法分析及优化拓展 76
3.5 分治算法复杂度求解秘籍 79
3.5.1 递推法 79
3.5.2 递归树 80
3.5.3 大师解法 80
第4章 动态规划算法 84
4.1 动态规划算法基础 85
4.1.1 算法思想 85
4.1.2 算法要素 85
4.1.3 解题秘诀 86
4.2 爬楼梯 86
4.2.1 问题分析 86
4.2.2 算法详解 87
4.2.3 算法分析及优化拓展 88
4.3 最长上升子序列 89
4.3.1 问题分析 89
4.3.2 算法设计 89
4.3.3 完美图解 90
4.3.4 算法详解 91
4.3.5 算法分析及优化拓展 91
4.4 最长公共子序列 93
4.4.1 问题分析 93
4.4.2 算法设计 95
4.4.3 完美图解 96
4.4.4 算法详解 99
4.4.5 算法分析及优化拓展 100
4.5 编辑距离 100
4.5.1 问题分析 101
4.5.2 算法设计 102
4.5.3 完美图解 102
4.5.4 算法详解 105
4.5.5 算法分析及优化拓展 106
4.6 游艇租赁 106
4.6.1 问题分析 106
4.6.2 算法设计 107
4.6.3 完美图解 108
4.6.4 算法详解 111
4.6.5 算法分析及优化拓展 111
4.7 矩阵连乘 112
4.7.1 问题分析 112
4.7.2 算法设计 114
4.7.3 完美图解 115
4.7.4 算法详解 118
4.7.5 算法分析及优化拓展 119
4.8 0/1背包问题 119
4.8.1 问题分析 120
4.8.2 算法设计 121
4.8.3 完美图解 121
4.8.4 算法详解 125
4.8.5 算法分析及优化拓展 125
4.9 没有上司的舞会 128
4.9.1 问题分析 128
4.9.2 算法设计 129
4.9.3 完美图解 129
4.9.4 算法详解 131
4.9.5 算法分析及优化拓展 132
4.10 动态规划算法秘籍 132
第5章 回溯法 134
5.1 深度优先搜索 135
5.1.1 算法思想 135
5.1.2 完美图解 135
5.2 回溯法基础 136
5.2.1 算法思想 136
5.2.2 算法要素 136
5.3 0/1背包问题 138
5.3.1 问题分析 138
5.3.2 算法设计 138
5.3.3 完美图解 140
5.3.4 算法详解 142
5.3.5 算法分析及优化拓展 143
5.4 最大团 144
5.4.1 问题分析 145
5.4.2 算法设计 145
5.4.3 完美图解 147
5.4.4 算法详解 151
5.4.5 算法分析及优化拓展 152
5.5 地图着色 153
5.5.1 问题分析 153
5.5.2 算法设计 153
5.5.3 完美图解 155
5.5.4 算法详解 158
5.5.5 算法分析及优化拓展 159
5.6 n皇后问题 159
5.6.1 问题分析 160
5.6.2 算法设计 160
5.6.3 完美图解 161
5.6.4 算法详解 168
5.6.5 算法分析及优化拓展 168
5.7 最优加工顺序 170
5.7.1 问题分析 170
5.7.2 算法设计 171
5.7.3 完美图解 172
5.7.4 算法详解 176
5.7.5 算法分析及优化拓展 177
5.8 回溯法秘籍 177
第6章 分支限界法 179
6.1 广度优先搜索 180
6.1.1 算法思想 180
6.1.2 完美图解 180
6.2 分支限界法基础 182
6.2.1 算法思想 183
6.2.2 算法步骤 183
6.3 0/1背包问题 183
6.3.1 问题分析 184
6.3.2 算法设计 184
6.3.3 完美图解 185
6.3.4 算法详解 189
6.3.5 算法分析及优化拓展 190
6.4 旅行商问题 194
6.4.1 问题分析 194
6.4.2 算法设计 194
6.4.3 完美图解 195
6.4.4 算法详解 198
6.4.5 算法分析及优化拓展 199
6.5 最优工程布线 200
6.5.1 问题分析 200
6.5.2 算法设计 201
6.5.3 完美图解 201
6.5.4 算法详解 207
6.5.5 算法分析及优化拓展 208
6.6 回溯法与分支限界法的异同 209
第7章 网络流算法 210
7.1 好的规划带来好效益—最大流 211
7.1.1 增广路算法 212
7.1.2 完美图解 213
7.2 最短增广路—EK算法 215
7.2.1 算法设计 215
7.2.2 完美图解 216
7.2.3 算法详解 221
7.2.4 算法分析 223
7.3 峰回路转—Dinic算法 223
7.3.1 算法设计 223
7.3.2 完美图解 223
7.3.3 算法详解 225
7.3.4 算法分析 226
7.3.5 当前弧优化 226
7.4 一蹴而就—ISAP算法 227
7.4.1 算法设计 228
7.4.2 完美图解 229
7.4.3 算法详解 231
7.4.4 算法分析 232
7.5 最小费用最大流—最小费用路算法 232
7.5.1 算法设计 233
7.5.2 完美图解 233
7.5.3 算法详解 234
7.5.4 算法分析 235
7.5.5 消圈算法 235
7.6 最大匹配问题 237
7.6.1 问题分析 237
7.6.2 算法设计 238
7.6.3 完美图解 238
7.6.4 算法详解 239
7.6.5 算法分析 239
7.6.6 匈牙利算法 239
7.7 试题库问题 242
7.7.1 问题分析 242
7.7.2 算法设计 242
7.7.3 完美图解 243
7.7.4 算法详解 244
7.7.5 算法分析 245
7.8 最大收益问题 245
7.8.1 问题分析 245
7.8.2 算法设计 246
7.8.3 完美图解 247
7.8.4 算法详解 249
7.8.5 算法分析 249
7.9 旅游路线问题 249
7.9.1 问题分析 250
7.9.2 算法设计 251
7.9.3 完美图解 251
7.9.4 算法详解 252
7.9.5 算法分析 254
7.10 网络流问题求解秘籍 254
第8章 实用算法 255
8.1 启发式搜索在游戏中的应用 256
8.1.1 A*算法 256
8.1.2 IDA*算法 256
8.1.3 八数码游戏 257
8.2 多模匹配算法在敏感词过滤中的应用 264
8.2.1 字典树 265
8.2.2 AC自动机 269
8.2.3 敏感词过滤 272
8.3 LRU缓存淘汰算法的应用场景 273
8.3.1 LRU算法 274
8.3.2 哈希链表 275
8.3.3 算法详解 277
8.3.4 算法分析 280
8.4 高频面试算法 280
8.4.1 快慢指针 280
8.4.2 栈的最小值 288
8.4.3 滑动窗口中的最大值 289
8.4.4 零钱兑换 293
8.4.5 股票买卖秘籍 295
附录A 特征方程和通项公式 299
附录B sort函数 302
附录C 优先队列 305
附录D 邻接表 312
附录E 并查集 318
附录F 四边不等式 323
附录G 排列树 327
附录H 贝尔曼规则 339
附录I 增广路中每条边成为关键边的次数 342