这份教程,带你深入浅出的学习算法,主要针对国内中小学阶段的信息学竞赛普及组方面的知识内容。整个教程从 Competitive Programming 角度编写,结合笔者自身竞赛经验和代码经验,以及学习经历、工作经历、生活经历,给各位小朋友和大朋友们准备的一份教程。本教程,参考了很多网络上的开放资料,引用处多有标注,感谢互联网解决了一部分信息不对称问题。

《TOEFL核心词汇21天突破》

本教程起名《信息学奥赛普及组算法21天突破》,是为了致敬(/模仿)李笑来老师的课程,他有一本书叫《TOEFL核心词汇21天突破》,显然我距离笑来老师的水平还有很多段位(几个宇宙差位),但我很认同他的观点和实践能力。下面引用一篇话:

所以,实际上“方法”这个东西没那么重要——至少没有很多人想象的那么重要。事实上,很多人用很笨的方法同样成功了。因此,成功往往不是靠“方法、技巧”,而是靠“勤奋、努力”。

不要认为一天背100个单词不可能。这本书中每个单元有101或102个词汇——有些词汇还报考若干词义。乍看起来“每天一个单元”似乎有些过量,但并没有那么可怕——本书在编写过程中已经有很多学生使用本书的测试版在21天之内消灭这本书中的所有词汇,最终体会那种在考上不再有大量生词的快感。过去有一位老师经常这样鼓励我:“我怎么会看不完呢?你想啊,有人能写出来,可你看书都看不完是不是太笨了呢?”

诀窍在于:尽快完成第一遍,然后重复很多遍。因为并没有人要求我们“第一遍就全部记住”——实际上也没有人能做到“第一遍就全部记住”。早上起来花一个小时重复一遍昨天的内容;上午用两个小时浏览新的单元,并把已经认识并且正确掌握的词汇划掉;下午用两个小时把剩下的部分反复过滤很多遍;晚上用一个小时复习一下白天的内容。——就是这么简单!

不要觉得一天背100个太累。一天100个,21天结束。一天10个,210天结束——更累!!事实上从来就没有人背单词可以坚持210天。钟道隆先生以他50多岁的高龄,在一年内用3000个小时就从零做起攻克了英语难关,成为”首席翻译“。如果每天只学1个小时,大约要8年的时间;高手们都比较”凶悍“,每天狂练8个小时,甚至10个小时——钟道隆先生每天15个小时!所以,他们只需要一年——这大概就是所谓的速成吧。

也别怕别人说你是疯了。背单词的人都是疯子。心理学家拉里·奎尔早就做出这样的总结:“精神病患者的典型症状之一就是——他会不停地重复做一件事情,期望得到不同的结果……”

把自己当做一台机器吧——暂时别把自己当人看。因为人是有各种各样的感觉的——其实各种各样的感觉都是浪费时间的:“沮丧”、“焦虑” 除了浪费时间之外没有任何用处;即便是“开心”、“幸福”不也同样是timeconsuming的嘛!机器的好处是永远可以定时定量完成指定任务。“该干嘛就干嘛”是成功者朴素的信条。坚持到底,终将有所收获,成功之后,没有人说你是“机器”、“呆子”或者“疯子”,所有人对你只有“羡慕”。不要半途而废。这样变态的事情,我们这辈子只需要做这么一次——做就要做到最好,做就一定要坚持到底。坚持不下去的时候想想那个永不失败的Bryan曾经说过的话吧:“失败只有一种,就是半途而废。”

——《TOEFL核心词汇21天突破》本书特色及使用方法

看到这里,TOEFL核心词汇21天突破的序言,足矣表明本门课程的中心思想,没有捷径(功大欺理)

想要说的话

做投资的沈南鹏先生,学历高,工作很努力,投的项目都很不错,在接受鲁豫采访的时候,说的一句话是“唯手熟尔”,然后,匆忙赶往城市的另一边去参加一个会议。

没有什么成功的秘诀,只有 practice。这一点,美国选手 William Lin,给大家的建议就是只有 practice,去解决问题,solve problems,通过做题锻炼自己的能力和经验。

计算机学科的东西,都是实践出真知,没有靠 PPT 能学会的,听课只是一部分,练习占绝大部分。当有不确定的东西时,可以做计算机试验,就是写一写试一试,计算机会告诉我们结果是什么。

这个方法我屡试不爽,受益匪浅。事实上,很多人也知道是这个道理,就是死在了懒上。有也一部分是死在了,自己想试,没入门,少一个有经验的师傅带一带。

#实践。信息学竞赛是一个课堂下沉的竞赛,会学一些相对超前的知识,希望不要用超纲的词汇来描述这个事实,因为这些知识看你怎么学,怎么教,怎么练,怎么掌握。如果向本科生那样从知识集合角度入手,显然会直接挂掉,拂袖而去。中小学生更适合围绕问题开展学习,已解决问题为主要目的,可能刚开始入手,为了解决一个问题,就使用到了动态规划,但是此时并不知道动态规划是什么,但是我就是会用这个方法来解决问题,这就足够了。渐渐的,经过时间积累,就自然的建立起了一套相对完整、根基牢靠、实用耐操的知识框架和实操能力。请你记住实践出真知,这是毛主席教导我们的。我自己的经验是,这句话是绝绝子的对。

#天赋、兴趣。很多家长朋友,还有这样一个认识,我的孩子有没有天赋,有没有兴趣,学计算机要看天赋,要看兴趣。我想说的观点是,天赋是很重要,南怀瑾说过的话是,从古至今,有很多的状元,你记住了几个状元的名字。而真正做领导的人文化程度并不是都很高。纵然有天赋,不努力勤奋,终将泯然众人矣。兴趣呢?这个就更有意思了,刚出生就要问兴趣,我都不知道这是什么鬼,就要表现出来莫名的喜爱,这个概率就比较离谱了,可能真的是遗传能够决定的,或者当时气氛比较好,孩子就那么喜欢上了。实际上呢,对一个事物,只有擅长做,能做好的情况下,才会产生兴趣。因为会干,所以越干越起劲,越干越明白。

#对比。在学习过程中,还会有这样一个现象,你学了不短的时间,比赛成绩也不理想,学习内容还是徘徊在初级阶段,但是有的同学却能够很快一两个月就学会,然后去比赛取得提高组省一,然后从此开挂下去。请你不要忽略一些实际,这些同学的文化课成绩本身就数一数二,具有其他学科竞赛的基础和实力,在奥数方面更是从小就学习,学习习惯好,平时爱思考,肯下功夫,一心一意搞竞赛。这些,比一比,心理不要有那么多落差。不是,你交了学费,学上了信息学,就是IT精英。是你在学一门手艺,这门手艺比较难搞,学的过程比较有内个意思和劲头子。我觉得,别把自己看成一等一的学霸,也别把自己注定成一个学渣,我们就是普通人,学学习,涨涨本事。心态上看淡,手上的功夫才能聚精会神。

#反复。实践出真知,只有反复练习,高考还有一轮二轮复习呢,你参加一个比赛连几轮学习都不搞上几遍,还想和众多神仙高手过招,还是洗洗睡吧,开开心心就好。至于,那些要计较投入多少小时出成绩的家长朋友,看来你是熟读《孙子兵法》,知晓算计的妙处。只是算计的前提是你熟悉这个领域,相信现在的家长朋友这个年龄段里,熟悉算法竞赛的高手,应该很少,只有那些为人父母的教练老师。(最近学习了一个新的词汇“精致的利己主义者”,听起来很凄凉的,也很可怕,尤其是老师和学生之间,但自己身上也有类似的问题,没什么好去教导别人。回报社会,是最好的福分。)舍得,舍得,舍不得鞋(hai)子,套不到狼。

算法竞赛,考察的是有效时间,利用有限知识,解决问题的能力。把这个搞明白了,你将突出重围,看见一个新的世界。

这份教程,我开放出来,供所有人参考使用,并且我会不断更新这份教程。希望,对计算机学科的普及工作,能贡献出一份学子之心。

以上,写于2020年1月29日

笔者在小孩出生的那天,决定离开国企,走入教培行业,从事技术开发管理工作和算法竞赛教学教研工作。本科计算机专业、硕士信息安全,普通人,唯有兴趣和坚持。愿与你分享所见所得。

这是我的知乎,https://www.zhihu.com/people/zhang-qiang-10-88-45,关注一下。 我的学生已经比我厉害了,欢迎各位同学、各位老师,指导斧正。

  1. 竞赛是一个小众的游戏,没必要对自己过不去,珍爱生命。
  2. 最主要的,要有一个健康快乐的青春期/童年。
  3. 当然,你苦过来了,Anyway,苦又怎样。