如何抓住重点,系统高效地学习数据结构与算法?

发布时间 2023-04-12 08:19:44作者: Jimmyhus

如何抓住重点,系统高效地学习数据结构与算法?

因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因,让很多初学者对这门课望而却步。
我个人觉得,其实真正的原因是你没有找到好的学习方法,没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习方法,学起来并没有看上去那么难,更不需要什么高智商、厚底子。

什么是数据结构?什么是算法?

大部分数据结构和算法教材,在开篇都会给这两个概念下一个明确的定义。但是,这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会让你陷入死抠定义的误区。毕竟,我们现在学习,并不是为了考试,所以,概念背得再牢,不会用也就没什么用,实践是检验真理的唯一标准。

虽然我们说没必要深挖严格的定义,但是这并不等于不需要理解概念。 下面我就从广义和狭义两个层面,来帮你理解数据结构与算法这两个概念。
从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。

图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。那我们如何来查找一本书呢?
有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。
数据是真正存在物理内存中的,在物理内存地址之上映射有线性内存地址,数据结构,算法都是基于线性内存地址的。数据结构指的是在这个一维的线性地址上,怎么存放一条条的数据,是连着放,还是分开一块块地放,更好的数据结构能更好地组织内存地址空间。算法指的就是怎么定位这个线性地址,更好的算法能更快地找到这个线性地址,找到这个数据。

从狭义上讲,也就是我们专栏要讲的,是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。这些都是前人智慧的结晶,我们可以直接拿来用。我们要讲的这些经典数据结构和算法,都是前人从很多实际操作场景中抽象出来的,经过非常多的求证和检验,可以高效地帮助我们解决很多实际的开发问题。

那数据结构和算法有什么关系呢?
这是因为,数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。 因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
比如,因为数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据。但如果我们选择链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。

数组可以通过下标访问任意元素,而链表只能通过迭代来访问某个指定元素

数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。

学习数据结构与算法需要什么基础?

数据结构和算法课程确实会涉及一些数学方面的推理、证明,尤其是在分析某个算法的时间、空间复杂度的时候,但是这个你完全不需要担心。你只要有高中数学水平,就完全可以学习。
最好有些编程基础,如果有项目经验就更好了。这样数据结构和算法如何提高效率、如何节省存储空间,就会有很直观的感受。因为,对于每个概念和实现过程,从实际场景出发,明白“是什么”“为什么”,并且告诉你遇到同类型问题应该“怎么做”

学习的重点在什么地方?