跳至主要内容

八股之变-持续的算法学习之路

“感觉算法在实际工作中,绝大多数都根本用不到,且不说复杂的树图算法,哪怕是简单的搜索和排序算法也不需要开发者关注”

这也许是我们面对算法题听到最多的吐槽。

确实如此,数据结构与算法像是程序员的基础。不免像科举大关下的八股文一样让人头痛。

爱或不爱,它就在哪里,跨过算法这个坎,为什么不能现在就开始呢?

过去我们如何刷算法?


不少同学都提及自己过于断断续续的刷题经历,往往受时间因素,题目难度影响只能草草中断。另一方面,我们对数据结构和算法往往只有基本的理解,若是直接开始按照《算法导论》和《算法》学习开始刷题,冗长和严谨的证明只会让人产生从入门到放弃的念头因此刷算法题。没有了通过刷题形成的正反馈,刷题就成了一个“开头难,中间难,结尾难”的历程,时间一长,我们学习算法的兴趣自然就淡去了。
 

我们应当如何学习算法?


首先介绍波利亚的《怎样解题》提供的解题思路:
1. 熟悉题目并理解题目,尤其要抓住未知量。
2. 了解已知数据和未知量之间的关系
3. 验证得到的答案,验证答案是否正确
3. 主动回顾,把思考的创造归并成为结构化的知识

在 21 天算法挑战中,课程的首先都基于问题:“前缀和问题”、“差分数组问题”、“二分搜索问题”。
1. 把一类算法问题,归结出这类问题的特征
2. 把已有的问题关联到数据结构的基本性质上
3. 验证算法的可行性和边界用例
4. 把算法题的思考结果沉淀下来,体会数据结构与算法的深层原理。

举一反三才是刷算法题的最终目的


极客时间专栏《数据结构与算法之美》的作者王争给的几个建议是:
1. 边学边练:基本的数据结构和算法都应该自己实现,同时伴随着刷题才能深刻的形成对数据结构与算法知识结构的完善。

2. 多问、多思考、多互动:在群组里一起切磋,提出疑问、思考和总结,都能给自己提供更多的思考方式。

3. 打怪升级学习法:枯燥的学习过程中,给自己设立一个切实可行的目标,持续地形成学习的乐趣。

4. 不断沉淀,把算法的事件化具体为抽象:学习的过程也应该像产品一样反复迭代。纸上得来终觉,绝知此事要躬行。

在挑战营之外?


21 天算法挑战只是算法学习的起点,我们基本上已经掌握了一些常见问题的解题技巧。可惜的是再过不久,这些这是总免不了要遗忘。
因此真正的挑战才刚刚开始,无论是持续精进地写算法题,还是把数据结构奇技淫巧应用到我们日常开发的实践。真正要将算法掌握起来,把算法的经验变成我们解决问题的能力,我们才能在之后成为星球的技术大牛。

最后的收获:


1. 如何写出好的代码:自己写代码应当时刻对数据结构与算法能保持美的感触,时刻衡量代码的优劣、时间、空间的性能的优化。

2. 学习算法本身就是伴随着思考的痛苦的,思考永远都能在我们既有的认知外,创造更多的知识。

3. 坚持是所有算法学习最重要的基础,很庆幸大部分参加挑战营的球友都完成了挑战。

“行路难,行路难,多歧路,今安在?”

评论

此博客中的热门博文

尝试解构一段幽默

  天龙八部里有这么一段情节: 乌老大脸上肌肉牵搐,又“啊啊”了几声,突然指着虚竹骂道:“臭贼秃,瘟和尚,你十八代祖宗男的都是乌龟,女的都是娼妓,你日后绝子绝孙,生下儿子没屁股,生下女儿来三条胳臂四条腿……”越骂越奇,口沫横飞,当真愤怒已极,骂到后来牵动伤口,太过疼痛,这才住口。 虚竹叹道:“我是和尚,自然绝子绝孙,既然绝子绝孙了,有什么没屁股没胳臂的?”

《微信公开课》上张小龙的公开演讲

 微信是一款现象级的互联网产品,至少以互联网产品普遍的生命周期看来,微信是一款跨越了生命周期的互联网产品。要想理解微信在产品实践的一些观念,最好的方法莫过于直接和他们对话,阅读他们的书就是一种最直接的精神交流。 前几年流传着一本奇书《微信背后的产品观》,互联网产品从业者都给出了极高的评价,书里的内容大致上来自于 2012 年微信团队内部的一次分享会。而在现在,微信依然是一个具有生命力和健康生态的互联网产品,我们又该用什么方式来继续更新对微信的认识呢? 我的方法是:从微信张小龙过去几年的公开课中学习微信的产品观

你日常爱用的词语,竟有这么多在压抑自我!为什么“夹带私货”是一种很愚蠢的说法?所谓“精致利己主义者”其实很粗糙|心理|哲学|历史|自我成长