
如何选择资源
最好的资源是与你的学习方式和来这里的目的相匹配的那一个。一位未来的研究者和一位两周后要面试的应聘者,不该翻开同一本书。从你的目标出发。
| 你的目标 | 从这里开始 |
|---|---|
| 了解算法的真实运行方式 | Learn Graph Theory 平台加一个视频系列 |
| 通过编程面试 | 一份速查表、LeetCode 练习和一份精简参考 |
| 修读大学课程或阅读证明 | West,或 Chartrand 与 Zhang 以更平缓地入门 |
| 为研究深入钻研 | Diestel 的 Graph Theory |
| 参加编程竞赛 | CP-Algorithms 和 Codeforces |
列表之前的一点说明:你并不需要全部。选一个主要资源和一个用于练习的资源,遇到瓶颈时再增加。本指南的其余部分会展开上面的每一行。
从这里开始:Learn Graph Theory 平台
在逐一介绍书籍和课程之前,值得先点出本指南赖以构建的资源,因为它是难得的一体化平台。下面的大多数选择只把一件事做好。Learn Graph Theory 把它们整合到一处,让你从第一个定义走到面试就绪,而无需在十几个标签页间来回切换。
- 交互式可视化工具:在你自己构建和控制的图上逐步演示 BFS、DFS、Dijkstra、最小生成树、网络流等等。打开算法可视化工具。
- 引导式课程:结构清晰、循序渐进的课程,按合理顺序带你学完每个主题。
- 庞大的免费文章库:几乎涵盖每个图论主题的深入讲解,从学习路线图和算法速查表,到对 Dijkstra、拓扑排序和 并查集 的深入剖析。在文章中心浏览全部。
- 可下载的配套资料:Algorithms Handbook 和 Graph Theory Masterclass 为你提供可离线、备考就绪的参考资料和完整课程(两者都会在本指南结尾介绍)。
如果你只想从本指南收藏一样东西,那就收藏它:交互式练习、结构化课程、完整的参考库和可下载的指南,全部集中在一个环境中,而且大多免费。
其他交互式工具
除了上面的 Learn Graph Theory 可视化工具,还有一个可视化项目值得了解。看算法运行一分钟,胜过读一页伪代码,因此多一个视角是值得的。
- VisuAlgo:一个运营多年的可视化项目,涵盖大量数据结构和图算法,是有用的补充。
在阅读其他任何材料时都用上可视化工具。每当某个概念显得抽象,就把它放进去,看它动起来。
最佳书籍
在深度和持久价值上,书籍依然占优。让书籍匹配你的水平。
- West,Introduction to Graph Theory:严谨、以证明为基础的入门课程的标准之作。内容详尽,广泛用于大学。
- Chartrand 与 Zhang,A First Course in Graph Theory:更平缓、价格实惠的 Dover 平装本。如果觉得 West 太快太重,这是很好的选择。
- Diestel,Graph Theory:面向研究生、追求真正深度的权威参考。提供免费在线版,便于试读。
- Cormen、Leiserson、Rivest 和 Stein,Introduction to Algorithms(CLRS):不是图论书,但却是图算法(BFS、DFS、Dijkstra、最小生成树、网络流)的权威参考。
- Skiena,The Algorithm Design Manual:实用且易读,附有问题目录以及关于该选用哪种算法的诚恳建议。
在线课程
如果你偏好结构和截止期限,课程能让你持续前进。
- Coursera,Algorithms on Graphs:在更大的数据结构与算法专项课程中,专注于图算法的一门课程。注重动手且有节奏。
- MIT OpenCourseWare,Introduction to Algorithms:完整的课程视频和讲义,免费。图论部分是严谨的大学级讲解。
- Roughgarden,Algorithms Illuminated:清晰的四部曲系列(书籍加配套视频),以少有的清晰度讲解图搜索、最短路径等内容。
免费视频系列
若想以视觉化、低门槛的方式学习,甚至在通勤路上也能学,视频很难被超越。
- William Fiset 的图论系列:一份全面、适合初学者的播放列表(也通过 freeCodeCamp 发布),以清爽的动画讲解遍历、最短路径、树、网络流等内容。
- MIT OpenCourseWare 讲座:录制的算法讲座免费且深入,适合想要学术版本的你。
练习与题目
阅读不等于学会。通过解题才能巩固图论。
- LeetCode(graph 标签):面试风格题目的首选,从 Number of Islands 到 Course Schedule。
- CP-Algorithms:免费的算法百科,提供清晰的参考实现,非常适合竞技编程。
- Codeforces:竞赛以及庞大的题库,可按主题筛选,助你突破基础。
无论用哪个,都要按套路练习,而不是随机做题。编程面试中的图算法指南按所需技巧对题目进行分组。
快速参考与学习指南
一旦越过基础,你最需要的是快速复习的方法。好的参考资料正是在此显出价值。
- 本站免费提供:学习路线图说明学什么、何时学,算法速查表把每个复杂度汇于一页,深入文章则涵盖 Dijkstra、拓扑排序等等。
- 可下载的配套资料:Algorithms Handbook 把速查表扩展为 55 个算法,配有伪代码和复杂度;Graph Theory Masterclass 则是与路线图相呼应的九模块结构化课程。两者都在下文介绍。
综合运用
资源清单只有变成计划才有用。这里有一个简单的方法,把上述内容组合起来又不会让自己负担过重。
- 锚定一个主要资源:想要严谨就选书,想要结构就选课程,想要直觉就选可视化工具和视频。
- 练习:同时在 LeetCode 或 Codeforces 上,每个主题做几道题。
- 随手备一份参考(速查表或 Handbook),这样查某个复杂度时就不会中断节奏。
- 遵循顺序。如果不确定从哪开始,学习路线图会把一切从基础到面试就绪依次排列。
常见问题
学习图论最好的书是哪一本?
这取决于你的水平。对于严谨的入门课程,West 的 Introduction to Graph Theory 是标准之作。想要平缓入门,Chartrand 和 Zhang 的 A First Course in Graph Theory 价格实惠且易读。进阶学习方面,Diestel 的 Graph Theory 是权威参考;而专门针对图算法,CLRS 或 Skiena 的 The Algorithm Design Manual 都很出色。
哪里可以免费学习图论?
免费选择包括 MIT OpenCourseWare 的算法讲座、William Fiset 在 YouTube 上的图论视频系列、Diestel 教材的免费在线版,以及诸如 Learn Graph Theory 可视化工具及其文章库等交互式工具。
学习图论需要多长时间?
每周学习几个小时,大多数学习者可在六到八周内掌握基础和核心算法。达到自信、可应对面试的水平通常需要两到三个月的持续练习。
学习图论需要会编程吗?
不需要。理论只需要基本的逻辑和对简单数学的熟悉。当你进入图算法时,编程才变得有用——用 Python 这样的语言实现 BFS、DFS 和 Dijkstra 能巩固这些概念。