极客时间已完结课程限时免费阅读

《数据结构与算法之美》学习指导手册

《数据结构与算法之美》学习指导手册-极客时间

《数据结构与算法之美》学习指导手册

讲述:冯永吉

时长01:38大小1.50M

你好,我是王争。
在设计专栏内容的时候,为了兼顾不同基础的同学,我在内容上做到了难易结合,既有简单的数组、链表、栈、队列这些基础内容,也有红黑树、BM、KMP 这些难度较大的算法。但是,对于初学者来说,一下子面对这么多知识,可能还是比较懵。
我觉得,对于初学者来说,先把最简单、最基础、最重要的知识点掌握好,再去研究难度较高、更加高级的知识点,这样由易到难、循序渐进的学习路径,无疑是最合理的。
基于这个路径,我对专栏内容,重新做了一次梳理,希望给你一份具体、明确、有效的学习指导。我会写清楚每个知识点的难易程度、需要你掌握到什么程度、具体如何来学习
如果你是数据结构和算法的初学者,或者你觉得自己的基础比较薄弱,希望这份学习指导,能够让你学起来能更加有的放矢,能把精力、时间花在刀刃上,获得更好的学习效果。
下面,我先给出一个大致的学习路线。
(建议保存后查看大图)
现在,针对每个知识点,我再给你逐一解释一下。我这里先说明一下,下面标记的难易程度、是否重点、掌握程度,都只是针对初学者来说的,如果你已经有一定基础,可以根据自己的情况,安排自己的学习。

1. 复杂度分析

尽管在专栏中,我只用了两节课的内容,来讲复杂度分析这个知识点。但是,我想说的是,它真的非常重要。你必须要牢牢掌握这两节,基本上要做到,简单代码能很快分析出时间、空间复杂度;对于复杂点的代码,比如递归代码,你也要掌握专栏中讲到的两种分析方法:递推公式和递归树。
对于初学者来说,光看入门篇的两节复杂度分析文章,可能还不足以完全掌握复杂度分析。不过,在后续讲解每种数据结构和算法的时候,我都有详细分析它们的时间、空间复杂度。所以,你可以在学习专栏中其他章节的时候,再不停地、有意识地去训练自己的复杂度分析能力。
难易程度:Medium
是否重点:10 分
掌握程度:在不看我的分析的情况下,能自行分析专栏中大部分数据结构和算法的时间、空间复杂度

2. 数组、栈、队列

这一部分内容非常简单,初学者学起来也不会很难。但是,作为基础的数据结构,数组、栈、队列,是后续很多复杂数据结构和算法的基础,所以,这些内容你一定要掌握。
难易程度:Easy
是否重点:8 分
掌握程度:能自己实现动态数组、栈、队列

3. 链表

链表非常重要!虽然理论内容不多,但链表上的操作却很复杂。所以,面试中经常会考察,你一定要掌握。而且,我这里说“掌握”不只是能看懂专栏中的内容,还能将专栏中提到的经典链表题目,比如链表反转、求中间结点等,轻松无 bug 地实现出来。
难易程度:Medium
是否重点:9 分
掌握程度:能轻松写出经典链表题目代码

4. 递归

对于初学者来说,递归代码非常难掌握,不管是读起来,还是写起来。但是,这道坎你必须要跨过,跨不过就不能算是入门数据结构和算法。我们后面讲到的很多数据结构和算法的代码实现,都要用到递归。
递归相关的理论知识也不多,所以还是要多练。你可以先在网上找些简单的题目练手,比如斐波那契数列、求阶乘等,然后再慢慢过渡到更加有难度的,比如归并排序、快速排序、二叉树的遍历、求高度,最后是回溯八皇后、背包问题等。
难易程度:Hard
是否重点:10 分
掌握程度:轻松写出二叉树遍历、八皇后、背包问题、DFS 的递归代码

5. 排序、二分查找

这一部分并不难,你只需要能看懂我专栏里的内容即可。
难易程度:Easy
是否重点:7 分
掌握程度:能自己把各种排序算法、二分查找及其变体代码写一遍就可以了

6. 跳表

对于初学者来说,并不需要非得掌握跳表,所以,如果没有精力,这一章节可以先跳过。
难易程度:Medium
是否重点:6 分
掌握程度:初学者可以先跳过。如果感兴趣,看懂专栏内容即可,不需要掌握代码实现

7. 散列表

尽管散列表的内容我讲了很多,有三节课。但是,总体上来讲,这块内容理解起来并不难。但是,作为一种应用非常广泛的数据结构,你还是要掌握牢固散列表。
难易程度:Medium
是否重点:8 分
掌握程度:对于初学者来说,自己能代码实现一个拉链法解决冲突的散列表即可

8. 哈希算法

这部分纯粹是为了开拓思路,初学者可以略过。
难易程度:Easy
是否重点:3 分
掌握程度:可以暂时不看

9. 二叉树

这一部分非常重要!二叉树在面试中经常会被考到,所以要重点掌握。但是我这里说的二叉树,并不包含专栏中红黑树的内容。红黑树我们待会再讲。
难易程度:Medium
是否重点:9 分
掌握程度:能代码实现二叉树的三种遍历算法、按层遍历、求高度等经典二叉树题目

10. 红黑树

对于初学者来说,这一节课完全可以不看。
难易程度:Hard
是否重点:3 分
掌握程度:初学者不用把时间浪费在上面

11. B+ 树

虽然 B+ 树也算是比较高级的一种数据结构了,但是对初学者来说,也不是重点。有时候面试的时候还是会问的,所以这一部分内容,你能看懂专栏里的讲解就可以了。
难易程度:Medium
是否重点:5 分
掌握程度:可看可不看

12. 堆与堆排序

这一部分内容不是很难,初学者也是要掌握的。
难易程度:Medium
是否重点:8 分
掌握程度:能代码实现堆、堆排序,并且掌握堆的三种应用(优先级队列、Top k、中位数)

13. 图的表示

图的内容很多,但是初学者不需要掌握那么多。一般 BAT 等大厂面试,不怎么会面试有关图的内容,因为面试官可能也对这块不会很熟悉哈:)。但是,最基本图的概念、表示方法还是要掌握的。
难易程度:Easy
是否重点:8 分
掌握程度:理解图的三种表示方法(邻接矩阵、邻接表、逆邻接表),能自己代码实现

14. 深度广度优先搜索

这算是图上最基础的遍历或者说是搜索算法了,所以还是要掌握一下。这两种算法的原理都不难哈,但是代码实现并不简单,一个用到了队列,另一个用到了递归。对于初学者来说,看懂这两个代码实现就是一个挑战!可以等到其他更重要的内容都掌握之后,再来挑战,也是可以的。
难易程度:Hard
是否重点:8 分
掌握程度:能代码实现广度优先、深度优先搜索算法

15. 拓扑排序、最短路径、A* 算法

这几个算法稍微高级点。如果你能轻松实现深度、广度优先搜索,那看懂这三个算法不成问题。不过,这三种算法不是重点。面试不会考的。
难易程度:Hard
是否重点:5 分
掌握程度:有时间再看,暂时可以不看

16. 字符串匹配(BF、RK)

BF 非常简单,RK 稍微复杂点,但都不难。这个最好还是掌握下。
难易程度:Easy
是否重点:7 分
掌握程度:能实践 BF 算法,能看懂 RK 算法

17. 字符串匹配(BM、KMP、AC 自动机)

这三个算法都挺难的,对于算法有一定基础的人来说,看懂也不容易。所以,对于初学者来说,千万别浪费时间在这上面。即便有余力,看懂就好了,不用非得能自己实现。
难易程度:Hard
是否重点:3 分
掌握程度:初学者不用把时间浪费在上面

18. 字符串匹配(Trie)

这个还是要能看懂,不过不需要能代码实现。有些面试官喜欢考这个东西,主要是结合应用场景来考察,只是看你知不知道要用 Trie 树这个东西。
难易程度:Medium
是否重点:7 分
掌握程度:能看懂,知道特点、应用场景即可,不要求代码实现

19. 位图

位图不是重点,如果有余力最好掌握一下。
难易程度:Easy
是否重点:6 分
掌握程度:看懂即可,能自己实现一个位图结构最好

20. 四种算法思想

这个是重点,也是难点。贪心、分治、回溯、动态规划,每一个都不简单,其中动态规划又是最难、最烧脑的。要应付 FLAG 这样公司的面试,必须拿下这块内容。但是呢,学习要循序渐进,这块内容的学习可以放到最后,做个长时间的学习计划来攻克。
这块内容理论的东西不多,要想真的掌握,还是要大量刷题。
难易程度:Hard
是否重点:10 分
掌握程度:可以放到最后,但是一定要掌握!做到能实现 Leetcode 上 Medium 难度的题目
学而时习之,专栏虽然已经结束,但是学习的同学和留言依旧源源不断。希望这份学习指导手册对你有帮助,也欢迎你继续给我留言,和大家一起交流、学习、进步。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 117

提建议

上一篇
总结课 | 在实际开发中,如何权衡选择使用哪种数据结构和算法?
下一篇
春节7天练 | Day 1:数组和链表
unpreview
 写留言

精选留言(66)

  • 2019-04-27
    感谢老师为我打开这扇算法大门!我大概是一个月左右看完的第一遍,学得真是酣畅淋漓,欲罢不能!我也来分享一下我的学习心得吧。刚开始时我一天能看一到两章,到后来两天能看三章。我一般是早上上班途中看新的章节,因为早上脑子清醒比较适合在脑中推理数据结构和算法的演化过程。中午午休出去散步再听一遍,针对难点代码再推演一遍,基本上能大概搞懂。上班时间如果有碎片时间的话,会见缝插针的敲一点示例代码,巩固练习。下班地铁上或看看新章节,或复习前面的章节。周末的话反而比较忙,没有大块学习时间,只能带着耳机见缝插针的听音频复习巩固。
    展开
    共 4 条评论
    82
  • 大熊
    2019-04-22
    感谢老师线下线上的分享。 学习重在力行,我会继续努力。
    29
  • Yayu
    2019-04-22
    感谢王争老师的总节梳理,看着这篇索引,哪怕没有全部掌握,也心生安慰,至少知道掌握了哪些,没有掌握哪些。
    20
  • 刘文韬
    2019-06-04
    作为一名六年的老工程师,看过5篇专栏,但是这个是内容最丰富、最有价值的了。经常会有一种:哦,原来这个东西是这样的感觉!

    作者回复: 多谢认可

    19
  • 李杰
    2019-04-22
    胸中藏侠气
    15
  • 2019-04-22
    今天五点半醒来,发现老师的文章又更新了,看来确实是亲生,老师付出了不少心血,哈哈! 首先非常佩服前面一直坚持学完的XDJM,学完肯定每个人都有不同的收获。 前段时间由于工作和个人犯懒,导致并没有坚持学完,现在有时间了,打算在认真先学一遍,没想到老师就发了这么一篇文章,老师真是太棒啦! 现在学习,可以不用像追美剧一样,期待更新了。可以根据自己喜好去学习相应课程。 老师的课程,有声音(根据同学的提议,换了一个专门的配音师,给力),有图(有图有真相),有文字,声形并茂,应该可以满足大多数人的胃口啦。 我这个人还是看书效率高,听的话就得跟着别人的语速,大家可以根据自身情况,选择适合自己的方式。 学习是一个循序渐进的过程,老师的课程是很棒的,但不意味着,学完一遍就能精通数据结构和算法,任何知识都需要反复提炼,螺旋上升的。 对于知识的理解,我觉得分这么几个阶段: 1.听懂。2.能够提炼和总结。3.能够讲明白。4.能够用浅显易懂的方式讲解。 我不知道大家有没有觉得自己懂了,但要有时给别人讲不明白,不是别人的问题,其实是咱们自己并没有彻底掌握。 最后祝大家都能将自己掌握的知识,用通俗易懂的方式传授给别人。 也期待老师的下一门课,谢谢王争老师!
    展开
    16
  • 肖小强
    2019-04-22
    其中有些知识点自己当时确实有点钻牛角尖了,有了老师这个参考,打算再刷一遍
    11
  • Brave
    2019-04-22
    正在二刷中,结合其他算法书籍总结到博客,感谢老师,您的算法专栏已经成为我的随身听了
    9
  • 红叶
    2019-04-22
    感谢老师,虽然我学的太慢跟不上。。。
    6
  • fine
    2019-06-06
    请问封面图以及插图这种风格怎么做出来的呀

    作者回复: 编辑画的

    5
  • 2019-04-28
    在刚出这个专栏的时候有公众号推荐这个专栏,我就买了,然后我就掉队了。。本专业材料在校生,希望转行IT,刚学的编程语言都没掌握好,从9月21号学,到10月5号放弃(我都有做笔记,背代码,然而只是背代码)。。在这半年之后我又重新拿起了数据结构与算法这个专栏。之前学一脸黑人问号,现在再看觉得写的是真的好,至少对非计算机专业的人来说既够友好,又有深度。学完java之后,感觉就像支付宝渗透在现实生活的各个方面一样,没有微信支付宝就会感到别扭,学计算机不碰算法虽然也能完成业务,但是也会感到别扭。决心就不表了,老牛慢慢犁吧,犁明白为止。达不到终点的时候就看看在终点给自己写下的话,当我啃完再给自己回复肯定是一件很有意思很满足的事。
    展开
    4
  • 疾风知劲草
    2020-05-20
    之前掉队了,现在再重新来过,配合leetcode刷题,事半功倍。
    共 1 条评论
    4
  • Geek_41d472
    2019-05-07
    感谢老师,这个栏目真的很多干货,可惜我在广州上班,不然就参加老师线下课程了!
    3
  • Earl
    2019-04-26
    这个专栏将会陪伴我走过找工作的日日夜夜,每天都会翻出来看,受益匪浅。
    3
  • Rain
    2019-04-22
    又看到老师来指导学习,重新开始按照老师推荐的节奏来一遍,感谢!
    3
  • w 🍍
    2019-06-03
    一刷结束。。。 开始的时候还是跟的上的,慢慢掉队了....现在对字符串匹配算法部分全忘记了。。。 准备二刷...
    2
  • 新哥
    2019-05-15
    好几个老师推荐 试听了一下 感觉讲的很轻松 能听进去 再试试
    2
  • Geek_18d036
    2022-03-07
    我没看错嘛 24 万人 我学完后 说我是第4000多个学完的~~
    1
  • Yolanda
    2021-01-24
    看了好几家的课,这个数据结构和算法不论是教学模式还是内容都是全网最佳,非常感激学术派大佬王争老师,之前好些没弄懂的东西都整的明明白白的。
    1
  • 铁男神sama
    2019-04-24
    已经反反复复看了争哥的专栏有三遍了,对于巩固复习真的太有帮助啦,精品就是精品,不会像某些劣质资源那样,有浪费时间那种感觉。希望争哥越来越好
    1