Go or Stay, 这是一个问题
又一年的CSP-J/S初赛落下帷幕,几家欢喜几家愁。有几个小朋友因为今年的奇葩政策(不以分数取优)没能挺过初赛,心中彷徨:自己坚持了两年的OI之路竟以提前退役告终?
Go or Stay, 这是一个问题!对于一个OIer来说,学习两年竟然倒在初赛上,这本身就是一个需要反思的问题。是自身能力不够,还是知识储备不足? 在我看来,全不尽然。
自身能力
我一直信奉天赋决定上限,努力决定下限。对于CSP来说,这是只要努力就能达到的高度,天赋可能只需要那么一丁点儿。当你走出考场骄傲地说这次的选择题太水了,请明白:那是你趁暑假别人出去嗨的时候把历年的初赛题刷了一遍的成果,是你刷完题还被教练逼着在博客整理错题的收获。这是你努力的结果,跟天赋关系不大。
知识储备
有句话叫书到用时方恨少。但对于CSP来说,就是基础算法、数据结构、搜索、贪心、动态规划、图论,再加上一些简单的数学知识。两年了,想必这些东西你已经了然于心,让你看几遍,就能过AcSaber,至少国庆这三天是这样过来的。也就是说,在知识储备上,你足以面对CSP。
那问题到底出在哪里?
论"浅层学习"的危害
我们刷过很多题,零零总总有300~400道了吧,按道理也算是一个初出茅庐的OIer。但就是这样,让你分析深度优先搜索,完善区间合并、冒泡排序,还是会出错。我们来分析分析这是为什么?
首先,在学习或者刷题的过程并没有“沉浸”其中,停留在“浅层”。只学会了怎么写代码,却忘了问为什么这么写,如果改变一下会怎么样,最好情况是什么、最坏情况是什么,输入数据对算法有无影响?这是算法学习纵向上的要求。
其次,一直停留在简单问题或是模板算法上,缺乏应对变化的能力。A+B问题我能5秒AC,然后呢,这有什么意义?如果一种算法的模板已经“吃透”,那么就应该在这个基础上做一些广度上的扩展。例如:学会了快速排序,就应该使用快速排序的思想解决一些实际问题,如查找第K大的数,而不是偷懒用一个sort水过。今天水过的问题,考试中可能就是噩梦。
最后,不注重思维上的训练。碰到难题不愿意动脑,不知道从哪里下手,过分地依赖外部力量。OIer都喜欢谦虚地自称蒟蒻,让大佬给思路、找问题。殊不知大佬也是从小白一点点成长起来的,正因为在成长过程中善于思考、认真总结,才能终成大神。所以,作为一个OIer最重要的就是要培养独立思考的能力。
深度学习
想要避免"浅层学习",可以从这几点下手:
- "吃透"基础算法。
- 不断去做那些自己踮起脚才能解决的问题。
- 注重思维能力的训练。
而这一切,都需要不断地反思和总结,所以,深度学习最好的手段就是写博客。
对于基础算法,写博客的目的是为了强化自己对基础知识的掌握、理解,尝试分析每种算法的优与劣,在不同情况下的时间复杂度、空间复杂度,真正"吃透"算法。
对于那些自己踮起脚才能解决的问题,写博客是整理自己思路的过程,总结出错的原因。真正让自己做一题会一题,而不是做完就忘。
思维能力的训练不仅要培养独立思考的能力,也要学会他山之石可以攻玉。看大佬题解不可耻,可耻的是看完就忘,没有变成自己的东西。对于题解要"看懂”,更要"写明白"。
路漫漫其修远兮
作为一个两年的OIer,你已出发很远,但却没有看到曙光,这是一段宝贵经验,希望对你的人生有所启发。
It’s up to you to decide whether to go or stay。