数据结构和算法之美-第零篇

Posted by Kylen on 2019-07-29

前言

工作也有两三年了,从最开始的拘谨到现在游刃有余,可怕的是,回过头一看,我并不认为自己的能力有了一个质的提升,可能只是对工作更熟悉了。偶尔看到一些优秀的开源代码,读起来及其吃力,等到读懂了,不禁为作者身后的功底折服,也迫使我不得不去思考自己究竟差在哪里,该往哪个方向努力。

在我上大学期间就已经接触过数据结构和算法,因为懒眼光短加上这东西本身真的很深奥(在我看来),造成的后果就是对它的掌握很薄弱,只了解一些基本的数据结构和一些基础的排序方法。

再一次系统性的接触数据结构和算法在stormZhang推荐的王争老师的课程《数据结构和算法之美》,这门课花了我68块,到今天(2019-7-26)我看了不到一半,给我的印象就只有一个词能形容:物超所值。我向几个朋友推荐了这门课程,因为返利最后居然还赚了几杯咖啡钱。我想王争老师可能是最懂数据结构和算法的那批人了。所以这个系列基本是对《数据结构和算法之美》这门可能的搬运,其中加上我自己的理解。

数据结构和算法是什么?

在各种书籍、网络文献中,数据结构和算法指的是各种各样的数据结构(比如树、图,链表等)和各种各样的算法(比如各种排序算法、贪心、动态规划等),包括所有我们计算机中涵盖到的数据结构和算法。那么它本身是什么呢?我只想知道它是什么?你却告诉我更多我不知道的东西(手动滑稽)。

从广义上讲,数据结构就是一组数据的存储方法,算法就是操作数据的一组方法。这么一说就好理解了。

这也解释了为什么数据结构和算法总是放在一起说,因为数据结构是为算法服务的,算法要作用在特定的数据结构上

为什么要学习数据结构和算法?

工作一段时间后发现其实有些业务场景中涉及到数据处理又或者某些功能的程序设计,有时会出现性能极差的情况。这种情况下往往就会头痛束手无策。我想有了数据结构和算法的基础之后,这些难题就称不上难题了;第二,从长远看,没有人想被淘汰,我坚定的相信这是核心竞争力。不会随新技术的诞生而贬值。

总结一下:

  • 第一,能够帮助我们写出更好的代码,也能帮助我们更好的阅读别人的代码,理解底层技术的原理。
  • 数据结构和算法是核心竞争力。
  • 掌握了数据结构和算法,看待问题的深度和角度就会完全不一样。

如何高效的学习数据结构和算法

我想大概很多人都和我一样认为数据结构和算法真的晦涩难懂,有时候会想,能掌握这种知识的人要么高智商、要么极其极其努力。太可怕了。可能也真是因为这样才导致很多像我这样的人对其望而却步吧。

但这玩意儿其实没有这么难,至少没有达到非天才不能理解的地步,我们这种普通人下点功夫还是能掌握的。当然在如今网络信息如此驳杂的情况下,若是被迷了眼,估计就够呛了,所有使用优质的资源学习本身就已经领先了大多数人。再次感谢王争老师提供的课程。
data-structures-algorithm 2019-07-25 下午6.32.13.jpg
这张图几乎涵盖了所有数据结构和算法书籍中的知识点,借由此图,我们可以对数据结构和算法有一个全面的认识。但是,我们不是专攻算法的算法工程师,所以不必全部掌握,比如二分图和最大流在日常开发中基本不会用到,也没必要花时间去折腾。

真正要掌握的是以下20个最常用的也是最基础的数据结构和算法,对于我们面试和工作需要,这些就足够了。

10个数据结构:数组 链表 队列 散列表 二叉树 跳表 Trie树。从大的分类上看,也就是线性表:数组、链表、栈、队列、散列表;非线性表:树和图
10个算法:递归 排序 二分查找 搜索 哈希算法 贪心算法 分治算法 回溯算法 动态规划算法 字符串匹配算法

不要死记硬背,因为强记下来的东西一段时间之后什么也不会留下;知识需要沉淀,不要妄图一下子掌握所有,我搬运这些也是为了以后回顾之用。