数据结构与算法之美(零):学前准备

笔者作为一名非科班出身的程序员,想系统地补充“数据结构与算法”这一块知识,入了极客时间的专栏《数据结构与算法之美》,希望能以笔记的形式总结、分享所学,更以督促学习。

本章内容源于对专栏以下章节的学习笔记:

  • 从今天起,跨过“数据结构与算法”这道坎
  • 为什么要学习数据结构和算法?
  • 如何抓住重点,系统高效地学习数据结构与算法?

经验篇

作者开篇介绍了两个和数据结构与算法有关的例子:

  • 1.在作者的学生时代,为了帮他提高编程能力,师兄给了他一本《算法导论》,使他对算法开始着迷。通过对数据结构与算法的研究,编程能力有了质的飞跃。他认为那是他人生为数不多的转折点之一。
  • 2.一位在腾讯工作10年的T4大牛,跳槽去区块链领域,用了不到半年时间,就把区块链的整个技术脉络摸清楚了。他曾经说,像区块链、人工智能这些看似很新的技术,其实一点儿都不“新”。最初学编程的时候,他就把那些基础的知识都学透了。当面临行业变动、新技术更迭的时候,他不断发现,那些所谓的新技术,核心和本质的东西其实就是当初学的那些知识。

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

我们都知道基础无外乎就是操作系统、计算机网络、编译原理等,当然还有数据结构和算法。

人生路上,我们会遇到很多的坎。跨过去,你就可以成长,跨不过去就是困难和停滞。而在后面很长的一段时间里,你都需要为这个困难买单。对于我们技术人来说,更是这样。既然数据结构和算法这个坎,我们总归是要跨过去,为什么不是现在呢?

目的篇

我们为什么要学习数据结构和算法?

1.通关大厂面试

  • 就校招而言,没有实际项目经验,公司只能考察基础知识是否牢固。
  • 就社招而言,越是厉害的公司越重视考察数据结构与算法等基础知识,相对短期能力,公司更看中你的长期潜力。

摆正心态:我们学任何知识都是为了“用”的,是为了解决实际工作问题。

2.避免只会业务操作

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

3.开源框架的目标

相同原理的框架,为什么有的人写的就可以在GitHub上被很多人使用,甚至被官方收录?归根结底在于细节,比如算法的优化、数据存储效率、内存的优化等等。

4.对编程的追求

不想只会写凑合的代码,对编程有所追求。性能好坏起码是评判代码非常重要的一个标准。

小结:学习数据结构和算法,并不是为了死记硬背几个知识点。目的是建立时间复杂度、空间复杂度意识,写出高质量的代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。

方法篇

如何系统高效地学习数据结构与算法?

1.数据结构与算法的定义

从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。

2.数据结构与算法的关系

数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。

3.学习认知要求

搞清楚:是什么、为什么、怎么做?

4.学习重点

  • 首先要掌握一个数据结构与算法中最重要的概念——复杂度分析;
  • 10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
  • 10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法;
  • 学习它们的来历自身的特点适合解决的问题以及实际的应用场景

5.学习技巧

  • 边学边练,适度刷题
  • 多问、多思考、多互动
  • 打怪升级学习法:留言、笔记、心得、找错
  • 知识需要沉淀,不要想试图一下子掌握所有:学习知识的过程是反复迭代、不断沉淀的过程,书读百遍其义自见

你可能感兴趣的:(数据结构与算法之美(零):学前准备)