首页 > 图书中心 > 算法竞赛

前言

前言

读者拿到这本书的第一感觉可能是: 这本书真厚。接下来他有点忐忑和疑惑: 这本书虽然厚,但是它有价值吗?它的内容和风格适合我吗?还有其他的一些问题。下面做一个详细的解答。

为什么学算法竞赛

算法竞赛是计算机相关竞赛中影响最大的分支。目前国内影响大的计算机算法类竞赛有全国青少年信息学奥林匹克竞赛(NOI)、国际大学生程序设计竞赛(ICPC)、中国大学生程序设计竞赛(CCPC)、蓝桥杯全国软件和信息技术专业人才大赛(软件类)、中国高校计算机大赛团体程序设计天梯赛等。每个竞赛每年的参赛者,少则几万人,多则十几万人。

在大学里,与算法竞赛相关的课程有“计算机程序设计”“数据结构与算法”“算法分析与设计”“程序阅读与编程实践”“算法与程序设计实践”“算法艺术与竞赛”等。

在算法竞赛中获奖有很多好处。在学校可以获得奖学金,保研时获得加分。毕业找工作时更有用,一张算法竞赛的获奖证书

是用人单位判断求职者能力的重要依据。算法竞赛受到学校、学生、用人单位的重视和欢迎。

学习和参加算法竞赛,是通往杰出程序员的捷径。竞赛的获奖者基本上都成长为出色的软件工程师,并且有很多人是IT公司的创业者。例如当前热门的自动驾驶公司小马智行的联合创始人兼CTO楼天城,是2009年ICPC全球总决赛第二名; 元戎启行公司的员工大多数是ICPC的金牌队员。

算法竞赛在以下几方面对IT人才培养起到了关键作用: 

(1) 编写大量代码。代码量直接体现了程序员的能力。比尔·盖茨说: “如果你想雇用一个工程师,看看他写的代码,就够了。如果他没写过大量代码,就不要雇用他。”Linus说: “Talk is cheap,show me the code.”大量编码是杰出程序员的基本功。算法竞赛队员想获奖,普遍需要写5万~10万行的代码。

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

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

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

为什么选用这本书

读者的期望总是很高的。

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

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

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

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

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

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

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

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

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

本书的内容介绍

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

章名初级中级高级

版权所有(C)2023 清华大学出版社有限公司 京ICP备10035462号 京公网安备11010802042911号

联系我们 | 网站地图 | 法律声明 | 友情链接 | 盗版举报 | 人才招聘