0. 数据结构与算法 —— 学习路线

2,078 阅读4分钟

摘自极客时间「数据结构与算法之美」专栏

学习线路

必须要掌握的:

复杂度分析(M 10分)

在平时的工作或者学习时,需要主动有意识的去分析每个算法的时间复杂度和空间复杂度。

掌握程度:能够自行分析专栏中大部分数据结构和算法的时间、空间复杂度。

数组、栈和队列(E 8分)

这三个是基本的数据结构,是后续更复杂度数据结构和算法的基础。

掌握程度:能够自己写代码实现动态数组、栈、队列。

链表(M 9分)

面试常考,不仅能够看懂专栏内容,还需要能够将专栏中提到的经典算法,如:链表反转、求中间节点等,轻松无 bug 的实现。

掌握程度:能够轻松写出经典的链表算法题。

递归(H 10分)

在计算机中非常重要的算法思想,作者说不会递归就不能算入门了数据结构和算法。最主要的方法是多练。可以先从简单的斐波那契数列、求阶乘等,再过渡到归并排序、二叉树遍历、求高度,最后是回溯八皇后、背包问题等。

掌握程度:轻松写出二叉树遍历、八皇后、背包问题、DFS 的递归代码。

排序、二分查找(E 7分)

掌握程度:能够自己实现各种排序算法、二分查找法及其变体代码。

散列表(M 8分)

是一种应用非常广泛的数据结构,需要牢固掌握。

掌握程度:对于初学者,能够自己实现一个拉链法解决冲突的散列表即可。

二叉树(M 9分)

非常重要的一种数据结构,面试经常会考。暂时不包括红黑树。

掌握程度:能够代码实现二叉树的前、中、后序遍历,按层遍历,求高度等景点的二叉树题目。

堆与堆排序(M 8分)

掌握程度:能实现堆、堆排序,并且掌握堆的三种应用(优先级队列、Top K、中位数)

图的表示(E 8分)

内容比较多,但是面试基本上不会考。但是,还是需要掌握基本的图的概念、表示方法。

掌握程度:理解图的三种表示方法(邻接矩阵、邻接表、逆邻接表),能够自己代码实现。

深度广度优先搜索(H 8分)

基于图的最基本的搜索算法,一个用到了队列,另一个用到了递归。可以最后再来挑战。

掌握程度:能代码实现广度、深度优先搜索算法。

字符串匹配(RF、RK)(E 7分)

BF 非常简单,RK 稍微复杂点。

掌握程度:能实践 RF 算法,能看懂 RK 算法。

字符串匹配(Tire 树)(M 7分)

这个只需要能看懂,不要求代码实现。有些面试官喜欢考,主要是结合场景来考察,主要是看你知不知道实现 Tire 树这个东西。

掌握程度:能看懂,知道特点、应用场景即可,不要求代码实现。

四种算法思想(H 10分)

这个是重点,也是难点。贪心、分治、回溯、动态规划每一个都不简单。应付 FLAG 这样的公司的面试,必须要拿下这一块。但是这些内容可以放到最后,做一个长时间的学习计划来攻克。

掌握程度:可以放到最后,但是一定要掌握!做到能够实现 LeetCode 上面 Medium 的题目。

中级进阶

跳表(M 6分)

掌握程度:初学者可以跳过。感兴趣的话,能够看懂专栏内容,不要求掌握代码实现。

B+ 树(M 5分)

比较高级点的数据结构。面试可能会问,所以只需要看懂专栏的讲解即可。

掌握程度:可看可不看。

拓扑排序、最短路径、A*算法(H 5分)

稍微高级点的算法,能够轻松实现广度、深度优先搜索,看懂这三个算法并不难。但是面试基本不会考。

掌握程度:有时间和精力再学习

位图(E 6分)

位图不是重点,如果有余力最好掌握一下。

掌握程度:能看懂即可,能够自己实现一个位图结构最好。

高阶进阶

字符串匹配(BM、KMP、AC 自动机)(H 3分)

掌握程度:这三个算法非常难,对于初学者千万不要浪费时间在这个上面。

哈希算法(E 3分)

纯粹为了开阔思路

掌握程度:可以暂时不看

红黑树(H 3分)

掌握程度:初学者不用把时间浪费在上面

高级篇、实战篇的其他内容(H 3分)

掌握程度:可以暂时不看