一、什么是有效地训练?
  很多ACMer入门的时候,都被告知:要多做题,做500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。
 
  我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。
  其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,算是入门了吧,而且这500道题目中自己独立思考做出来的有多少,半小时内做出来的有多少,看别人的题解做出来的题目有多少,半年后仍然会做的题目有多少........
 
二、训练的目的是什么?
  1、提高编程能力
  2、学习算法,(读书,读论文,包括做一些题目验证)
  3、准备好面临将到来的挑战(熟悉题型,调整心态)
  4、启发思维。

三、关于算法学习的一些建议:
  <1>算法学习是ACM比赛所要推广或者要提倡的一个方面
  记得曾经路过某人的blog,上面说他作比赛的时候遇到了一个dijkstra,他没做出来,然后评论到(大意):我才不会花时间去搞明白“这种”算法。 “这种”也许有可能是指:没什么实用性,对吧,这样我就不想评论了(又是有关科学和工程的讨论)。但起码有一点需要明确的:ACM-ICPC比赛时关于计算机科学的比赛,计算机科学是算法的科学,计算机算法中dijkstra有着重要的实际和启发意义,所以比赛一定要考。
  你参加这个比赛,要拿奖,就必须学习这种算法。你也许觉得你智商很高,但ACM-ICPC比赛本身不是智力比赛,比赛就是要让你去学习这些东西,所以,如果你不想学的话,我觉得也没有必要参加。说道这,可能偏题有点远,但是希望以上的分析能得出这样一个基础结论:不想学好算法,那没有必要来比赛。
 
  <2>用模板是不好的
  现在很多我们弱校的ACM-ICPC选手比较依赖模板,说实话,我也很依赖,但是我起码知道一点,这样是不对的,某种意义上说,这是你没有把算法学明白的一种表现。而且也严重影响编码速度。在我参加过的亚洲区域赛和亚洲区域总决赛(EC Final),那些大佬们从来没有看过模板,全部现场敲。正常的比赛绝对不会考察模板题的,每道题都是3到5个知识点糅合到一起考察的。
 
  我觉得敲代码的时间没有浪费,某大牛曾说:因为每次敲都有可能有不同的错误,所以不用模板是好习惯。我最开始学dancing link的的时候,自己敲出了代码,然后接下来的几道题部分参考了以前的代码,后来基本上是直接copy。现在,当别人问我dancing link算法或有关的题目的时候,我已经是一脸茫然。
 
  所以,用模板是不好的,有时候由于某些原因可能你用了模板,但你起码要知道这要做是不对的,并且有机会要改正。
 
  <3>需要深入学习
  像 ACRush、zzy、ahyangyi…等等国家队的天才们,本身难以说我们与他们之间有什么可比性。但是他们的学习方法应该还是值得借鉴的,他们的学习方法当然我们得不到言传身教,但是从他们在国家队集训的论文中和他们搞完ACM-ICPC以后的轨迹中,可以有所体现。那就是:深入学习。
  首先,我觉得ACMer学算法不应停留在看看代码实现这个层面,在算法思想上要有清醒的认识,在正确性分析上要也应该要有较好的逻辑。因为网上的代码的实现上的一些细枝末节很可能掩盖了算法本身有的简洁性、美感和思想。因而丧失了对算法整体上的一些认识。还拿dijkstra算法打比方,有些算法不是基于 dijskstra的直接建模,而是需要你修改这个算法,这时你对算法没有真正理解的话,也就一筹莫展了。
  所以,要阅读论文和书籍,尤其与英文书籍,窥到它的本质。另一方面,只有这样,你学的的东西才能在ACM-ICPC以外,给你一定的启发——否则你会迅速忘掉它的。

  <4>独立思考
  这点我也很惭愧,因为我也是缺乏独立思考的。很多题我不会了,就去搜解题报告,所以反而我的搜资料能力变得特别强。大佬们遇到题不会的时候,也不会很急于把题目做出来,可能每隔一段时间又拿出来想一次,总有一天想通了,之后这一类型的题目基本上也就没有什么问题了。
 
  而我恰恰比较“虚荣”,做到的题目不会不太愿意想太久,就想尽量快些AC,于是急于看解题报告,这样导致的一个问题就是有些重要的东西解题报告中没有提到,而我也没去想就把他们忽略了,这样,我还是不会做。我和大佬讨论问题的时候,我不会一般就直接找他要代码,但是他不懂的时候,顶多问我大体的思路,而绝对不会要代码的。

  <5>做有意义的题
  1.不要做水题,这里的水题定义为:一眼就能看出做法,而且中途的实现可以预计没有太多问题的题目。
  2.做能够强化你最近学到的东西的题目
  3.你现在不会,但你应该会的题目。
  这同时也是在说,某些没太多代表性的题目可以少做,因为对比赛帮助不大。(当然我这个参加比赛的目的很功利,非功利主义者另当别论)刚才,我把我在poj上的号和他的号对比了下,他ac而我没ac的基本上是难题,我ac他没ac的一般是水题,看得我想哭,5555。
 
  补充一点:ac的人多的并不一定代表着水题,有些几千人ac的题目,在现场赛中ac的人很少,这样的题目往往是有一定思维难度且编码不难的好题,这种题目要认真做,某个学长说:经典的题目啊,只有那么多,做一道,就少一道。
 
  <6>估算好某种训练所需要的时间
  我觉得我学网络流就是一个例子,我大概在亚洲区域赛之前2个月开始学习网络流,1个月前开始学习费用流,但是对于我来讲,这两个月培养出来的网络流思维还是不够(虽然也做了不少题),特别是,这种题目往往作为中难的题目出现,不会让你随便水的,于是,北京赛区的那道网络流当时就没有想出来——功利地说,学习网络流没有得到好的效果。
 
  所以,现在来看,当时其实我可以不搞网络流。如果要学一种比较有难度的东西,并且还必须把他搞好,应该较早地,全面地学习,必须长期的训练以培养这种思维。打个比方,如果你微积分平时不学,仅仅考试前一周狂做题目,我觉得上90分是很困难的。
  当然,这要根据个人情况而定,我的理解能力应该说是中等水平,如果牛的话应该可以更快地学好。
 
  <7>有关训练的度
我觉得其实通宵刷题,或者太长时间地做题,还是不好的。我们为什么会这样有热情地做题呢,因为我们有兴趣;但是一个人的成功不仅仅依赖于兴趣,还要依赖于自控。这和打游戏是一个道理,游戏太有趣以至于我们常常通宵——ICPC题目也太有趣,所以有时候通宵。而且很多时候是,由于一道题AC不掉,所以赌气一定要搞定才睡觉,这样一不小心,就通宵了。
  其实我明白,通宵不一定效果好,这仅仅说明了你兴趣很高涨而已。通宵往往会打乱你的时间安排,打乱你的生物钟,进而影响你短期或是中期的训练计划。而且,疲惫的状态下做题,你往往只有ac题目的欲望,而完全丧失了ac题目的灵气。所以,我建议,ACMer一定要合理安排作息,能够自控,这样不仅仅对你做 ACM-ICPC有好处。
  总之,有效训练是很重要,只有通过有效的训练你才能获得你参加这个比赛应得的东西。
 
  最后要说下刻苦训练这一点,ACM不是智力测试,不是你什么都不做就可以天上掉馅饼的。当然我不是说题目一定要做多少多少道,但如果你觉得你可以一心二用,从概率上来讲,你百分之九十地错了,我是个工科生,我相信概率而非奇迹。
 
  ACM-ICPC绝不是大学生活的全部,也不是搞算法的全部,你大可以花时间去做其他研究,做项目,或者参加学生工作(我更欣赏那些对人生和职业有良好规划的ACMer);但是,如果你搞ICPC的那段时间你不是全部投入,那在ACM-ICPC生涯中,将只有后悔。

个人公众号:ACM算法日常

专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、机器学习等。

浅谈ACM算法学习与有效训练相关推荐

  1. music算法_“要热爱 请深爱”系列(5)浅谈模拟退火算法

    黄乐天 浅谈模拟退火算法 背景 在实际生活中, 数学问题中,我们常常会遇到(一定范围内)函数求最值的问题.一般可以用数学方式解答,但如果遇到如下恶心的函数: 它的函数图像是这样的: 我们只好用计算机科 ...

  2. 浅谈PPO算法-玩转月球登陆

    浅谈PPO算法-玩转月球登陆 前言 github 什么是Actor-Critic? Actor-Critic代码 ppo算法 实现 前言 总感觉强化学习公式真难学,也难表达心中所想,我还是白话强化学习 ...

  3. 高中所学过的计算机知识,浅谈高中计算机学习重点论文

    21世纪是信息网络化时代,计算机技术已经成为各行各业发展的关键技术之一.作为高中学生必修的课程之一,为了适应新课改的要求,提倡在高中计算机教学中实行自主学习的教学方法.力图从自主学习模式在高中计算机教 ...

  4. 【数学教学论文】浅谈小学生数学学习兴趣的培养

    浅谈小学生数学学习兴趣的培养 作者:刘亚儒 摘要:古代教育家朱熹曾说:"教人未见其兴趣,必不乐学."由此可见,兴趣的培养在教学过程中至关重要,有利于提高数学课堂的教学效率和学生的学 ...

  5. 浅谈对SprutCAM学习认识

    SprutCAM简介 SprutCAM软件在国内被称为司普禄(我猜是音译的),是由俄罗斯开发团队研发,国内昆山司普禄科技公司代理,这个软件十分强大,可以仿真模拟市面上的绝大部分的工业机器人,相对于四大 ...

  6. 浅谈匈牙利算法(二分图最大匹配)

    前置知识 一张图是二分图,当且仅当它的点可以被分成两部分,而这张图上的所有边的两个端点,都分属不同的部分.我们称这两个点集,一个叫左部,一个叫右部.左部中的点叫左部点:右部中的点叫右部点. 一张图的一 ...

  7. 浅谈ICA算法的概念、本质和流程

    本文转自http://m.elecfans.com/article/699564.html ICA独立成分分析是近年来出现的一种强有力的数据分析工具(Hyvarinen A, Karhunen J, ...

  8. fastica和pca区别_浅谈ICA算法的概念、本质和流程

    ICA独立成分分析是近年来出现的一种强有力的数据分析工具(Hyvarinen A, Karhunen J, Oja E, 2001; Roberts S J, Everson R, 2001).199 ...

  9. 浅谈 Adaboost 算法

    http://blog.csdn.net/haidao2009/article/details/7514787 菜鸟最近开始学习machine learning.发现adaboost 挺有趣,就把自己 ...

  10. 浅谈KNN算法原理及python程序简单实现、KD树、球树

    最近比较空闲,打算利用这一段时间理一下机器学习的一些常见的算法.第一个是KNN算法: KNN 1.原理: KNN,K-NearestNeighbor---K最近邻 K最近邻,就是K个最近的邻居的意思, ...

最新文章

  1. android 定时换图片,android 视频和图片切换并进行自动轮播
  2. java oralce merge_mybatis 使用oracle merge into 语句踩坑实录(示例代码)
  3. 十万浙企上云 阿里云崛起的最大征候?
  4. 【WP7】页面过渡效果
  5. Python--32 模块 包
  6. JVM:堆中对象的创建?定位?可达性?
  7. windows8.1下使用U盘安装Ubuntu双系统
  8. 清华,北大坐实亚洲大学Top2,泰晤士2020亚洲大学榜
  9. 递归下降分析器的设计java_数据结构(Java版)教与学(48和60学时教学大纲)
  10. Rulo扫地机器人app_米家扫拖机器人1T测评|米家扫拖机器人1T的3D避障实际效果如何?...
  11. 出现类似于 ”IDD_DLG_WAIT 未声明的标识符“ 这样的错误怎么办
  12. 页面缓冲滚动到指定位置
  13. C++Builder 2010深入TForm类之窗口与窗体
  14. office 2010安装包
  15. 全网最新猎豹网校-快速掌握Python项目实战
  16. (泰勒展开式/欧拉公式)证明:e^x推导及e^(iπ) = -1展开过程
  17. unity 360°全景图
  18. crontab播放音乐没声音
  19. 浙江大学【面板数据分析与STATA应用】——第一讲短面板数据分析
  20. 中南大学2019计算机研究生分数线,2019中南大学研究生分数线汇总(含2016-2019历年复试)...

热门文章

  1. janusgraph源码分析1-下载编译启动
  2. 04.Unity ShaderGraph序列(Lightweight Pipeline相关扫盲)
  3. 硬件学习笔记之稳压二极管
  4. c++的学习——画矩形
  5. 打印机质量测试软件,打印质量测试
  6. 《javascript高级程序设计》核心知识总结
  7. 新书上市|这套北大数学系青睐的数学科普书,又添新成员
  8. python pdf模块_python—pdf模块
  9. Flutter IM 极光
  10. 如何从网站提取数据?