一、前言
近期在准备面试,而数据结构与算法是面试不可回避的重中之重,可以说只有有笔试题,至少有一道算法题。而算法一直是自己软肋,这次不得不正视这个问题。过去对数据结构与算法一直不太重视,总觉得这些太基础,离实际编程太远,然而事实是,要写出高质量的代码,算法必不可少。最近在极客时间入手了《数据结构与算法之美》,希望能久旱逢甘霖~~~
二、为什么要学习数据结构与算法
1、想要通关大厂面试,千万别让数据结构和算法拖后腿
越是厉害的公司,越是注重考查数据结构与算法这类基础知识。我们学任何知识都是为了“用”的,是为了解决实际工作问题的。
2、业务开发工程师,你真的愿意做一辈子CRUD boy吗
Spring、RPC框架等基础框架中,一般都糅合了很多基础数据结构和算法的设计思想。比如Redis的sort set是用什么数据结构来实现的?为什么要用跳表来实现?为什么不用二叉树呢?
3、基础架构研发工程师,写出达到开源水平的框架才是你的目标!
4、对编程还有追求?不想被行业淘汰?那么久不要只会写凑合能用的代码!
何谓编程能力强?代码可读性号、健壮?还是可扩展性号?性能好快起码是其中一个非常重要的评判标准。
5、掌握了数据结构与算法,看待问题的深度,解决问题的角度就会完全不一样。
三、怎么学数据结构与算法
1、什么是数据结构?什么是算法?
数据结构就是指一组数据的存储结构。拿水来类别,水可以放在锅碗瓢盆,也可以放在大江大河中,那么锅碗瓢盆就是水的存储结构。算法就是操作数据的一组方法。
数据结构是指一组数据的存储结构,算法就是操作数据的一组方法。图书馆储藏书籍,为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。那我们如何来查找一本书呢?有很多办法,你当时可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。
数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
2、复杂度分析
想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念-----复杂度分析。这个概念究竟有多重要呢?可以这么说,它几乎占了半壁江山,是重中之重。
数据结构和算法解决的是如何更省、更快地存储和处理数据的问题。而复杂度分析是衡量效率和资源消耗的方法。
3、重点--20个知识点
作者总结了20个最常用的、最基础数据结构与算法,不管是应付面试还是工作需要,只需要集中精力逐一攻克这20个知识点就足够了。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;
10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
4、一些事半功倍的学习技巧
①边学边练,适度刷题
②多问、多思考、多互动
③打怪升级法
给自己制定一个切实可行的目标,就像打怪升级一样。
④知识需要沉淀,不要试图一下子掌握所有
学习知识的过程是反复迭代、不断沉淀的过程。