大学算法竞赛的学习心得:
打了这些年竞赛,由于是弱校走了太多弯路,也是自己摸索出了方法,希望以后的童鞋能以史为鉴。
算法竞赛最难的,就非ACM-icpc莫属了,下面以它为例说明。
算法比赛还是小圈子,不像考研那样盗版视频满天飞,有各大从事多年考研辅导的老师教(我想算法竞赛要是有讲的深入仔细的老师,如高数老师张宇汤家凤李永乐等,对弱校的一定有质的提高),所以算法竞赛提高的方法只有自己刷题+网上找博客。但算法竞赛还不能和考研数学类比,它的灵活性远大于考研数学,考点又涉及了方方面面,所以它是很难短时间提高一个档次的,即使是考研数学,提前1年复习的130以上的也不多。算法竞赛肯定又要靠思维,又要考长期积累。而所谓积累,就是刷题堆题型量,这就需要一个好的方法。
总结算法模板,写算法说明文档,是我发现一个储存自己学过算法的很好方法。这对短期提高不大,但对要把算法竞赛当中长期爱好来学的人,还是值得做的(比如把打各大oj的网络比赛当中业余爱好)
储存地点采用github或者网盘都可以。要先把算法分一级类,比如我的分类(动态规划,搜索,图论,数论,数据结构,计算几何)。之后有必要再分二级类(如数据结构里面各大平衡树分一起,各大持久化数据结构分一起),我是在一级类里直接开文件夹写具体算法。对于每个算法,要有:一个模板题代码+若干个经典变形题代码 + 一个说明文档(包括:思路,过程,应用情景,以及该算法经典变形套路)。比如线段树的应用:区间和,区间最值,区间染色,连续段长,权值线段树代替平衡树功能,多值维护,惰性更新,低频暴力更新….
大致就是这样,不要小看这些,以为呢,很快就可以完成,我从大三开始这么干,一直到现在,仅仅是完成了一部分,还差很多,因为可能考的算法实在太多了,更何况有些算法实在不好理解。
所以在总结算法时,总结那些冷门算法或者ICPC不常考到的算法,是性价比极其低的,比如我曾花时间死磕牛顿迭代+FFT的高精度除法(复杂度n*logn),目前为止除了做51nod模板,一次都没用到,或许以面试能装装逼。这是我走的弯路,总结模板的顺序,应该是按照算法考点的出现频率来,这类比英语单词的频率划分,算法应该自己相对于icpc来看,分一下频率级别 (高频,中频,低频)。
我目前的模板残缺很多,而且对于高频算法是肯定需要多纪录题型的,我没有做。所以我也很希望算法爱好者们,能一起补全算法模板。
https://github.com/meiyoumingzile/ICPC_AlgorithmTemplete
定义:本科之前没学习任何编程以及算法的人,叫做0基础者,这占了人群的绝大多数
ACM-ICPC的坑太深,以至于0基础者用本科3年不可能达不到进wordfinal水平,努力+方法得当区域赛金牌还是大有人在的。那些进wordfinal的几乎都有 高中甚至初中和小学的竞赛基础,现在我也真正意识到应在起跑线的作用,某种程度也理解家长带孩子上兴趣班了。以上说法,不包括邝斌神仙~~。