01.和王有志一起学习数据结构和算法

发布于:2023-01-18 ⋅ 阅读:(459) ⋅ 点赞:(0)

大家好,我是王有志。关注王有志,回复DSA获取数据结构和算法学习资源。

从今天开始,我将和大家一起从零开始学习数据结构与算法。作为开篇词我们不聊技术,聊一聊为什么要学习以及要如何学习:

  • 为什么要“从零开始”
  • 一些学习建议和方法
  • 整个系列规划和说明

“从零开始”

记的2016年夏天,我刚踏出校门便在朋友圈立下了“豪言壮志”:
请添加图片描述
那时候的我,是真的相信自己可以写出“改变世界”的程序。可是,当我回过头来看这些年的经历时,发现自己慢慢变成了“CRUD BOY”,于是我不断寻找改变的机会。

直到2021年底,我得到了一次转岗基础架构部的机会,我花了很长时间去研究项目和架构,可最后还是倒在了算法面试前。于是,我不得不开始“修补地基”。这就是我最初的目的,解决当前的问题,改变当下的困境

或许很多小伙伴像我一样,为了通过面试不得不学习数据结构和算法,其实这无可厚非,毕竟学习的本质是解决问题,而无法通过面试也是我们遇到的问题之一。当然,如果能从解决面试中的问题,再到解决工作中的问题,这多是一件美事啊。

建议和方法

很多小伙伴在听到数据结构和算法时,就开始慌了,很难学吗?是不是有大量的数学计算?

实际上并不是这样的,基础的数据结构和算法是一门很成熟的学科。成熟就意味着,无论是图书馆还是互联网,都有大量权威性的书籍和资料,为我们的学习提供了极大的便利性。

其次,我们学习是为了将成熟的数据结构和算法应用到工作中,而不是创造新的数据结构和算法,应用相比创造总是容易的。

最后,只有在算法分析时才会涉及到数学计算,而且大部分计算只要一丢丢高中的数学知识就足够了。

说完了对学习难度的看法,在这里也给出我自己行之有效的3个学习方法:

不去纠结概念和定义

我们的学习目的是应用而不是应试。因此,能够准确的理解概念和定义,并通俗的解释出来就足够了,而不需要死记硬背晦涩难懂的概念和定义

如果是为了通过专业/升学考试,那么你需要使用专业的教材,学习专业的课程,比如:清华大学邓俊峰老师的公开课《数据结构》

不要从“两数之和”开始

很多小伙伴的数据结构和算法之旅是从“两数之和”开始的。虽然难度只是简单级别的,但是也很容易让人陷入“abandon困境”(想想你的考研单词)。

刚入门时,没有足够的知识储备,只能通过“暴力”方法解决问题,甚至根本无法解决问题,从而遭受打击灰心丧气,导致“abandon”。个人认为一个比较合理的顺序是:学习,思考,然后才是练习

具象化数据结构

还记得学习立体几何的场景吗?最开始在脑袋中构建几何图形是很困难的,但是在纸上画出来后,很多问题就会迎刃而解。

学习数据结构也是这样,我们很难通过想象构建数据的逻辑组织形式,借助工具将抽象具象化,会帮助我们更好的理解数据结构的特点。

在这里也推荐通过开源绘图软件draw.io构建你的数据结构。

规划和说明

接下来我会简单的介绍下整个系列的规划,文章结构和使用到的参考资料。

整体规划

整体分为3个专题:

  • 预备知识,涉及到基本概念,以及递归,迭代等编程技巧;
  • 数据结构,从线性表,散列表,树到图,会涵盖到常用的数据结构;
  • 算法,常用的算法和算法思想,如:排序,搜索,回溯,贪心,动态规划等。

最后我会补充一点机器学习的内容,监督学习,无监督学习的概念,一些入门的算法,如:KNN,朴素贝叶斯等。毕竟我们不仅仅要“脚踏实地”,也要“仰望星空”。

文章结构

文章也分为3个部分:

  • 导语,简介文章的主要内容,方便选择是否继续阅读;
  • 正文,这里就是今天的主要内容了;
  • 结语,会有简单的总结和一些练习。

参考资料

  • 《数据结构(C++语言版)》第三版 邓俊峰著,2020年秋季学期
  • 《算法精解:C语言描述》 Kyle Loudon著,肖翔 / 陈舸译
  • 《剑指offer:名企面试官精讲典型编程题》何海涛著
  • 《算法导论》科曼著,殷建平译
  • 百度百科(首选)
  • 维基百科(次选,需要科学上网)
  • 力扣

好了,今天就到这里了,Bye~~

本文含有隐藏内容,请 开通VIP 后查看