〇、前言
在新生群里安利了不少人熟悉信竞,很开心看到这么多人对于编程&信息竞赛感兴趣。本文将解释信息竞赛的学习内容,知识特点,对于高考的帮助等大家关心的问题。
一、基本情况
1. 信息学是什么
信息学是一门新兴而古老的学科,对于信息的研究可以追溯到人类使用结绳记事起。文字的诞生、造纸术和印刷术的普及都是信息学研究的阶段性成果,特别是上世纪中叶电子计算机诞生开始,信息学在具体生产生活中发挥着越来越重要的作用。严格地说:“信息学是研究信息的获取,处理,传递和利用的规律性的一门新兴学科。”1
2. 信息学竞赛*概况
信息学竞赛(Olympiad in Informatics,下简称OI),是联合国教科文组织所倡导的五项学科竞赛之一,与物理、数学、化学、生物竞赛具有同等地位。对于中学生而言,我国开展的信息学竞赛有
- NOIp(National Olympiad in informatics in Provinces ,全国青少年信息学奥林匹克联赛 )
- NOI(National Olympiad in Informatics,全国青少年信息学奥林匹克竞赛)
- CTSC(China Team Selection Competition,中国代表队选拔赛)
参加的国际竞赛主要有
- IOI(International Olympiad in Informatics,国际信息学奥林匹克竞赛)
- APIO(Asia-Pacific Informatics Olympiad,亚洲与太平洋地区信息学奥林匹克竞赛)
我国选手在国际竞赛中处于优势地位,在刚刚闭幕的IOI2016中,我国选手金策(Orz)以597分(满分600)的成绩获得IOI金牌&第一名,我国排出的三位选手均获得金牌。
3. 信息学竞赛对于高考的鼓励政策
从2013年起,CCF(中国计算机学会)取消了NOIp对于高考的保送资格,提高了对于高考鼓励的门槛,但这并不意味着取消了高考鼓励政策。高考鼓励政策仍有:
- 在NOI中获得铜牌(下称Cu)、银牌(下称Ag)和金牌(下称Au),都可以获得相应学校降分录取的资格。例如:Cu可以获得浙大、北邮等学习降50分或降至一本线录取(比如田大师@Onlynagesha);Au则可以获得清北降一本线录取资格。
- 在NOI中获得Au前若干名,进入国家集训队(不是国家队),获得保送至清北的资格(rzO比如金策爷Orz。)
二、 为什么要学习信息竞赛
1. 引用两段话
作者:Yan Gu
链接:https://www.zhihu.com/question/26687699/answer/34571676
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
问题:信息学竞赛算式边缘竞赛吗?
必须不是。
恰恰相反,确切的说,OI是高中最值得参加的竞赛,如果你真心的喜欢OI,将来想从事计算机相关领域的话。
(卧槽我是说将来搞计算机的人啊,搞生物化学电机环境什么的人来评论区里骂是几个意思?求理解力!你们当然不在我的讨论范围里,也不需要搞信息学竞赛啊。)
正常来说,虽然不排除确实有对于生化竞赛很感兴趣的同学,但是首先生化的坑比较大,到处都有吐糟我就不再加以赘述,其次这两个竞赛主要记忆成分为主推理为辅。所以这两科竞赛除了有保送这个技能点之外对于个人能力的培养和正常高中学习相似。
数学物理竞赛比较general,主要是“锻炼智商”+“秀智商”的。数学竞赛本身对于大学学习意义不大,全部都是初等数学,但是能很好的培养思维能力。物理竞赛的现状(虽然不是初衷)是提前在中学学习微积分+大物+几大力学,具体程度视能力而定,对于大学有帮助,但是again我本人是强烈的反功利主义者,我认为物理竞赛的主要挑战+意义就是需要比别人早几年学习这些高等的课程,首先不是每个人都能在高中的时候领悟这些课程的精髓的(其实大部分人一生都不能),其次这样的锻炼对于一个人的智力发展也是很有利的。但是话说回来,毕竟世界上不需要多少数学家物理学家,参加这些竞赛也就是感受过程、提高智商罢了。
最后说回信息学竞赛。这是唯一一门既能锻炼智商又切实有用的竞赛。当然前提是你将来是IT从业者,但是从现在(美国)的发展趋势来看,今后二十年IT业都将是人类进步的主要输出力量之一和最大的劳动力需求市场,所以如果你真的喜欢的话,IT业是一定不会亏欠你的。
(顺带提一句保送。其他学校我不太清楚,清华是不在生化竞赛现场签人的,至少我们当年是,因此要报送就要和其他人一起考保送生考试,基本是数学物理。同样的道理信息学竞赛的人参加保送生考试也是比较不利的,因此信息学其实是现场签人最容易的竞赛。我记得好像11年的时候全国前100就可以全签了,而且一年还会有好多比赛,但凡有一个考的比较好就能签。当然保送只是途径,不是目的。竞赛重点是参加竞赛的过程。)
我在智商会不会像跑步锻炼身体一样能提高呢? - Yan Gu 的回答 举过信息学竞赛的例子,介绍了OIer在大学中明显更加如鱼得水的现象,原文如下:“比如学计算机,如果在*名校,大家应该都会觉得高中搞过OI竞赛的人去了大学学习计算机知识的时候反应和感觉都相对比较好,而正常高考的同学则会稍微吃力一点。个人认为主要原因是正常高中生在高中数学主要都是在学习连续数学,而OI中则侧重离散数学。而计算机科学自身就是建立在布尔代数的离散数学体系上的,在更早的年纪就接触到离散数学肯定会提升对于计算机理论和知识的理解,自然就提高了综合理解和解决在计算机学习中的问题的能力。”
数据也支持这个观点,比如CMU最近三年招的博士里面的中国本科(只是招的,最后不一定会来,每年全国有不到10人吧)除了每年各有一个数学国家集训队的之外其他人都有高中信息学竞赛经历。虽然也有人在OI弱校比如 @Yihan Sun 或者 @Yong He ,无法直接通过信息学竞赛保送,但是所有人都承认高中的算法和编程学习经历非常重要。(当然不是说所有牛人都要来念博士,但是这至少是一个很高的bar,能来的人基本都还是领域中的佼佼者。这个后验概率加上OI的人口比例就很说明问题了。)
个人感觉OI对于一个人思维能力的锻炼要超过任何其他科目竞赛的锻炼,因为这是一套你之前从未接触过的知识体系。对于基本知识的学习和打基础,对于本科计算机专业而言几乎超过你高考所有的科目之和。只听说过没搞过OI的人到了大学基础知识不足的,很少听说有人搞过OI导致基础不足的,唯一的另外可能是英语,这是唯一一个大学乃至未来学习中很需要但是OI又不锻炼的地方。
另外我老婆在考上清华北大的大神们的高中生活是什么样的? - Yihan Sun 的回答 中提到过,作为高中生,尤其是优秀高中生,一定要认识到高中老师视野的狭隘性和局限性,尽量不要被他们所迷惑。(有评论说其实中学老师里面也有牛逼的,这个我也承认,我们高中就有北大毕业因为64被搞的。但是还是感觉在中学呆的时间长了之后见识也和其它老师趋同了。)竞赛是尽量要搞的,哪怕在弱校也要做出个姿态,学习竞赛的过程对于你的锻炼远比你学到的知识重要。2
以及
作者:Scarlett C
链接:https://www.zhihu.com/question/26687699/answer/34589851
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
我的意见是:如果喜欢,如果做得还不错,请你坚持,坚持,一定要继续OI下去!!!
忍不住想要回答。特别赞同排名第一Yan Gu的回答。
特别同意2点:
“作为高中生,尤其是优秀高中生,一定要认识到高中老师视野的狭隘性和局限性,尽量不要被他们所迷惑。”
“这是唯一一门既能锻炼智商又切实有用的竞赛。当然前提是你将来是IT从业者,但是从现在(美国)的发展趋势来看,今后二十年IT业都将是人类进步的主要输出力量之一和最大的劳动力需求市场,所以如果你真的喜欢的话,IT业是一定不会亏欠你的。”我们高中的时候,信息竞赛也是边缘竞赛吧。虽然竞赛成绩是五大科竞赛最好的,但是理科实验班分班时,各科竞赛生都分到一班了,只有信息竞赛同学不能被分到一个班,大概就是因为计算机不属于高考学科。
印象中老师也不太看得爽我们有时候去训练不写作业不来上课……感觉在学科老师眼里,竞赛完全不是正道。高考才是正道,竞赛只是兴趣小组,玩玩就好~我高中时就是这么想的:参加OI是为了丰富课余活动,让高中生活不要那么无趣而已。但是竞赛后来给我带来的收益,真的是源源不断超乎我的想象和期待!主要是升学,学习和就业三个方面。
1. 升学。
(1) 因为高二那年幸运地拿到NOIP一等奖,得到了保送资格。才能利到一个很好的大学。
(2) 由于有高中的基础,本科学管理学的我,在发现没有好的就业机会时,才敢把目光转向申请CS的硕士。
2. 学习。
举2个例子: 大三的时候在韩国交换,不会讲韩语,就修英文版数据结构。老师英语很差,在课上常常不自觉地冒韩语;同学们也喜欢在课上用韩语问老师问题。我当时的处境就是听不懂老师讲课,也没有同学可以讨论,更没有学长学姐的指导。完全自学—发现概念基本都懂,最后拿了全班前三,期末给了我满分!
研究生在美帝学CS。由于本科是管理学,四年基本没怎么编过程。忐忑不安地开始研究生的学习之后,发现刷题对我而言颇为轻松;学习新的编程知识时,代码也能比其他一样是转专业的同学写得更快更漂亮。这样的发现让我特别惊喜,庆幸和诧异:六年前学的思想和概念,居然到现在还没忘光,还那么有用!!
真心觉得OI经历比所有高中的高考科目对我更有用得多!影响更持久!!
3. 工作。我现在还在念研究生,还没找过工作。但和oi学长(现在google上海)聊天,他表示,重拾高中的基础,找工作就不是问题;了解了一些当年oi一起训练的同学和学弟学妹,他们都表示是当年的底子才让他们找到工作;大学不是学CS的小伙伴也纷纷表示本科所学无用或没学到什么,现在靠当年的底子找开发工作。总之,当年坚持做OI的多数小伙伴们……现在都干起了(或准备干起)码农行当。另外,不管国内国外,程序猿赚钱比很多行业都高啊。作为过来人,非常建议楼主坚持OI.如果是像我一样容易摇摆不定,受别人意见影响的话,不妨关注一下知乎的一些CS大牛,看看人家的生活和观点,你会觉得学OI多么正确!做程序员多么正确! 3
2. 信息竞赛研究什么
信息竞赛主要研究的是算法和数据结构。不要简单的将信息竞赛看成“编程比赛”, 对于信息学竞赛来说,编程只是工具,真正需要考察的是:
- 数学建模能力。即将具体问题转化为抽象模型的能力。例如:
- 对于一个城市平面图,应当把楼看成点,街道看成无向边,就可以看成无向图(Undirected Graphs)
- 化学工业生产中有很多工序,一些工序是相互关联的,则可以将工序节点看成点,完成时间看成有向边(弧),建立有向无环图(Directed Acyclic Graphs,DAG)
- 对于若干短的基因片段和若干个长的基因串,寻找对于每一个长基因串寻找可以匹配多少个短基因片段。可以将短基因片段建立字典树(Trie),运用AC自动机解决
- …
- 离散思维。我们学习的数学大多是连续数学,信息需要的更多是离散数学。但离散数学并不神秘,具体有以下例子:
- 上面说的图(Graph)是一种离散结构,具有很多性质和算法
- 任意一个图可以用四种颜色染色,使得任意一条边的两端点颜色不同(四色定理,Four color theorem)
- 如果一张联通无向图
G={E,V} 由n个点和n-1条边构成(|E|=|V|−1 ),则这张图一定是一个无根树;如果以某一点为根(root),将所有的无向边定向,使得任何一条边e,出发点距离根比结束点近,则这棵树变成了一棵有根数(tree) - …
- 计算思维。即用算法解决问题的思维。具体而言,就是对解决问题的每一步进行形式化的描述,并用计算机语言表述。例如对于排序问题,要求对于任意一个输入集合
A 和基数n=|A| ,求一个排列A′ ,使得∀i<j,A′i≤A′j 。可以使用如下描述的快速排序算法(Quick Sort):- 如果集合中只有一个数,输出这个数,结束
-
∃x∈A , 求L={k|k∈A,k<x},R={n|n∈A,n>x} - 递归地求解L,输出x,递归地求解R
- 灵活的应变能力。编程和设计算法中必然会遇到许多突发情况,灵活解决这些突发情况是信息竞赛者的基本素质之一。