前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于如何培养算法思维的一点思考

关于如何培养算法思维的一点思考

作者头像
ACM算法日常
发布2018-08-23 14:45:22
1.7K0
发布2018-08-23 14:45:22
举报
文章被收录于专栏:ACM算法日常

最近收到公众号里一个同学的消息,大概意思是觉得自己做了很多题(可能是参考别人的题解),但是碰到问题还是经常没有思路,想问下如何才能正确的做题,以及如何培养正确的算法思维。

除了不看书的学渣和很厉害的学霸, 这个问题对于大部分人来说都会遇到,因为这是一种很正常的现象,只是这位同学可能对此感到有些焦虑,才会很诚恳的在后台留言。

对于大部分题目来说,如果你没有事先练习过相关题目,其实是比较难通过自己的思考去解题的。我们一直以来的教育就是这样的,初中高中的数学题,即使你能想出好几种解法,大部分时候都是练习了很多遍才可能做到。每学习一个新的章节,你可能会先预习熟悉一下这节课要学习什么,然后听老师讲一下,接着老师会讲一些例题和重难点的题目,然后才是自己去做题。

做题的过程其实是对已学知识的巩固,在我看来,学习算法思维,完全可以以类似的方式完成。

首先OJ算法题有很多类型,你可以一个专题一个专题的学习,这样在做的时候知道这个题型是什么类型的,每做一道题就多思考为什么会这样,不断地去归纳总结。然而很多题目其实有着常人根本就想不到的思路,这个时候并不用纠结这种题型,一部分原因可能是自己做的题还不够多,思考的还不够,另外一部分确实是存在一些创造性的解法。

我就以我自己举一个简单的例子,以前我第一次看到交换a和b的值用位运算做的时候,我很难想到这种解法:

代码语言:javascript
复制
    a = a^b;
    b = a^b;
    a = a^b;

而当我看到这种解法,也比较疑惑和难以理解,但是这种疑惑是因为我对于异或运算不了解造成的,后来多做了几道异或位运算方面的题目,这道题算是异或里面最简单的题目了,而且你根本不用去背这个解法,因为熟悉异或的特性之后你能很快的推理出这个解法。

再比如用的最多的动态规划算法,很多人觉得难,是因为一开始做的并不多,而且思考的也不够,动态规划在实际应用中有很多变化形态,比如一维二维多维等。然而即使形态很多也是能够数的清的,对于那些能熟练处理这种题的人来说,并不是他能创造性的去解题,而是他们能够通过已有经验和已经在心中归纳好的各种形态进行探索,这种经验越多,做题的速度也会更快。

现在回到你问的问题上,参考别人的题解其实很正常,特别是自己思考许久也没有思路的题目。问题在于,你可能没有系统的针对性的去练习,我觉得你可以调整一下顺序。如果你想重新开始,那么你可以先定一个计划,就比如我们公众号的学习路线,然后针对路线上的每一个算法类型,都一点点的从简单题开始做,做题不是重点,重点是能够把每个题型融会贯通,这样遇到类似题目时候心里有数,也就是古语所说的胸中有丘壑。另外我觉得不管能不能做出题目,都应该去参考那些最优的算法,多分析性能的关键点。

而且我也相信你已经做得非常不错了,迷惑的人并不是糊涂,只是遇到了一个坎,相信你很快就能走过去。

这里说的只是我个人的一点看法,说了这么多,恐怕是班门弄斧了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ACM算法日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档