# ds_algo_learning **Repository Path**: shawn_fighter/ds_algo_learning ## Basic Information - **Project Name**: ds_algo_learning - **Description**: 学习数据结构与算法,主要是python和java - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-09-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ds_algo_learning ## 什么是数据结构?什么是算法? 我们经常听说程序=数据结构+算法,虽说平常的工作中很少用到什么算法去解决什么问题,所以会有童鞋觉得算法和数据结构跟我们这些CRUD Boy距离有点远,实际上,我们日常的编程都是与数据结构和算法息息相关的。比如,执行下面的代码: ```java int i = 1; i ++; System.out.print(i); ``` 这就是一个很简单的代码,从小的方面来看待,我们可以把`i`看成是一个数据结构,用这样一个数据结构来存储数据`1`,`i++`就是一个算法,用这个算法来操作数据。实际上,这样也就解释了数据结构,算法的作用是啥。 * 数据结构就是指一组数据的存储结构,而算法,就是用来操作数据的方法。 * 数据结构是为了算法服务的,算法要作用在特定的数据结构之上。举几个栗子,如 (1). 二分查找算法,需要的数据结构是有序的数据,如果是链表,二分查找就不work了。 (2). 广度优先搜素算法,需要的数据结构是队列 (3). 深度优先搜索算法,需要的数据结构是栈 * 数据结构和算法解决的是如何更省、更快地存储和处理数据的问题。 ## 为什么要学习数据结构与算法? 1. 面试 国内外的大厂,比如BAT,几乎都会面试数据结构与算法。 校招的时候,参加面试的都是刚毕业的学生,没啥实际的项目经验,基本也都是学校的课程设计,毕业设计,所以就只能考察他们基础知识,科班出身的,数据结构与算法一定是必修课。 社招的时候,这些国内外大厂还是会注重考察数据结构与算法这类的基本知识。 如果面试的是算法工程师,那工资是真的高,不是一般的高!!! 2. 可以更好的理解一些中间件,框架的底层原理 比如,redis的五种数据类型,里面有个有序集合为什么要用跳表来实现,而不用链表,二叉树来实现呢? 比如,Mysql中的B+ tree索引,为什么能提高查询效率。 3. 可以提升自己的逻辑思维能力,写出性能更优的代码 数据结构与算法这玩意儿,确实有点绕,你把这么难的玩意儿弄懂了,就证明你的逻辑思维能力没问题,这也是为啥大厂喜欢问数据结构与算法的其中一个原因,考察逻辑思维。 比如实现一个功能:任务调度,对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前置任务已经执行成功(或者没有前置任务),它才可以执行。这个时候可以使用DAG(有向无环图)去实现,这样就不用了另起一个定时任务,不断的去轮询前置任务的执行状态了。 比如实现一个功能:寻找topk。我们可以使用大顶堆或者快速排序去实现。 ## 如何学习数据结构与算法 ### 学哪些内容 [参考脑图](https://naotu.baidu.com/file/8207e7c6bfea37829dc781e638fed7df) ### 编程语言 我主要是以`python`为主,`java`为辅,因为最近刚自学了`python`,正好趁此机会练习一下`python` ### 相关参考书籍,视频,网站 1. 推荐的教程 [王争老师的数据结构与算法之美](https://time.geekbang.org/column/126?utm_term=nyre2019_app_zhuanlanxiangqingye) [覃超老师的算法40讲](https://time.geekbang.org/course/intro/130?utm_term=nyre2019_app_zhuanlanxiangqingye) 2. 推荐的书籍 `算法第四版,剑指offer,编程珠玑` 3. 推荐的网站 [算法第四版对应的代码](https://algs4.cs.princeton.edu/code/) [查看各类算法的时间复杂度](http://www.bigocheatsheet.com/) ## 数据结构与算法 ### [时间复杂度和空间复杂度](./note/时间复杂度&空间复杂度.md) ### 数据结构 #### [理解数据结构的基本概念](./note/datastructure/深入浅出数据结构.md) #### [array](./note/datastructure/数组.md) #### [linked list](./note/datastructure/链表.md) #### [stack](./note/datastructure/栈.md) #### [queue](./node/datastructure/queue.md) ### 算法