专栏名称: 混沌巡洋舰
混沌巡洋舰, 给您洞穿未来的视力。我们以跨界为特色, 用理工科大牛的科学思维帮你梳理世界的脉络。
目录
相关文章推荐
科普中国  ·  人工智能获诺贝尔物理学奖?这合理吗? ·  8 小时前  
果壳  ·  如何缩短女性上厕所排队时间? ·  1 周前  
地球资源与地质活动  ·  中国科学院:丁林院士-特提斯地球动力系统研究新进展 ·  1 周前  
51好读  ›  专栏  ›  混沌巡洋舰

自学数据结构和算法入门需要几步

混沌巡洋舰  · 公众号  · 科学  · 2017-11-03 06:44

正文

16年底奥巴马去硅谷,在电视节目中被问到排序算法分为几种,他答到冒泡排序,这个回答他赢得了不少的掌声。都说程序等于算法加数据结构。到了深度学习的领域,你也许接触不到直接的数据结构,一切都有了高级语言给你完成了打包,但是你要是能知道点数据结构方面和算法方面的知识,还是能够对理解程序的运行效率有帮助的。Coursera最热门的计算机课程就是算法导论,程序员面试问的多的也是算法问题。


要想自学数据结构,推荐的书一是大话数据结构。这本书以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。


下面是我针对这本书画的思维导图,每一部分标注的时间代表着自学预计所需的时间,前面的数字代表自学的顺序。这里全部用英语标注,计算机领域通用的语言就是英语,如果能在自学的时候通过查查字典,顺便将英语搞定,不是一箭双雕吗。

接下来我们看每个部分

这部分的要点要花在问题上,也就是你能不能自己举出一些例子,来说明什么不是算法,什么不属于数据结构要研究的问题。你还要能找出数据结构在那些具体场景下有用,这部分的关键在于搜索并综合信息。

接着是最简单的线性结构,包括堆栈,队列。链表以及更复杂的双向链表循环链表。对于每一种数据结构,要搞清楚数据有几种存储方式,在每种操作方法下有那些操作。学完了这部分,你要能出一些包含具体例子的单选提,来、自问自答,通过你出题的范围,来判定你学到了什么。

接着是该如何评价算法,这一部分是之后分析所有算法的基础。大O的表示和小o的表示区别是什么?时间和空间复杂度的定义是什么?。对于递归的程序该怎么计算。这些问题看似简单,但要讲明白,需要分析很多例子。


有了前面两部分的预备知识,就可以来看各种排序算法了。明白不同的算法的复杂度是第一步,在不同的存储结构上的实现这些算法是第二步,而总结的时候,需要将这些算法进行比较,不止是理论上的比较,还包括相同复杂度的真实运算时间。同时要记住,排序算法远远不止上面列出的这些。


接下来要讨论的数据结构是字符串,字符串中的常用操作,包括求子串,连接俩个字符串,都很容易实现。而要求一个字符串在另一个中的出现位置,则需要KMP算法,这是我们接触的第一个不那么直接的动态规划算法。而在多种高级语言中,正则表达式则是通用的对字符串进行例如查找替换删除等操作的简写形式,也值得学会。

哈希作为最常用的线性数据结构,在Python这样的高级语言中频频出镜。哈希和数组的区别是什么,有什么优势,哈希是怎么存储在计算机中的,实现哈希时,不同的映射函数和碰撞处理的方案,其时间和空间复杂度又是怎样了。



从哈希遇到的问题,可以自然过渡到非线性的数据结构,包括树和图,这部分难度较大,先弄清楚了树和图有几种分类,每种分类各自怎么用线性结构的组合存储在计算机上,每种结构有什么操作。对于树和图,更关键的是其中的算法,最常见的是哈夫曼编码树,最短路径,最大流,最小生成树。每一种算法,弄明白可以自己画个图,手动执行一遍算法的每一步。

学完的总结应该是提升而不是重复。数据结构和算法的关键词是复杂度分析,存储方式的对比,以及动态规划这种算法设计的套路。网上有很多面试题中基于着算法和数据结构,自学完可以看看这些题目你是否会回答,选择一些题目,放到下面的大的思维导图中,借助题目,能够帮助你复习。


欢迎关注巡洋舰的深度学习实战课程, 手把手带你进行深度学习实战, 课程涵盖机器学习,深度学习, 深度视觉, 深度自然语言处理, 以及极具特色的深度强化学习,看你能不能学完在你的领域跨学科的应用深度学习惊艳你的小伙伴,成为身边人眼中的大牛, 感兴趣的小伙伴可以点击阅读原文。 


原创不易,随喜赞赏