数据结构与算法-学习之路-开篇

244 阅读3分钟

什么是数据结构?什么是算法?

我们经常听说程序=数据结构+算法,虽说平常的工作中很少用到什么算法去解决什么问题,所以会有童鞋觉得算法和数据结构跟我们这些CRUD Boy距离有点远,实际上,我们日常的编程都是与数据结构和算法息息相关的。比如,执行下面的代码:

int i = 1;
i ++;
System.out.print(i);

这就是一个很简单的代码,从小的方面来看待,我们可以把i看成是一个数据结构,用这样一个数据结构来存储数据1i++就是一个算法,用这个算法来操作数据。实际上,这样也就解释了数据结构,算法的作用是啥。

  • 数据结构就是指一组数据的存储结构,而算法,就是用来操作数据的方法。

  • 数据结构是为了算法服务的,算法要作用在特定的数据结构之上。举几个栗子,如

    (1). 二分查找算法,需要的数据结构是有序的数据,如果是链表,二分查找就不work了。

    (2). 广度优先搜素算法,需要的数据结构是队列

    (3). 深度优先搜索算法,需要的数据结构是栈

  • 数据结构和算法解决的是如何更省、更快地存储和处理数据的问题。

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

  1. 面试

    国内外的大厂,比如BAT,几乎都会面试数据结构与算法。

    校招的时候,参加面试的都是刚毕业的学生,没啥实际的项目经验,基本也都是学校的课程设计,毕业设计,所以就只能考察他们基础知识,科班出身的,数据结构与算法一定是必修课。

    社招的时候,这些国内外大厂还是会注重考察数据结构与算法这类的基本知识。

    如果面试的是算法工程师,那工资是真的高,不是一般的高!!!

  2. 可以更好的理解一些中间件,框架的底层原理

    比如,redis的五种数据类型,里面有个有序集合为什么要用跳表来实现,而不用链表,二叉树来实现呢?

    比如,Mysql中的B+ tree索引,为什么能提高查询效率。

  3. 可以提升自己的逻辑思维能力,写出性能更优的代码

    数据结构与算法这玩意儿,确实有点绕,你把这么难的玩意儿弄懂了,就证明你的逻辑思维能力没问题,这也是为啥大厂喜欢问数据结构与算法的其中一个原因,考察逻辑思维。

    比如实现一个功能:任务调度,对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前置任务已经执行成功(或者没有前置任务),它才可以执行。这个时候可以使用DAG(有向无环图)去实现,这样就不用了另起一个定时任务,不断的去轮询前置任务的执行状态了。

    比如实现一个功能:寻找topk。我们可以使用大顶堆或者快速排序去实现。

如何学习数据结构与算法

学哪些内容

参考脑图

编程语言

我主要是以python为主,java为辅,因为最近刚自学了python,正好趁此机会练习一下python

相关参考书籍,视频,网站

  1. 推荐的教程

    王争老师的数据结构与算法之美

    覃超老师的算法40讲

  2. 推荐的书籍

    算法第四版,剑指offer,编程珠玑

  3. 推荐的网站

    算法第四版对应的代码

    查看各类算法的时间复杂度