新書推薦:

《
智圆行方――燕京医学名家处方手迹藏臻
》
售價:HK$
2030

《
大设计师威廉·莫里斯
》
售價:HK$
704

《
新宏观经济学 来自后凯恩斯主义-老制度主义-马克思主义传统的第一本宏观经济学教科书
》
售價:HK$
1316

《
《山海经》的博物世界:植物(刷边特装版)博物岛系列 探寻上古草木之美纵览山川博物大观
》
售價:HK$
1306

《
中国芍药品种图志(精)
》
售價:HK$
1469

《
现代战略家军事史:1861年以来美国的主要战争
》
售價:HK$
500

《
智能工业机器人技术(刘永奎)
》
售價:HK$
301

《
中国世界遗产全书·大美中国篇+最美非遗篇(全2册 精装典藏版)
》
售價:HK$
3270
|
| 內容簡介: |
|
本书归纳了计算机的经典算法题,并按照由浅入深、循序渐进的顺序讲解。本书对图论等算法中的重点内容进行了详细的讲解,重点讲解并查集、最小生成树算法(包括Prim和Kruskal算法)和最短路径算法(包括 Dijkstra、Bellman-Ford、Floyd和A*算法),既注重理论推导,也强调代码实现与调试技巧。每一章均有清晰的思路分析、代码模板和常见错误总结,兼顾基础知识巩固与应用能力提升。
|
| 關於作者: |
|
哈尔滨工业大学计算机科学与技术专业硕士,先后在腾讯和百度从事技术研发,对数据结构与算法有深刻理解,擅长将一个个算法串联在一起并用通俗易懂的方式讲解出来。
|
| 目錄:
|
目录
第1章 图论理论基础1 1.1 图论的第一印象2 1.1.1 连通性4 1.1.2 图的构造7 1.1.3 图的遍历方式11 1.1.4 小结12 1.2 为什么使用ACM输入/输出模式12 第2章 深度优先搜索与广度优先搜索13 2.1 深度优先搜索的理论基础14 2.1.1 深度优先搜索与广度优先搜索的区别14 2.1.2 深度优先搜索的搜索过程14 2.1.3 代码框架17 2.1.4 深度优先搜索三部曲18 2.2 可达路径20 2.2.1 解题思路23 2.2.2 图的存储23 2.2.3 求解过程24 2.2.4 输出结果26 2.2.5 实现代码27 2.2.6 小结30 2.3 广度优先搜索的理论基础30 2.3.1 广度优先搜索的使用场景30 2.3.2 广度优先搜索的搜索过程30 2.3.3 代码框架32 2.4 岛屿问题(一)34 2.4.1 解题思路35 2.4.2 深度优先搜索的实现代码36 2.5 岛屿问题(二)39 2.6 岛屿问题(三)42 2.6.1 解题思路44 2.6.2 深度优先搜索的实现代码44 2.6.3 广度优先搜索的实现代码47 2.7 岛屿问题(四)49 2.7.1 解题思路50 2.7.2 实现代码52 2.8 岛屿问题(五)55 2.8.1 解题思路56 2.8.2 实现代码58 2.9 岛屿问题(六)59 2.9.1 解题思路61 2.9.2 实现代码61 2.9.3 优化思路64 2.10 岛屿问题(七)68 2.10.1 解题思路69 2.10.2 优化思路70 2.11 岛屿问题(八)76 2.11.1 解题思路78 2.11.2 具体解法78 2.12 字符串迁移81 2.12.1 解题思路82 2.12.2 实现代码84 2.13 有向图的完全连通86 2.13.1 解题思路87 2.13.2 实现代码90 2.14 拓扑排序93 2.14.1 拓扑排序的应用95 2.14.2 拓扑排序的解题思路95 2.14.3 模拟拓扑排序的过程97 2.14.4 判断图中是否有环99 2.14.5 实现代码100 第3章 并查集105 3.1 并查集理论基础106 3.1.1 背景106 3.1.2 基本原理106 3.1.3 路径压缩108 3.1.4 代码模板110 3.1.5 常见误区111 3.1.6 模拟过程114 3.1.7 拓展路径压缩的思路116 3.1.8 复杂度分析119 3.2 并查集寻找路径120 3.2.1 解题思路121 3.2.2 实现代码121 3.3 并查集寻找无向边123 3.3.1 解题思路125 3.3.2 实现代码126 3.3.3 常见疑问127 3.4 并查集寻找有向边128 3.4.1 解题思路130 3.4.2 实现代码131 第4章 最小生成树136 4.1 Prim算法137 4.1.1 解题思路138 4.1.2 模拟过程139 4.1.3 实现代码147 4.1.4 拓展思路149 4.1.5 小结152 4.2 Kruskal算法153 4.2.1 解题思路153 4.2.2 实现代码156 4.2.3 题目拓展(一)158 4.2.4 题目拓展(二)160 第5章 最短路径算法162 5.1 Dijkstra算法(朴素版)163 5.1.1 解题思路165 5.1.2 Dijkstra算法的工作过程165 5.1.3 Dijkstra算法与Prim算法的区别183 5.2 Dijkstra算法(堆优化版)184 5.2.1 解题思路184 5.2.2 实现代码190 5.2.3 拓展思路194 5.3 Bellman-Ford算法196 5.3.1 解题思路198 5.3.2 什么是松弛199 5.3.3 模拟过程200 5.3.4 实现代码205 5.3.5 拓展思路206 5.4 Bellman-Ford算法之队列优化208 5.4.1 背景208 5.4.2 模拟过程209 5.4.3 实现代码214 5.4.4 效率分析216 5.4.5 拓展思路218 5.5 Bellman-Ford算法之判断负权回路219 5.5.1 解题思路220 5.5.2 实现代码222 5.5.3 拓展思路223 5.6 Bellman-Ford算法之单源有限最短路径228 5.6.1 解题思路230 5.6.2 拓展一(边的顺序对结果的影响)237 5.6.3 拓展二(本题本质)240 5.6.4 拓展三(SPFA算法)240 5.6.5 拓展四(能否使用Dijkstra算法)244 5.7 Floyd算法247 5.7.1 解题思路249 5.7.2 实现代码256 5.7.3 空间优化257 5.7.4 小结259 5.8 A*算法259 5.8.1 解题思路261 5.8.2 A*算法的解题过程263 5.8.3 复杂度分析267 5.8.4 拓展思路267 5.8.5 A*算法的缺点268
|
|