什么是数据结构?什么是算法?
我们经常听说程序=数据结构+算法,虽说平常的工作中很少用到什么算法去解决什么问题,所以会有童鞋觉得算法和数据结构跟我们这些CRUD Boy距离有点远,实际上,我们日常的编程都是与数据结构和算法息息相关的。比如,执行下面的代码:
int i = 1;
i ++;
System.out.print(i);
这就是一个很简单的代码,从小的方面来看待,我们可以把i
看成是一个数据结构,用这样一个数据结构来存储数据1
,i++
就是一个算法,用这个算法来操作数据。实际上,这样也就解释了数据结构,算法的作用是啥。
数据结构就是指一组数据的存储结构,而算法,就是用来操作数据的方法。
-
数据结构是为了算法服务的,算法要作用在特定的数据结构之上。举几个栗子,如
(1). 二分查找算法,需要的数据结构是有序的数据,如果是链表,二分查找就不work了。
(2). 广度优先搜素算法,需要的数据结构是队列
(3). 深度优先搜索算法,需要的数据结构是栈
数据结构和算法解决的是如何更省、更快地存储和处理数据的问题。
为什么要学习数据结构与算法?
-
面试
国内外的大厂,比如BAT,几乎都会面试数据结构与算法。
校招的时候,参加面试的都是刚毕业的学生,没啥实际的项目经验,基本也都是学校的课程设计,毕业设计,所以就只能考察他们基础知识,科班出身的,数据结构与算法一定是必修课。
社招的时候,这些国内外大厂还是会注重考察数据结构与算法这类的基本知识。
如果面试的是算法工程师,那工资是真的高,不是一般的高!!!
-
可以更好的理解一些中间件,框架的底层原理
比如,redis的五种数据类型,里面有个有序集合为什么要用跳表来实现,而不用链表,二叉树来实现呢?
比如,Mysql中的B+ tree索引,为什么能提高查询效率。
-
可以提升自己的逻辑思维能力,写出性能更优的代码
数据结构与算法这玩意儿,确实有点绕,你把这么难的玩意儿弄懂了,就证明你的逻辑思维能力没问题,这也是为啥大厂喜欢问数据结构与算法的其中一个原因,考察逻辑思维。
比如实现一个功能:任务调度,对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前置任务已经执行成功(或者没有前置任务),它才可以执行。这个时候可以使用DAG(有向无环图)去实现,这样就不用了另起一个定时任务,不断的去轮询前置任务的执行状态了。
比如实现一个功能:寻找topk。我们可以使用大顶堆或者快速排序去实现。
如何学习数据结构与算法
学哪些内容
编程语言
我主要是以python
为主,java
为辅,因为最近刚自学了python
,正好趁此机会练习一下python
相关参考书籍,视频,网站
-
推荐的教程
-
推荐的书籍
算法第四版,剑指offer,编程珠玑
-
推荐的网站