为啥要学习

  • 我不想每次面试的时候,都担心自己算法不会,在面试的时候,面试官说让写一个算法,就直接说不会。
  • 我不想一辈子都在代码一线写业务逻辑,想成为架构师,那么算法和数据结构就是我绕不过的坎儿

我们知道,盖房子,如果地基不牢固,那么肯定不会盖起高楼的,就算盖起来了,也不牢固,稍微有个风吹草动就可能出现大厦坍塌, 同样,在编程领域,数据结构和算法是基础知识,核心知识,他们就是地基,数据结构和算法不会,就别想进入大公司,更别提什么架构师。

学习数据结构和算法的好处

  • 可以进入大公司。越是厉害的公司,就越会考察数据结构和算法这类基础知识。相比短期知识,他们更看重长期知识。
  • 掌握数据结构和算法,对阅读框架源码,和理解背后设计思想,都有很大帮助。
  • 掌握数据结构和算法,看待问题的深度,解决问题的角度就会完全不一样
  • 如果你不去学,可能这一辈子都用不到,也感受不到他的好,但是一旦掌握,你就会被它强大的为例折服。之前可能需要很大劲才能优化的代码,需要花费很多东西设计的架构,用了数据结构和算法,就能轻易的解决了

高手之间的竞争就是细节,这些细节包括:算法是否够优化,数据存取效率是否够高,内存是否够节省等 编程能力强,标准应该有代码可读性是否好,是否健壮性,扩展性,已经性能是否优化, 我们天天提交代码的时候说什么优化性能,其实很大程度上就是优化我们之前写的算法和数据结构

写代码考虑非功能性需求,不要只想着完成功能,够用就好, 做事情得有长远计划。不能只想着把眼前的事情做好就满足

学习数据结构和算法的目的:

建立时间复杂度,空间复杂度意识,写出高质量的代码,能够设计基础架构,提高编程能力,训练逻辑思维,积攒人生经验,依次获得工作回报,实现你的价值,完善你的人生。

什么是数据结构算法

  • 广义定义: 数据结构: 一组数据的存储结构 算法: 操作数据的一种方法
  • 狭义定义: 就是一些著名的数据结构和算法,比如栈,堆,队列,二分查找,动态规划等,这些都是从前人从很多实际操作中抽象出来的,经过非常多的求证和检验。可以高效的帮助我们解决很多实际工作中的开发问题。

数据结构和算法的关系

数据结构是为算法服务的,算法要作用在特定的数据结构之上。 比如想要从 A 地到 B 地修一条路,你可以修建公路,这样就可以行驶汽车,也可以修建铁路,这样就可以行驶火车, 公路,铁路,就可以理解为数据结构,汽车,火车就可以理解为是算法,只有在特定的路面上面,才能行驶特定的车辆。

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

任何一个知识点,都要做到 “是什么,为什么,怎么做”

复杂度分析

占据数据结构和算法的半壁江山,是数据结构和算法学习的精髓。 数据结构和算法解决的是如何更快更省的存储和处理数据的问题。因此我们就要有一个考量效率和资源消耗的标准。这个就是复杂度分析方法

最基础,最常用的数据结构和算法

  • 10个数据结构 :数组,链表,栈,堆,队列,二叉树,散列表,跳表,图, Trie 数
  • 算法 : 递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,回溯算法,动态规划,字符串匹配算法,

了解这些数据结构和算法的来历,自身特点,适合解决的问题以及实际应用场景。

学习方法

  1. 边学边练,适度刷题
  2. 多问,多思考,多互动
  3. 打怪升级学习法
  4. 知识需要沉淀,不要试图一下子掌握所有 学习知识是一个反复迭代,不断沉淀的过程。刚开始可能不懂,可以先放一放,沉淀一下,过几天再回头理解,没准就忽然开朗了,

Flag

春节前学习完所有课程,所有代码 java 实现一遍。