录友们! 今天和大家正式宣布:大家期盼已久的「代码随想录图论」正式发布了。
一年多来,日日夜夜,伏案编码、思考、写作,就为了今天给录友们一个交代!
我知道录友们在等图论等太久了,其实我比大家都着急。
图论完整版目前已经开放在代码随想录网站:programmercarl.com
「代码随想录图论」共分为 五大模块,共有三十一篇长文讲解:
- 深搜与广搜
- 并查集
- 最小生成树
- 拓扑排序
- 最短路算法
耗时一年之久,代码随想录图论 终于面世了!
一年前 23年的3月份 我刚刚更新完了 代码随想录算法公开课 ,这是我亲自录制的 140期 算法视频讲解,目前口碑极佳。
录完公开课之后,我就开始筹划更新图论内容了,无奈图论内容真的很庞大。
关于图论章节,可以说 是代码随想录所有章节里画图数量最多,工程量最大的一个章节,整个图论 画图就400百多幅。
随便截一些图,大家感受一下:
具体内容,大家可以去代码随想录网站(programmercarl.com)去看看,非常精彩!
期间有很多录友再催:卡哥怎么不更新图论呢? 卡哥是不是不打算更新图论了? 等等
每次我都要去解释一波。
如果我想 快速出图论章节,可以很快!
但我不想做 降低 代码随想录整体质量和口碑的事情。
所以关于现在发布的「代码随想录图论」,我可以很自信的说,这是市面上大家能看到的,最全、最细致图论算法教程。
我在写作的时候没有避开任何雷区,完全遇雷排雷,然后让大家舒舒服服的走过去。
什么是雷区?
很多知识点 ,大家去看资料的时候会发现是 没有讲解的或者一笔带过, 因为这种雷区知识点 很难讲清楚或者需要花费大量的时间去讲明白。
一些知识点是这样的:自己一旦懂了就知道是那么回事,但要写出来,要给别人讲清楚,是很难的一件事。
这些知识点同样是雷区,就是大家在看 教程或者算法讲解的时候,作者避而不谈的部分。
例如: 深搜为什么有两种写法,同样的广搜为什么有一种写法超时了,bellman_ford 为什么 要松弛 n - 1次,负权回路对最短路求解的影响 等等。
这一点大家在阅读代码随想录图论的时候,可以感受到 我对细节讲解的把控程度。
图论是很重要的章节,也是 大家求职笔试面试,无论是社招还是校招,都会考察的知识内容。
而且图论应用广泛,在大家做项目开发的时候,或多或少都会用到图论相关知识。
例如:通信网络(拓扑排序、最短路算法),社交网络(深搜、广搜),路径优化(最短路算法),任务调度(拓扑排序),生物信息学(基因为节点,基因关系为边),游戏开发(A * 算法等)等等
为了保质保量更新图论,市面上所有的算法书籍,我都看过!
反复确认 思路正确性的同时,不仅感叹 市面上的算法书籍 在图论方面的 “缺斤少两” 。
大名鼎鼎的《算法4》 以图论内容详细且图解多 而被大家好评,
以最短路算法为例,《算法4》,只讲解了 Dijkstra(堆优化)、SPFA (Bellman-Ford算法基于队列) 和 拓扑排序,
而 dijkstra朴素版、Bellman_ford 朴素版、bellman_ford之单源有限最短路、Floyd 、A * 算法 以及各个最短路算法的优劣,并没有讲解。
其他算法书籍 更是对图论的很多知识点一笔带过。
而在 代码随想录图论章节,仅仅是 最短路算法方面,我就详细讲解了如下内容:
- dijkstra朴素版
- dijkstra堆优化版
- Bellman_ford
- Bellman_ford 队列优化算法(又名SPFA)
- bellman_ford 算法判断负权回路
- bellman_ford之单源有限最短路
- Floyd 算法精讲
- 启发式搜索:A * 算法
常见最短路算法,我都没有落下。
而且大家在看很多算法书籍是没有编程题目配合练习,这样学习效果大打折扣, 一些书籍有编程题目配合练习但知识点严重不全。
我在讲解图论的时候,最头疼的就是找题,在力扣上 找题总是找不到符合思路且来完整表达算法精髓的题目。
特别是最短路算法相关的题目,例如 Bellman_ford系列 ,Floyd ,A * 等等总是找不到符合思路的题目。
所以我索性就自己出题吧,这也是 卡码网(kamacoder.com)诞生的一个原因之一。
为了给大家带来极致的学习体验,我在很多细节上都下了功夫。
卡码网专门给大家准备的ACM输入输出模式,图论是在笔试还有面试中,通常都是以ACM模式来考察大家,而大家习惯在力扣刷题(核心代码模式),核心代码模式对图的存储和输出都隐藏了。
图论题目的输出输出相对其他章节的题目来说是最难处理的。
图论的输入难在 图的存储结构,如果没有练习过 邻接表和邻接矩阵 ,很多录友是写不出来的。
而力扣上是直接给好现成的 数据结构,可以直接用,所以练习不到图的输入,也练习不到邻接表和邻接矩阵。
ACM输入输出模式是最考察候选人对代码细节把控程度。
如果熟练ACM模式,那么核心代码模式基本没问题,但反过来就不一定了。
同样,图论的输出也有细节,例如 求节点1 到节点5的所有路径, 输出可能是:
1 2 4 5
1 3 5
表示有两条路可以到节点5, 那储存这个结果需要二维数组,最后在一起输出,力扣是直接return数组就好了,但 ACM模式要求我们自己输出,这里有就细节了。
就拿 只输出一行数据,输出 1 2 4 5
来说,
很多录友代码可能直接就这么写了:
for (int i = 0 ; i < result.size(); i++) {
cout << result[i] << " ";
}
这么写输出的结果是 1 2 4 5
, 发现结果是对的,一提交,发现OJ返回 格式错误 或者 结果错误。
如果没练习过这种输出方式的录友,就开始怀疑了,这结果一样一样的,怎么就不对,我在力扣上提交都是对的!
大家要注意,5 后面要不要有空格!
上面这段代码输出,5后面是加上了空格了,如果判题机判断 结果的长度,标准答案1 2 4 5
长度是7,而上面代码输出的长度是 8,很明显就是不对的。
所以正确的写法应该是:
for (int i = 0 ; i < result.size() - 1; i++) {
cout << result[i] << " ";
}
cout << result[result.size() - 1];
这么写,最后一个元素后面就没有空格了。
这是很多录友经常疏忽的,也是大家刷习惯了 力扣(核心代码模式)根本不会注意到的细节。
同样在工程开发中,这些细节都是影响系统稳定运行的因素之一。
ACM模式 除了考验算法思路,也考验 大家对 代码的把控力度, 而 核心代码模式 只注重算法的解题思路,所以输入输出这些就省略掉了。
大家可以发现,现在 用心给大家更新硬核且免费资料的博主 已经不多了。
这一年的空闲时间,如果我用来打磨付费课程或者付费项目,或者干脆把图论做成付费专栏 加上现在的影响力,一定可以 “狠狠赚一笔”。
对我来说,有些钱可以赚,有些钱不赚。
如果持续关注代码随想录的录友可以发现:代码随想录不仅仅优质题解和视频免费,还有 ACM模版配套25题、 设计模式精讲配套23题、每周举办大厂笔试真题(制作真题是十分费时的), 这些都是免费优质资源。
在付费与免费之间,我一直都在努力寻找平衡。
很多录友之所以付费加入 知识星球 或者 算法训练营 ,也是因为看了这些免费资源想支持我一下。
“不忘初心”,说出来很容易,但真正能随着岁月的流淌 坚持初心,是非常非常难的事情。
诱惑太多!有惰性的诱惑,有利益的诱惑。
正如我之前说的:“代码随想录” 这五个字,我是会用一生去经营。
免费硬核的算法内容是 代码随想录的立身之本,也是 大家为什么学算法学编程首选代码随想录的根本所在。
当大家通过 代码随想录 提升了编程与算法能力,考上研或者找到好工作的时候,于我来说已经是很幸福的事情:
至此图论内容 已完全免费开放在代码随想录网站(programmercarl.com),造福广大学习编程的录友们!
Github 也已经同步 :https://github.com/youngyangyang04/leetcode-master ,关于其他语言版本,欢迎录友们去仓库提交PR
关于图论PDF版本,我后面会整理出来,免费发放给大家。
关于图论视频版本,不出意外,应该在年底开始在B站更新,同样免费开放。
总之,代码随想录会持续更新下去,无论是文字版还是视频版。
希望大家 不用 非要到找工作的时候 或者要考研的时候 才想到代码随想录。
代码是作品,算法更是艺术,时不时来欣赏一段解决关键问题的优雅代码,也是一种享受。
最后,愿录友们学有所成,归来仍看代码随想录!