算法竞赛系列 | 为什么要学算法竞赛?怎么学?

●掌握丰富的算法知识。算法竞赛涉及绝大部分常见的确定性算法,掌握这些知识不仅能在软件开发中得心应手,而且是进一步探索未知算法的基础。例如现在非常火爆的、代表了人类未来技术的人工智能研究,涉及许多精深的算法理论,没有经过基础算法训练的人根本无法参与。

●培养计算思维和逻辑思维。一道算法题往往需要综合多种能力,例如数据结构、算法知识、数学方法、流程和逻辑等,这是计算思维和逻辑思维能力的体现。

● 培养团队合作精神。在软件行业,团队合作非常重要。像ICPC、CCPC这样的团队赛,把对团队合作的要求放在了重要位置。一支队伍的3个人,在同等水平下,配合默契的话可以多做一两道题,把获奖等级提高一个档次。他们在日常训练中通过长期磨合,互相了解,做到合理分工、优势互补,从而发挥出最优的团队力量。即使是蓝桥杯和NOI这样的个人赛,队员在学习过程中互助互学,也发挥了团队的关键作用。

02

为什么选用这本书

读者的期望总是很高的。

如果读者是一名算法竞赛的初学者,他非常希望有一本“神书”。读完这本“神书”之后,他或者在参加大公司的算法题面试时自信满满,或者参加算法竞赛时代码喷涌而出,或者在日常工作中能用巧妙的算法解决实际问题……前辈们向他推荐了一些好书,他看了书,做了一些例题,他觉得自己学到了很多算法,掌握了很多竞赛技巧,但是遇到实际问题,或者参加竞赛时,他还是感觉很晕,发现那些书和例题似乎都用不上。神书在哪里?

当他跨过初学者的门槛,他会认识到这样的“神书”其实并不存在。这往往不是书的问题,而是他对书的期望过高了。一些算法竞赛相关的教材确实写得很好,也有很好的口碑,可以说是学习算法竞赛的必读书。但是要将书上的知识转化为自己的能力,需要经过大量的练习,正如陆游诗中所说:“纸上得来终觉浅,绝知此事要躬行。”对应到编程这件事上,有两个重要的学习过程: ①学习经典算法和经典代码,建立算法思维;②大量编码,让代码成为自己大脑思维的一部分。

算法竞赛的学习难度颇高,它需要一名参赛者掌握以下能力: 丰富的算法知识、快速准确的编码能力、敏捷的建模能力。

学习算法竞赛产生了一个自然的结果:经过长期深入学习并在算法竞赛中得奖的学生,都建立了对自己计算机编程能力的自信,并能顺利成为出色的程序员。

算法竞赛这样高难度的学习显然不是一蹴而就的。算法竞赛的学习者分为三个层次:初学者、中级队员和高级队员。本书努力帮助读者顺利度过从初级到高级的学习过程,希望读者看过本书之后,能说一句:“这本书虽然不神,但是还不错!”

本书是一本算法竞赛“大全”,讲解了算法竞赛涉及的绝大部分知识点。书中对应的部分也适合这三种层次的学员,陪伴他们从初学者走向高级队员。

初学者。一名刚学过C/C++、Java、Python中任意一门编程语言的学生,做了一些编程题目,建立了编码的兴趣,对进一步学习有信心和动力,希望有一本介绍算法竞赛知识点的书指导学习,这本书的初级部分正适合他,帮助他了解基础算法知识点、学习模板代码、练习基础题。经过这样的学习后,他很可能获得蓝桥杯省赛三等奖,甚至更好。不过,他仍没有获得ICPC、CCPC铜奖的能力。

中级队员。中级队员顺利地跨过了初学者阶段,他证明自己已经走上了成为杰出程序员的道路。中级队员符合这样的画像:精通编程语言,编码得心应手;他做过几百道基础算法题,并且准备继续对算法竞赛倾心投入;他有了志同道合、水平相当的队友一起学习进步;他遇到了学习瓶颈,计算思维还不够;他只能做简单题和一些中等题,对难题无从下手。中级队员可能获得蓝桥杯省赛二等奖、一等奖,也差不多有ICPC、CCPC铜奖的水平。本书的中级部分能帮助他进一步掌握算法知识、提高算法思维能力、练习较难的题目。

高级队员。他们获得了蓝桥杯国赛二等奖或一等奖,以及ICPC、CCPC银牌或金牌。这些奖牌是“高级队员”的标签,他们已经足够被称为“出色的程序员”,在就业市场上十分抢手。本书的高级部分能帮助他们进一步扩展知识点,增强计算思维。

03

本书内容介绍

本书内容的难度涵盖了初级、中级、高级,下面对本书的章节按难度做一个划分。

本书内容的铺排以知识点的讲解为主,而不是一本习题集。所以,书中的例题主要用于配合知识点,大多直截了当,不用太多建模,即所谓的模板题。但是赛场上的竞赛题目为了增加迷惑性和考验参赛者的建模能力,一般不会出模板题。读者需要做大量的练习,才能把知识点和模板代码真正用起来。就像一个剑客,刚学剑的时候,剑是他的身外物;成为高手的时候,剑是他身体的一部分,人剑合一。

本书涉及很多复杂难解的知识点,需要极大的毅力和决心才能学习掌握。其中烧坏最多脑细胞的,例如杜教筛、动态树、DP优化、组合计数、后缀自动机等,让人心悸。如何学习?我用一个词来回答:“勤能补拙”,以此与读者共勉。

04

如何使用本书

读者可以按上述难度分类安排自己的学习。一名勤奋的竞赛队员,他的学习步骤大概如下:

大一,学习初级知识点,做500道题左右,主要是基础题。参加蓝桥杯大赛,争取三等奖或二等奖,得奖之后就成了初学者中的佼佼者;能力强的甚至可以申请参加ICPC、CCPC、天梯赛等团队赛。

大二,学习中级和部分高级知识点,继续做500~1000道题,中级题目和综合题目。继续参加蓝桥杯大赛,争取省赛一等奖;参加ICPC等团队赛,获得铜牌。成为中级队员。

大三,继续学习高级知识点,做综合难题。参加蓝桥杯国赛并得奖;参加ICPC等团队赛获得银牌或以上。成为高级队员。

书中除了解析知识点外,对每个知识点都给了建议的习题,但是没有对这些习题进行难度分级,原因如下:①读题也是很好的练习,如果读者做题前被告之题目的难度,可能会影响读者思考的乐趣;②读题之后,读者基本上能自己判断题目的难度 ③有的题目难以分级,这些题或者建模难而编码易,或者建模易而编码难,或者逻辑易而编码烦,这样的题目是难题、简单题,还是中等题?考虑到这些原因,题目的分级还是留给读者自己判断吧。

05

本书的特点

在作者的另一本书《算法竞赛入门到进阶》(清华大学出版社)的前言部分,曾确立了四个写作目标:

● 算法思路:一点就透,豁然开朗。

● 模板代码:结构精巧,清晰易读。

● 知识体系:由浅入深,逐步推进。

● 赛事相关:参赛秘籍,高手经验。

这四点仍然是作者在本书中努力达到的写作目标。

作者知道普通人学习的盲点,写出的解析通俗易懂, 让初学者也容易学习理解,不至于卡在某些脑筋急转弯的地方。让下里巴人能欣赏阳春白雪,这是作者写作的基本原则。

本书努力揭示算法的精髓。书中对绝大部分算法、例题都进行了建模分析、复杂度分析和对比分析,对它们的思路进行了本质上的解析,提纲挈领地揭示了它们的核心思想。

本书严谨、透彻地解析知识点。例如杜教筛、莫队算法,作者联系了这两个算法的发明人杜教、莫队,请他们审核了有关的内容。每个算法对应的中文名和英文名,也查阅了大量文献,争取采用权威的表述。本书所讲解的都是成熟的数据结构和算法,这些知识绝大多数都源自海外学者,有关的名词需要从外文翻译成中文。

为便于学习,作者为本书的每个小节录制了教学视频,对算法思路进行了精要的描述,视频总时长900分钟。此外,作者还提供了大量代码,对每个算法给出了模板代码,对经典问题和重要例题给出了完整代码;每行代码都经过仔细整理,争取成为“模板”,代码不多不少,也不缺少关键内容。

《算法竞赛》系列推文正在连载中,欢迎持续关注!

扫码优惠购书返回搜狐,查看更多

Copyright © 2088 世界杯预选赛中国_1994年世界杯冠军是谁 - nywk120.com All Rights Reserved.
友情链接
Top