“感觉算法在实际工作中,绝大多数都根本用不到,且不说复杂的树图算法,哪怕是简单的搜索和排序算法也不需要开发者关注”
这也许是我们面对算法题听到最多的吐槽。
确实如此,数据结构与算法像是程序员的基础。不免像科举大关下的八股文一样让人头痛。
爱或不爱,它就在哪里,跨过算法这个坎,为什么不能现在就开始呢?
极客时间专栏《数据结构与算法之美》的作者王争给的几个建议是:
这也许是我们面对算法题听到最多的吐槽。
确实如此,数据结构与算法像是程序员的基础。不免像科举大关下的八股文一样让人头痛。
爱或不爱,它就在哪里,跨过算法这个坎,为什么不能现在就开始呢?
过去我们如何刷算法?
不少同学都提及自己过于断断续续的刷题经历,往往受时间因素,题目难度影响只能草草中断。另一方面,我们对数据结构和算法往往只有基本的理解,若是直接开始按照《算法导论》和《算法》学习开始刷题,冗长和严谨的证明只会让人产生从入门到放弃的念头因此刷算法题。没有了通过刷题形成的正反馈,刷题就成了一个“开头难,中间难,结尾难”的历程,时间一长,我们学习算法的兴趣自然就淡去了。
我们应当如何学习算法?
首先介绍波利亚的《怎样解题》提供的解题思路:
1. 熟悉题目并理解题目,尤其要抓住未知量。
2. 了解已知数据和未知量之间的关系
3. 验证得到的答案,验证答案是否正确
3. 主动回顾,把思考的创造归并成为结构化的知识
在 21 天算法挑战中,课程的首先都基于问题:“前缀和问题”、“差分数组问题”、“二分搜索问题”。
1. 把一类算法问题,归结出这类问题的特征
2. 把已有的问题关联到数据结构的基本性质上
3. 验证算法的可行性和边界用例
4. 把算法题的思考结果沉淀下来,体会数据结构与算法的深层原理。
举一反三才是刷算法题的最终目的
极客时间专栏《数据结构与算法之美》的作者王争给的几个建议是:
1. 边学边练:基本的数据结构和算法都应该自己实现,同时伴随着刷题才能深刻的形成对数据结构与算法知识结构的完善。
2. 多问、多思考、多互动:在群组里一起切磋,提出疑问、思考和总结,都能给自己提供更多的思考方式。
3. 打怪升级学习法:枯燥的学习过程中,给自己设立一个切实可行的目标,持续地形成学习的乐趣。
2. 多问、多思考、多互动:在群组里一起切磋,提出疑问、思考和总结,都能给自己提供更多的思考方式。
3. 打怪升级学习法:枯燥的学习过程中,给自己设立一个切实可行的目标,持续地形成学习的乐趣。
4. 不断沉淀,把算法的事件化具体为抽象:学习的过程也应该像产品一样反复迭代。纸上得来终觉,绝知此事要躬行。
在挑战营之外?
21 天算法挑战只是算法学习的起点,我们基本上已经掌握了一些常见问题的解题技巧。可惜的是再过不久,这些这是总免不了要遗忘。
因此真正的挑战才刚刚开始,无论是持续精进地写算法题,还是把数据结构奇技淫巧应用到我们日常开发的实践。真正要将算法掌握起来,把算法的经验变成我们解决问题的能力,我们才能在之后成为星球的技术大牛。
最后的收获:
1. 如何写出好的代码:自己写代码应当时刻对数据结构与算法能保持美的感触,时刻衡量代码的优劣、时间、空间的性能的优化。
2. 学习算法本身就是伴随着思考的痛苦的,思考永远都能在我们既有的认知外,创造更多的知识。
3. 坚持是所有算法学习最重要的基础,很庆幸大部分参加挑战营的球友都完成了挑战。
“行路难,行路难,多歧路,今安在?”
评论
发表评论