算法和数据结构的学习路线
算法的基本知识
很多算法都是基于一个核心思想展开的研究。
例如:快速排序算法的核心思想是
分治法
,二叉树的搜索算法的核心思想是二分法
。
学习算法的几种核心思想,并了解不同思想的发挥场景以及限制,才能更好地理解由此泛生出的算法,并且也能在自创算法的时候提供可靠的理论依据。
此外,评价一个算法的好坏的标准有 时间复杂度
和 空间复杂度
,这二者都是围绕数据规模(数据量) N
讨论的函数。
当数据规模
N
增大或减小时,时间复杂度或空间复杂度的 增加或减小的速度。
例如:Hash
算法本身是与数据规模N
的大小无关的,1 条数据、10 条数据、100 条数据,乃至 1000 条数据都不影响Hash
算法的执行效率,所以Hash
算法的时间复杂度是O(1)
。
基础数据结构
基本数据结构由 数组
和 链表
构成,其他的数据结构几乎都是这二者的组合应用,了解二者的构成原理、各自的优劣势以及应用场景,才是学习好数据结构的关键。
好的数据结构决定了代码的简易程度,选择对的数据结构既可提升代码的执行效率,又能节省代码量,还能提高代码的可读性,只有巧妙的结合算法与数据结构才能带来最佳的程序性能。
类似
快速排序
、堆排序
等等的一些基础算法也是建立在这两种基础数据结构之上的。
进阶数据结构
进阶数据结构由 树型结构
和 图型结构
构成,二者皆可通过 数组
或 链表
实现,且不同的实现方式也有不同的优劣。
树形结构:善于描述数据的层次关系,并且有着卓越的查询性能。
图型结构:擅长描述数据间的属性关系,常用于做知识图谱、人际关系网等。
树形结构根据节点下子分支的数量还分为多种子结构,如
二叉树
。
图型结构根据元素的关系分为有向图
和无向图
。
基于进阶数据结构,也有辅助计算或维护的算法,比如用于维护平衡二叉树结构的红黑树算法。
进阶数据结构的变种
进阶数据结构的变种是指 基于进阶数据结构泛生出的数据结构,属于进阶数据结构的子集。
例如:树形结构的变种有
B树
、B+树
、B*树
等。
在学完 基础数据结构
和 进阶数据结构
后,可以进一步学习进阶数据结构中的几种常用的变种数据结构,这些数据结构往往是某一类问题场景的解决方案,通过对这些数据结构的学习可以帮你更深刻的理解数据结构。
刷题库
在完成了上面几步的学习之后,刷题库无疑是最快提升算法能力的最佳选择。
题库中绝大多数的算法题都是以解决某一场景为主的,也存在一些基于数据结构的搜索算法题目,并且每一套题都给出了不同编程语言的解题代码和解题思路,这对算法的学习很有帮助。