October 11, 2018 · 数据结构与算法 本文字数: 983 阅读时长:3 min 全站字数:344.2k

敏而好学之HOW——怎样学习数据结构与算法

  1. 形影不离的数据结构与算法
  2. 学习衡量数据结构与算法的标尺——时间复杂度和空间复杂度分析
  3. 掌握具有代表性的数据结构与算法
  4. 学习方法论

本文是数据结构与算法之美专栏的学习笔记。

抓重点,系统性。

在探讨如何学习数据结构与算法之前,我们先认识一下什么是数据结构与算法。

形影不离的数据结构与算法

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

比如图书馆中为了方便查找,图书管理员一般会将书籍分门别类进行摆放,按照一定规律编号,这就是书籍这种“数据”的存储结构。而算法就是,如何去找一本书的方法。你可以随机的,漫无目的的在图书馆中寻找,也可以先根据书籍类别的编号,是人文、科学还是计算机,然后定位到书架,再依次查找。

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

从广义和狭义的定义可以看出,数据结构与算法总是成对出现的。这是因为,数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。 因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。

例如,数组这种数据结构具有随机访问的特点,所以常用二分查找方法来查找数据。如果使用链表,就不能使用二分查找,因为链表并不支持随机访问。

学习衡量数据结构与算法的标尺——时间复杂度和空间复杂度分析

在文章敏而好学之WHY——为什么要掌握数据结构与算法提到使用恰当的数据结构和算法可以提升效率,而效率的提升通常是以时间换空间或者以空间换时间。那么如何衡量不同的数据结构和算法,这就需去分析数据结构和算法的时间和空间复杂度。

有了复杂度分析这把尺子,我们才能更好的评价各种数据结构和算法。复杂度分析就是比较的标准。

掌握具有代表性的数据结构与算法

基础的,常用的数据结构与算法内容并不多,如数据结构有数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;算法有递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

对于每种数据结构和算法,都应该理清楚这种数据结构或者算的来历,特点,适合解决什么问题,实际的应用场景。即:

  1. 为什么会有这种数据结构或者算法?
  2. 这些数据结构与算法是如何实现的?
  3. 适合的应用场景是什么?

学习方法论

哲学里面的:认识论(WHY,为什么要学),方法论(HOW,如何去学),目的论(WHAT,如何达成学习的目的)。

  1. 实践化学习。动手实现。leetcode走起。学习笔记。
  2. 社交化学习。评论,互动,多问为什么。找不足的地方,挑刺学习。讲的不对,不合理。
  3. 游戏化学习。反馈,奖励。
  4. 时间化学习。学习需要时间,需要向时间一样慢慢流逝。