在我的算法课程中,很多同学对递归想不明白,我的建议都是:用一个小数据量,一步步跟踪程序,看看程序到底是怎么运行的。通常这么做,1 个小时的时间,就足以让你深刻理解递归程序的运转逻辑。可是,很多同学懒得花这1个小时的时间,最终的结果是,花了一个下午,对着代码生看,硬想,最终还是没有理解程序的运转逻辑。
8)量变到质变。还有很多同学,对于算法的一些问题,会问:老师,你是怎么想到用这样的方法的?对于这类问题,我的回答一般都是:你见的还不够多。
不知道是不是受高中阶段学习的影响,有一些同学特别执着于就着一个单一的问题,寻找其中的“解题路径”。当然,我不是说这是完全错误的,但也有一个“度”。
我的经验是:与其把时间花在这里,不如去见更多问题。
比如动态规划,是算法学习的一个难点,很多同学在学会了背包问题的解法之后,总是执着于去追寻:是怎么想到这种状态定义的方法的。可能是我个人水平有限,我无法清楚地解释是如何想到这种状态定义的方法的。但是我的经验告诉我:再去看,去实践 100 个动态规划相关的问题,然后回头看背包问题,你会发现这种状态定义的方式非常自然。
仅仅对着一个问题思考,很多时候都是死胡同。你见识的还不够多,就不足以帮助你总结出更加“普遍”的问题解决的规律。当你见得足够多的时候,一切就都变得很自然,所谓的“量变到质变”。
不过,大多数同学在这个环节都会“犯懒”,企图通过一个问题就理解问题的本质,这其实和企图通过一本教材就精通一个领域的想法是一样的,是不现实的,不可能的。同时,这里又包含着学习过程中的“完美主义”的思想,遇到一个问题一定要把它想的无比透彻。但是我的经验告诉我:大多数问题,其实都是需要“回头看”的。随着你对一个领域理解的越深入,回头再去看那些曾经的问题,都会产生新的视角,对于很多曾经想不明白的问题也豁然开朗。这也是“进步”的根源。如果卡在一个问题上不前进,不给自己“回头看”的机会,甚至最后是放弃了,就什么也没有学会了。
所以,很多时候,你发现对一些问题“百思不得其解”,或许不是因为自己“笨”,而是因为“还不够努力”:)
9)最后,一定要相信时间的力量。有一天,在我的一个算法课程群里,有个滴滴的后端大神发招聘,结果大家七嘴八舌的就议论开了,大致主题思想就是:自己什么时候能够成为滴滴的后端大神。这位滴滴的后端大神今年 32 岁;大多数议论的同学,其实连 22 岁都不到。我告诉他们,其实 10 年后,你们就是大神。
这其实很好理解,回想十年前,也就是 12 岁的你,和现在的你比较,是不是天壤之别?如果把你扔到一堆 12 岁的小朋友中间,22 岁的你是不是就是个大神?同理,32 岁的人,已经在业界摸爬滚打了那么多年,扔回到22岁的大学生中间,当然是大神:)
很多时候,所谓的“大神”并不神秘,很多时候,仔细观察,会发现时间有着不可磨灭的作用。只要你没有虚度时间,每天都在进步,通常结果都不会太差的。如果再加上一点点机遇,可能就不仅仅是大神。
愿大家也早日成为大神。
End本文作者为 liuyubobobo,算法大牛,ACM亚洲区奖牌获得者,现居美国,创业者。bobo老师对我影响极大,我的算法入门和进阶都是靠他的指导,希望此篇文章对大家有帮助~
愿大家也早日成为大神。
乐于输出干货的算法技术公众号:「五分钟学算法」。公众号内有 100 多篇原创技术文章、精美动画配图,不妨来关注一下!