vlambda博客
学习文章列表

怎么理解数据结构与算法

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



         我们从两个层面来解释:

广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法


举个例子:在我们的仓储存放货物的时候,为保证货物的质量,仓库货物保管时必须分类存放。不同类别,不同规则,不同批次的货物要分类,分库,分位,分堆存放;分拣的货物,在分拣之后,应分位存放,以免相混;损坏的货物必须与原货分别存放。那我们怎么快速的找到其中某一个SKU呢?我们可以一件一件的找,也可以根据分类的去找,先锁定分类,再从分类里扫描锁定我们要找的SKU,这些都算是算法。


从狭义上讲,也就是我们常常说的,比如队列、栈、堆、二分查找、动态规划等。



        那数据结构和算法有什么关系呢?为什么大部分书都把这两个东西放到一块儿来讲呢?这是因为,数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。



        比如,因为数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据。但如果我们选择链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。



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



  • 学习的重点在什么地方?

        提到数据结构和算法,很多人就很头疼,因为这里面的内容实在是太多了。这里,我就帮你梳理一下,应该先学什么,后学什么。你可以对照看看,你属于哪个阶段,然后有针对地进行学习。



        想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念——复杂度分析。


        这个概念究竟有多重要呢?可以这么说,它几乎占了数据结构和算法这门课的半壁江山,是数据结构和算法学习的精髓。


        数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。所以,如果你只掌握了数据结构和算法的特点、用法,但是没有学会复杂度分析,那就相当于只知道操作口诀,而没掌握心法。只有把心法了然于胸,才能做到无招胜有招!



        我借鉴了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。




        结合我自己的学习心得,还有这些年的面试、开发经验,我总结了20个最常用的、最基础数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这20个知识点就足够了。



        这里面有

        10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;


        10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。



     


  • 一些可以让你事半功倍的学习技巧

        前面我给你划了学习的重点,也讲了学习这门课需要具备的基础。作为一个过来人,现在我就给你分享一下,专栏学习的一些技巧。掌握了这些技巧,可以让你化被动为主动,学起来更加轻松,更加有动力!


1.边学边练,适度刷题



        “边学边练”这一招非常有用。建议你每周花1~2个小时的时间,集中把这周的三节内容涉及的数据结构和算法,全都自己写出来,用代码实现一遍。这样一定会比单纯地看或者听的效果要好很多!



 2.多问、多思考、多互动



3.打怪升级学习法



        学习的过程中,我们碰到最大的问题就是,坚持不下来。是的,很多基础课程学起来都非常枯燥。为此,我自己总结了一套“打怪升级学习法”。游戏你肯定玩过吧?为什么很多看起来非常简单又没有乐趣的游戏,你会玩得不亦乐乎呢?这是因为,当你努力打到一定级别之后,每天看着自己的经验值、战斗力在慢慢提高,那种每天都在一点一点成长的成就感就不由自主地产生了。



4.知识需要沉淀,不要想试图一下子掌握所有



        在学习的过程中,一定会碰到“拦路虎”。如果哪个知识点没有怎么学懂,不要着急,这是正常的。因为,想听一遍、看一遍就把所有知识掌握,这肯定是不可能的。学习知识的过程是反复迭代、不断沉淀的过程。如果碰到“拦路虎”,你可以尽情地在留言区问我,也可以先沉淀一下,过几天再重新学一遍。所谓,书读百遍其义自见,我觉得是很有道理的!



        结合极客时间,王争老师的讲课内容,我将把自己的学习感受在这里卓一和大家分享


欢迎留言和我分享,我会第一时间给你反馈。