首页 > 图书中心 >图书详情
蓝桥杯算法入门(Java)
作者:罗勇军、杨建国
丛书名:算法竞赛丛书
定价:99元
印次:1-1
ISBN:9787302673965
出版日期:2024.11.01
印刷日期:2024.10.22
"本书是蓝桥杯大赛软件类入门教程,详细讲解了蓝桥杯大赛软件类入门阶段的核心知识点,也是大赛必考和常考的知识点,包括数据结构、基本算法、搜索、数学、动态规划、图论等。 本书用大量的大赛真题作为例题,帮助读者巩固知识点的应用; 代码简洁精要,可作为比赛模板; 文字简洁明快,实现了较好的易读性。 本书适合正在学编程语言或刚学过编程语言,算法和数据结构零基础的算法竞赛初学者,帮助读者学习必备的知识点、建立计算思维、提高建模能力和编码能力; 本书也可用于其他算法竞赛(全国青少年信息学奥林匹克竞赛(NOI)、国际大学生程序设计竞赛(ICPC)、中国大学生程序设计竞赛(CCPC)、中国高校计算机大赛团体程序设计天梯赛等)的入门学习。 "
more >前言 经过十多年的发展,蓝桥杯大赛已经成为中国参赛人数最多、影响最大的计算机竞赛。在权威的全国普通高校学科竞赛排行榜上,蓝桥杯大赛名列其中,是广受欢迎的信息类专业竞赛。蓝桥杯大赛的奖牌是大学生计算机能力的有力证明。 本书读者对象 这是一本“算法入门”书,写给“正在学或刚学过编程语言,但是数据结构、算法零基础”的初学者。 本书的读者符合这样的画像: 刚学过编程语言,C/C++、Java、Python这几种语言中的任何一个都可以; 有基本的编码能力,语法比较熟悉; 编过一些代码,但仍然不熟练; 不懂数据结构和算法,遇到较难的问题没有思路。 这位勤奋的读者有以下目标: (1) 数据结构和算法入门,建立计算思维。 (2) 大量编码,提高编码能力。 (3) 参加蓝桥杯大赛并获奖。 如果读者准备参加蓝桥杯全国软件和信息技术专业人才大赛(软件类),看这本书正合适,因为题目大多是蓝桥杯大赛的真题,并且按照蓝桥杯大赛的要求进行了详细的解析。 本书也适用于准备其他算法竞赛,例如全国青少年信息学奥林匹克竞赛(NOI)、国际大学生程序设计竞赛(ICPC)、中国大学生程序设计竞赛(CCPC)、中国高校计算机大赛团体程序设计天梯赛等,因为所有的算法竞赛的考点都是相通的。 用一句话概括本书的作用: 通过本书的学习,读者可以从一名蓝桥杯、算法竞赛的小白,成长为掌握算法知识、建立算法思维、具备编码能力的专业的计算机编程人才。 本书内容介绍 蓝桥杯大赛软件赛是蓝桥杯大赛中参赛人数最多的项目,包括Java软件开发、C/C++程序设计、Python程序设计三个子项。蓝桥杯大赛软件赛是算法竞赛,考核数据结构和算法,包括数据结构、基本算法、搜索、动态规划、数学、图论、字符串等。掌握这些知识点是计算机专业人才的核心能力。 蓝桥杯大赛官方在2023年发布《蓝桥杯大赛软件赛知识点大纲》,按难度分为三部分: 大学C组、大学B组、研究生及大学A组。本书内容精选了其中初级(≥大学C组)和部分中级(≥大学B组)知识,都是必考或常考知识点。还有一些中级和高级知识点,因为难度较高,不适合在入门阶段学习,本书没有涉及。下表是蓝桥杯大纲与本书内容的对照。 本书内容与蓝桥杯大纲知识点对照 组别蓝桥杯大赛软件赛知识点大纲本书对应章节 大学 C组 枚举第2章 杂题和填空题 排序: 冒泡排序、选择排序、插入排序4.1 十大排序算法 搜索: BFS、DFS 6.1 DFS代码框架 6.2 DFS常见应用 6.5 BFS基本代码 6.6 BFS与最短路径 6.7 BFS判重 模拟 前缀和 二分 贪心 5.2 前缀和 5.3 差分 5.4 二分 5.5 贪心 DP: 普通一维问题 8.1 动态规划的概念 8.2 动态规划的两种编码方法 8.3 DP设计基础 高精度 (本书没有涉及) 数据结构: 栈、队列、链表、二叉树第3章 数据结构基础 数学: 素数、GCD、LCM、快速幂 7.1 模运算 7.2 快速幂 7.3 素数 7.4 GCD和LCM 大学 B组 排序: 归并排序、快速排序、桶排序、堆排序、基数排序 4.1 十大排序算法 搜索: 剪枝 6.3 DFS剪枝 搜索: 双向BFS、记忆化搜索、迭代加深搜索、启发式搜索 (本书没有涉及) DP: 背包DP 8.4 DP背包 DP: 树形DP、状压DP、数位DP、DP的常见优化 (本书没有涉及) 字符串: 哈希、kmp、manacher (本书没有涉及) 图论: 最小生成树、单源最短路 9.2 最短路径算法 9.3 最小生成树 图论: 欧拉回路、差分约束系统、拓扑排序、二分图匹配、图的连通性问题(割点、桥、强连通分量)、DFS序、最近共同祖先 (本书没有涉及) 数学: 排列组合 4.2 排序函数 4.3 排列和组合 数学: 二项式定理、容斥原理、模意义下的逆元、矩阵运算、高斯消元 (本书没有涉及) 数据结构: 并查集 3.8 并查集 数据结构: ST表、堆、树状数组、线段树、Trie树 (本书没有涉及) 计算几何(基础计算和基本位置关系判定); 概率论、博弈论 (本书没有涉及) 研究 生及 大学 A组 字符串(AC自动机、拓展kmp、后缀数组、后缀自动机、回文自动机); 图论(网络流、一般图匹配); 数学(生成函数、莫比乌斯反演、快速傅里叶变换); 数据结构(树链剖分、二维/动态开点线段树、平衡树、可持久化数据结构、树套树、动态树) (本书没有涉及) 由于蓝桥杯软件赛有三种语言,所以作者编写了三个版本: 《蓝桥杯算法入门(C/C++)》、《蓝桥杯算法入门(Java)》和《蓝桥杯算法入门(Python)》,形成一个系列。这三个版本对数据结构和算法的理论讲解相同,选用的例题大部分一样。不同的内容也很多,例如C/C++的STL、Java的类、Python的字符和日期库,例题用各自的语言给出模板代码。 目前出版的算法竞赛书籍中,代码绝大部分都是用C/C++语言写的,极少有其他语言的版本。因此,本系列中的Java和Python版本填补了这一空白。 本书是Java版。Java组是参赛人数较多的组,约占总人数的五分之一。Java有丰富的类库,本书在多个章节中详解了它的应用,例如“3.1 Java常用功能”详解了常用的功能,如String类、BigInteger类、日期类、set、map; “3.3 链表、3.4 队列、3.5 优先队列、3.6 栈”介绍了Java的数据结构: “4.2 排序函数”介绍了Java的sort()函数。熟练掌握Java类库是竞赛队员必备的技能,能极大减少编码难度和编码时间。 为便于教学,本书提供教学课件、程序源码和400分钟的微课视频。 资源下载提示 教学课件: 扫描封底的“图书资源”二维码,在公众号“书圈”下载。 源码: 扫描目录上方的二维码下载。 微课视频: 扫描封底的文泉云盘防盗码,再扫描书中相应章节的视频讲解二维码,可以在线学习。 备赛经验 由于蓝桥杯的影响力,很多大学生在大一就会参加蓝桥杯软件赛,但是第一次参赛的新手往往铩羽而归。因为蓝桥杯大赛是极为专业、全面考核计算机能力的计算机竞赛,它对编码能力、算法知识、计算思维、计算机建模的要求极高。 刚接触蓝桥杯大赛的学生往往有这样的困惑: 蓝桥杯大赛似乎很难、很花时间,不仅难以入门,而且学习成本很高,至少需要高强度学习半年以上才有可能得奖,然后再用一年甚至两年的勤奋学习,才能取得好成绩。每个读者都希望有一个性价比很高的学习方法: 学习时间尽量少,得奖尽量大!那么,阅读这本书是得奖的捷径吗?答案是薛定谔之猫: 是,也不是。 回答“是”。这本书指引了一条合适的、正确的蓝桥杯备赛之路,让读者少走弯路。本书包括了蓝桥杯省赛二等奖所需的知识点,讲解了大量的大赛真题,并列出了巩固知识点所需要的练习题。本书的章节是按照学习难度循序渐进地展开的,读者只需要按从前到后的顺序阅读即可。只要用心看书并大量做题,得奖有相当的保证。 回答“不是”。“捷径”往往是“艰难”的代名词,“捷径”往往更费力,正如爬山的捷径更陡峭、更费力一样。读者是否能走通这个捷径,取决于你花费的精力有多少。简单地说,算法竞赛没有轻松的学习方法,一切都是“硬”实力,没有花哨的投机取巧。 还有一点让低年级参赛者感到压力巨大: 竞赛涉及的知识点是“超纲”的,往往在大三、大四的专业课程中才会涉及,甚至很多知识点根本就不会在计算机专业的课程中出现,这些知识点中有一些是很基本的考点; 而且蓝桥杯软件赛不是那种短期培训就能迅速获得成绩的竞赛,如果等到大三或大四才参赛,已经来不及了。如何解决“超纲”问题?这就是本书的意义: 算法竞赛需要拓展大量课外的专业知识,很多拓展内容在本书中进行了详细介绍。当然,本书定位是“入门”,只拓展了部分知识,更全面的算法知识点解析请阅读作者的另一本书《算法竞赛》,这是一本算法大全,覆盖了95%的算法竞赛知识点。 在准备蓝桥杯大赛时,请注意以下几个重要问题。 (1) 刷题。 备赛需要大量做题,这是最重要的一条。只读理论、只看书,而不做题,学习效果只会略大于零,对知识点的理解无法转化为能编码解决问题的“硬实力”。刷多少题合适?本书介绍了算法竞赛中的常见初级和中级知识点,每个知识点做10~20题,总共做600题左右,这是蓝桥杯算法入门需要的最少做题量。 (2) 速度。 参加蓝桥杯大赛,编码速度极为重要。比赛时间只有4小时,非常紧张。编码速度决定了获奖的级别。如何提高编码速度?有以下技巧。 熟练掌握集成编译环境。把编译环境变成得心应手的工具。 快速读题。每道题需要建模后才能编码。快速读完题目并想出合适的算法,这需要经过大量的做题训练。训练的时候提高大脑的兴奋度,用最快的速度理解题目并建立计算机编码模型。 减少调试。写好程序后,争取能一次通过测试样例。为了减少调试,尽量使用不容易出错的方法,例如少用指针、多用静态数组、把逻辑功能模块化等,不要使用动态调试方法,不要使用单步跟踪、断点等调试工具。如果需要查看中间的运行结果,就在代码中的关键地方打印出调试信息。 使用库函数。如果题目涉及比较复杂的数据处理,用库函数可以大大减少编码量,而且能减少错误的发生。平时注意积累C/C++、Java、Python语言的库函数,并做到熟练应用。 (3)模板。 模板是某些数据结构、算法的标准代码。模板代码是计算机科学发展过程中凝练出的精华。 模板很有用,例如并查集模板、快速幂模板、埃氏筛模板等,需要牢记并熟练应用。学习经典算法时,需要整理代码模板并多次学习和使用它。 有的算法竞赛可以带纸质资料进场,相当于开卷考试,例如ICPC、CCPC,很多竞赛队员带了厚厚的打印代码和各种书籍进场参赛。但是蓝桥杯大赛禁止带任何资料进场,是闭卷考试,完全靠脑力,需要记住模板。这增加了一些难度。 有初学者问: 我想速成,来不及做很多题,不过我可以多准备一些模板,把模板背会,是不是也能获奖?回答是: 模板有用且需要掌握,但赛场上模板的用处有限。不同的编程题目,即使用到相同的算法或数据结构,也往往不能用同样的代码,而需要做很多修改,因为不同环境下的变量和数据规模是不同的。对模板的学习和使用,需要多花一些时间,融会贯通,不能急躁。注意,模板的代码需要自己真正理解、熟练掌握并多次使用过,才能在做题的时候快速应用到编码中。 最后用一段话寄语读者。教育的目的是什么?英国教育家怀特海说: “学生是有血有肉的人,教育的目的是激发和引导他们的自我发展之路。”算法竞赛就是促进学生自我发展的一条康庄大道。大学的创新学习有三条途径,缺一不可: 一是以竞促学; 二是以研促学; 三是以创促学。参加算法竞赛,好处体现在很多方面: 保研、奖学金、考研、就业、出国、创新学分。本书将帮助你掌握算法竞赛必备知识,建立计算思维,提高编程能力,在算法竞赛中披荆斩棘,立于不败之地。 罗勇军杨建国 2024年8月于上海
more >