很多程序员对数据结构和算法并不熟悉,觉得在日常工作中用处并不大而且还比较难学,有时间学数据结构与算法,还不如对框架和Api熟练来的实在。确实,作为业务开发人员不懂算法仍然可以很快很好地完成开发任务,这是因为大部分开发语言底层都基于基本数据结构帮我们封装好了,我们拿来就可以用,而且性能也比较好。但是即便不需要自己去写底层框架,如果知道更多原理也能知道哪种数据结构是适合什么样的场景。随着近几年大数据、AI的兴起,特别是大公司越来越重视算法工程师和大数据处理技术的积累,没有扎实的数据结构和算法基础,程序员很容易遇到天花板。
1、什么是数据结构和算法
数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。(摘自百度百科)
比如:图书馆里书籍按照计算机、医学、经济学等不同学科分类,将不同分类分别放在不同的书架,然后计算机类书架里又有计算机网络、操作系统、编程语言……医学类里有临床医学、解剖等,这种按不同分类摆放的方式就是书籍这类数据存放的结构。
算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。(摘自百度百科)
比如:我要查找《Java从入门到放弃》这本书,有很多种方法:
- 一个个书架找过去,直到找到了为止;
- 先按计算机大类找,再从计算机下面的编程语言里去找
这两种方法就是两种不同的算法。
数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。脱离了数据结构只谈算法没有实际意义,这就是为什么谈算法的时候总得要有个具体的数据结构作为基础。
2、为什么要学数据结构和算法
- 算法解决的是少和快的问题,怎么样使用最少的空间和最快的速度来处理数据,特别是海量数据时代,如何高效快速地进行数据处理显得特别重要,这也是BAT大厂注重算法的原因;
- 很多框架使用了很多的数据结构和算法的设计思想,针对不同场景有不同的优化,如果不懂数据结构和算法就很难理解它的设计思想;
- 算法是很多大厂面试必备技能;
- 如果不懂数据结构和算法就没有时间复杂度和空间复杂度的概念,也就不知道怎么评估一段代码性能;
- 运用合适的数据结构和算法可以写出性能高的代码,并且可以预估代码的性能瓶颈;
- 学习算法可以锻炼和丰富逻辑思维,写出逼格更高的代码
- ……