蚂蚁花呗里面欠下的债都是要还的,在大学里面逃过的课都是要再补的。既然选择了吃计算机这碗饭,就要做出点样子来,才无愧于自己的内心。
我曾一直用 “能干的人解决问题,智慧的人绕过问题” 这句话激励我做事情要懂得变通,要思考成本更低、效果更好的解决方案,最好是资源互换,不费一点成本的解决。但是,有些事情注定是无法通过一些小聪明来解决的,比如健身,比如学习。
来北京之后,看到了自己的很多不足,离想要的自己还有很大差距,更需要踏实下来努力奔跑。这段时间逐渐把状态调整过来了,赤子之心,再次启程。
在通往优秀软件工程师的路上,数据结构与算法这门课相当基础,属于入门必备,但是学习的过程却是相当枯燥。
就像西游记中的两界山,翻山的过程是痛苦的,停留在山下是快乐的,但是只有翻过去才有机会拿到通往极乐世界的门票。
什么是数据结构与算法
广义上讲,数据结构指的是一组数据的存储结构;算法指的是操作数据的一组方法。
狭义上讲,就是我们常提到的数组、链表、排序、堆、栈这些前人从实践中抽象出来的应用结晶。
数据结构和算法其实是两个概念,但是一般我们很少见把他们拆开来讲,那是因为数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。
怎么学数据结构与算法
时间复杂度
参加过任何一场竞赛类活动的朋友都应该知道,参加比赛的第一件事就是了解清除比赛规则,了解比赛的评判方式。了解清楚规则,才好放手去做,不然自己瞎搞一通,最后不符合规则,产出为零。在数据结构与算法的领域里,充当度量工具的就是“时间复杂度”这个概念。
在今后很长一段时间的学习、工作中,“时间复杂度”就像一把剑始终悬浮在我们的头顶上,评价代码算法优劣的标准就是时间复杂度的高低。
常见数据结构与算法
因为我是跟随着极客时间王争先生的《数据结构与算法之美》这门课程来进行学习的,所以整体思考内容也和他讲的范围大致相同,主要包含
- 十种常见的数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
- 十种常见的算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
学习技巧
王争先生分享了他的几种学习技巧,基于他的分享,结合我的实际情况,我思考了一下如何落实这几种学习方法。
- 边学边练、适度刷题
学习数据结构与算法这类理论枯燥的东西,光靠看理论是作用不大的,一是不能真正理解,再就是一会就忘了。所以,做题和敲代码写Demo是很重要的。利用搜索引擎,我们可以得到很多的资料,给自己定个目标,每个知识点,至少做练习5道相关的题,完成两个代码Demo。 - 多问、多思考、多互动
离开学校之后,想找到共同学习的人确实挺难的,想找到一个共同学习还能讨论起来的人更是难上加难。所以我找了几个论坛,数据结构与算法论坛-CSDN论坛 、数据结构与算法 - 编程论坛 多去上面解决一些问题吧,多看、多思考别的想法,然后提出自己的想法。 - 打怪升级学习方法
我的方法:多做题,多发博客!至少每个专题发一篇思考博文吧,然后针对这个专题所做的练习题和在论坛解决的问题再发一到两篇专项练习博客。 - 知识需要沉淀
这一点我是深有体会的,学习知识是一个反复迭代、不断沉淀的过程,以月为单位回头复习吧,多看、多解决问题,只有真正的理解了,才能真正转化为自己的东西。