程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

数据结构和算法 | 为什么学?是什么?怎么学?【1】

发表于 2020-03-27 | 分类于 数据结构和算法 | 0 | 阅读次数 2532

以下内容主要是来自于极客时间王争老师的《数据结构与算法之美》,这篇主要是笔记内容!

1. 重要性 --- 为什么?

  • 基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。

    一位腾讯T4的大牛曾经说过像区块链、人工智能这些看似很新的技术,其实一点儿都不“新“。最初学编程的时候,他就把那些基础的知识都学透了。当面临行业变动、新技术更迭的时候,他不断发现,那些所谓的新技术,核心和本质的东西其实就是当初学的那些知识。掌握了这个“规律”之后,他学任何东西都很快,任何新技术都能快速迎头赶上。这就是他快速学习并且获得成功的秘诀。那么作为技术人都需要修炼哪些”内功“呢?无外乎是大学里的那些基础课程,操作系统,计算机网络、编译原理,当然还有数据结构和算法。

  • 想通过大厂面试,数据结构和算法一定要好。因为校招的时候,参加面试的学生通常没有实际项目经验。公司只能考察他们的基础知识是否牢固。相比短期能力,更看重你的长期潜力。

  • 在一些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。掌握数据结构和算法,不管对于阅读框架源码,还是理解背后的设计思想,都是非常有用的。

  • 虽然对于大部分业务开发来说,平时可能更多的是利用已经封装好的现成的接口、类库,很少需要自己实现数据结构和算法。但是,不需要自己实现,并不代表什么都不需要了解。了解类库背后的原理,懂得时间、空间复杂度分析可以更好用好、用对它们。比如在选择ArrayList、Linked List的时候。

  • 对于编程有追求的人来说。要想自己编程能力强,性能好坏是其中一个非常重要的评判标准,这一点就需要扎实的数据结构与算法知识。

  • 掌握数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样了。而且学会了数据结构与算法的思想,甚至可以应用在生活中。

2. 概念 --- 是什么

2.1. 广义层面

**数据结构就是指一组数据的存储结构,算法就是操作数据的一组方法。**拿图书馆做例子,假如把图书馆中的书籍当成数据,那么书籍按照类别、按照规律编号,那么这个就是“数据”的存储结构。如何找到一本书呢?你可以一本一本地找,也可以先根据书籍类别的编号,先定位图书的大体位置,然后再依次查找。笼统地说,这些查找方法都是算法。

2.2. 狭义层面

某些著名的数据结构和算法,比如队列、堆、栈、二分查找、动态规划等。并且这些数据结构和算法是相辅相成的。**数据结构是为算法服务的,算法是要作用在特定的数据结构之上。**所以无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。比如数组这种数据结构具有随机访问的特点,常用的二分查找算法需要用数组来存储数据,但如果我们选择链表这种数据结构,二分查找算法就无法工作了,因为链表不支持随机访问。数据结构是静态的,它只是组织数据的一种方式,如何不在它的基础上操作、构建算法、孤立存在的数据结构就是没用的。

3. 学习重点

3.1. 复杂度分析

一定要掌握复杂度分析,这个是数据结构与算法学习的精髓。它是考量效率和资源消耗的方法,从某段代码的复杂度分析出发可以对代码进行优化。所以说如果只掌握数据结构和算法的特点、用法,而不会复杂度分析,就相当于只掌握了口诀而不知道心法。(这个可以通过一段算法的优化出发来更好的讲解,比如通过对一段代码进行复杂度分析,发现这段代码的复杂度可以通过某些方式降下来,比如换个数据结构,那么这样这段代码就得到了优化,就好比你以前掌握了算法优化的本质)

3.2. 20 个最常用的、最基础的数据结构和算法

数据结构与算法的知识点比较多,这是一张几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。

但是这 20 个是最常用的、最基础的数据结构和算法:

  • 数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
  • 递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

集中精力攻克这些基础的数据结构和算法后,应付面试还是工作需要都足够了。假如再学更加复杂的数据结构和算法,也会非常容易、非常快。

3.3. 附:常见数据结构与算法集合

4. 学习方法

  • 学习数据结构和算法的过程中,不要死记硬背,不要为了学习和学习,对于个人来说,不要为了要把这个学完而学完,而是要学习它的“来历”“自身的特点”“适合解决的问题”以及“实际的应用场景”。学习数据结构和算法的过程,是非常好的思维训练的过程,不要被动地记忆,要多辩证地思考,多问为什么。如果一直这么坚持做,你会发现,学完之后,写代码的时候不由自主地考虑到很多性能方面的事件,时间复杂度、空间复杂度非常高的垃圾代码出现的次数会越来越少。编程内容就得到真正的修炼了。

  • 边学边练习,适度刷题

    将讲的过程中涉及到数据结构和算法全都自己写出来,用代码实现一遍,别只停留在看的程度。**适度刷题,但是一定不要浪费太多时间在刷题上。**作为个人还是多刷题吧,但是前提是掌握了,然后再去应用。

  • 多问、多思考、多互动

    就是找几个人一起学习,一块儿讨论切磋。

  • 打怪升级学习法 --- 学习完之后,可以写一篇学习笔记或者学习心得

    学习过程中,遇到的最大问题是坚持不下来(PS:起码对于个人学算法来说,好像确实这样)。那么在枯燥的学习过程中,可以给自己设立一个切实可行的目标,比如每节课后都认真总结和思考,写一篇学习笔记或者学习心得发布到某平台等(这个感觉是适合自己的打怪升级方式)。

  • 知识需要沉淀,不要试图一下子掌握所有

    想听一遍,看一遍就把所有知识点掌握是不可能的。**学习知识的过程是反复迭代、不断沉淀的过程。**遇到没有学懂的,可以先沉淀一下,过几天再重新学一遍。

5. 学习路线

极客时间-《数据结构与算法》-王争老师,针对专栏而制定的学习路线,可参考。

巨人的肩膀

  1. 极客时间-《数据结构与算法》-王争老师
卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/180
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 数据结构和算法
Git | Git 操作整理-进阶篇
Git | Git 操作汇总-cheat sheet
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%