Skip to content

Latest commit

 

History

History
239 lines (129 loc) · 11.2 KB

tulunfabu.md

File metadata and controls

239 lines (129 loc) · 11.2 KB

图论正式发布!

录友们! 今天和大家正式宣布:大家期盼已久的「代码随想录图论」正式发布了。

一年多来,日日夜夜,伏案编码、思考、写作,就为了今天给录友们一个交代

我知道录友们在等图论等太久了,其实我比大家都着急。

大家一直都在催

图论完整版目前已经开放在代码随想录网站: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题每周举办大厂笔试真题(制作真题是十分费时的), 这些都是免费优质资源。

在付费与免费之间,我一直都在努力寻找平衡

很多录友之所以付费加入 知识星球 或者 算法训练营 ,也是因为看了这些免费资源想支持我一下。

“不忘初心”,说出来很容易,但真正能随着岁月的流淌 坚持初心,是非常非常难的事情

诱惑太多!有惰性的诱惑,有利益的诱惑

正如我之前说的:“代码随想录” 这五个字,我是会用一生去经营。

免费硬核的算法内容是 代码随想录的立身之本,也是 大家为什么学算法学编程首选代码随想录的根本所在。

当大家通过 代码随想录 提升了编程与算法能力,考上研或者找到好工作的时候,于我来说已经是很幸福的事情:

对笔试帮助大

华为od将近满分

研究生复试

红包感谢代码随想录366

上岸亚马逊

至此图论内容 已完全免费开放在代码随想录网站(programmercarl.com),造福广大学习编程的录友们

Github 也已经同步 :https://github.com/youngyangyang04/leetcode-master ,关于其他语言版本,欢迎录友们去仓库提交PR

后序

关于图论PDF版本,我后面会整理出来,免费发放给大家。

关于图论视频版本,不出意外,应该在年底开始在B站更新,同样免费开放。

总之,代码随想录会持续更新下去,无论是文字版还是视频版。

希望大家 不用 非要到找工作的时候 或者要考研的时候 才想到代码随想录。

代码是作品,算法更是艺术,时不时来欣赏一段解决关键问题的优雅代码,也是一种享受。

最后,愿录友们学有所成,归来仍看代码随想录