编辑推荐
一本算法竞赛大全,全面深入解析算法专题、数据结构、模板代码。10个专题,330个知识点,102个章节视频讲解。本书解析了算法竞赛考核的数据结构、算法;组织了每个知识点的理论解析和经典例题;给出了简洁精要的模板代码;通过明快清晰的文字、透彻的图解,实现了较好的易读性。
内容简介
本书是一本全面、深入解析与算法竞赛有关的数据结构、算法、代码的计算机教材。
本书包括十个专题: 基础数据结构、基本算法、搜索、高级数据结构、动态规划、数论和线性代数、组合数学、计算几何、字符串和图论。本书覆盖了绝大多数算法竞赛考点。
本书解析了算法竞赛考核的数据结构、算法; 组织了每个知识点的理论解析和经典例题; 给出了简洁、精要的模板代码; 通过明快清晰的文字、透彻的图解,实现了较好的易读性。
本书的读者对象是参加算法竞赛的中学生和大学生、准备面试IT企业算法题的求职者、需要提高算法能力的开发人员,以及对计算机算法有兴趣的广大科技工作者。
目录
源码下载
第1章基础数据结构
1.1链表
1.1.1动态链表
1.1.2静态链表
1.1.3STL list
1.2队列
1.2.1STL queue
1.2.2手写循环队列
1.2.3双端队列和单调队列
1.2.4优先队列
1.3栈
1.3.1STL stack
1.3.2手写栈
1.3.3单调栈
1.4二叉树和哈夫曼树
1.4.1二叉树的概念
1.4.2二叉树的遍历
1.4.3哈夫曼树和哈夫曼编码
1.5堆
1.5.1二叉堆的概念
1.5.2二叉堆的操作
1.5.3二叉堆的手写代码
1.5.4堆和priority_queue
小结
第2章基本算法
2.1算法复杂度
2.1.1算法的概念
2.1.2复杂度和大O记号
2.2尺取法
2.2.1尺取法的概念
2.2.2反向扫描
2.2.3同向扫描
2.3二分法
2.3.1二分法的理论背景
2.3.2整数二分
2.3.3实数二分
2.4三分法
2.4.1原理
2.4.2实数三分
2.4.3整数三分
2.5倍增法与ST算法
2.5.1倍增法
2.5.2ST算法
2.6前缀和与差分
2.6.1一维差分
2.6.2二维差分
2.6.3三维差分
2.7离散化
2.7.1离散化的概念
2.7.2离散化手工编码
2.7.3用STL函数实现离散化
2.7.4离散化的应用
2.8排序与排列
2.8.1排序函数
2.8.2排列
2.9分治法
2.9.1汉诺塔和快速幂
2.9.2归并排序
2.9.3快速排序
2.10贪心法与拟阵
2.10.1贪心法
2.10.2拟阵
小结
第3章搜索
3.1BFS和DFS基础
3.1.1搜索简介
3.1.2搜索算法的基本思路
3.1.3BFS的代码实现
3.1.4DFS的常见操作和代码框架
3.1.5BFS和DFS的对比
3.1.6连通性判断
3.2剪枝
3.2.1BFS判重
3.2.2剪枝的应用
3.3洪水填充
3.4BFS与最短路径
3.5双向广搜
3.5.1双向广搜的原理和复杂度分析
3.5.2双向广搜的两种实现
3.5.3双向广搜例题
3.6BFS与优先队列
3.7BFS与双端队列
3.8A*算法
3.8.1贪心最优搜索和Dijkstra算法
3.8.2A*算法的原理和复杂度
3.8.33种算法的对比
3.8.4h函数的设计
3.8.5A*算法例题
3.9IDDFS和IDA*
3.9.1IDDFS
3.9.2IDA*
小结
第4章高级数据结构
4.1并查集
4.1.1并查集的基本操作
4.1.2合并的优化
4.1.3查询的优化(路径压缩)
4.1.4带权并查集
4.2树状数组
4.2.1树状数组的概念和基本编码
4.2.2树状数组的基本应用
4.2.3树状数组的扩展应用
4.3线段树
4.3.1线段树的概念
4.3.2区间查询
4.3.3区间操作与LazyTag
4.3.4线段树的基础应用
4.3.5区间最值和区间历史最值
4.3.6区间合并
4.3.7扫描线
4.3.8二维线段树(树套树)
4.4可持久化线段树
4.4.1可持久化线段树的思想
4.4.2区间第k大/小问题
4.4.3其他经典问题
4.5分块与莫队算法
4.5.1分块
4.5.2基础莫队算法
4.5.3带修改的莫队算法
4.5.4树上莫队
4.6块状链表
4.7简单树上问题
4.7.1树的重心
4.7.2树的直径
4.8LCA
4.8.1倍增法求LCA
4.8.2Tarjan算法求LCA
4.8.3LCA的应用
4.9树上的分治
4.9.1静态点分治
4.9.2动态点分治
4.10树链剖分
4.10.1树链剖分的概念与LCA
4.10.2树链剖分的典型应用
4.11二叉查找树
4.12替罪羊树
4.12.1不平衡率
4.12.2替罪羊树的操作
4.12.3例题
4.13Treap树
4.13.1Treap树的性质
4.13.2基于旋转法的Treap树操作
4.14FHQ Treap树
4.14.1FHQ的基本操作
4.14.2FHQ Treap树的应用
4.15笛卡儿树
4.15.1笛卡儿树的概念
4.15.2用单调栈建笛卡儿树
4.15.3笛卡儿树和RMQ问题
4.16Splay树
4.16.1Splay旋转
4.16.2Splay树的平摊分析
4.16.3Splay树的常用操作和代码
4.17KD树
4.17.1从空间到二叉树的转换
4.17.2KD树的概念和基本操作
4.17.3寻找最近点
4.17.4区间查询
4.18动态树与LCT
4.18.1LCT的思想
4.18.2从原树到辅助树
4.18.3LCT的存储和性质
4.18.4LCT的操作
4.18.5LCT的基本应用
小结
第5章动态规划
5.1DP概念和编程方法
5.1.1DP的概念
5.1.2DP的两种编程方法
5.1.3DP的设计和实现
5.1.4滚动数组
5.2经典线性DP问题
5.3数位统计DP
5.3.1数位统计DP的递推实现
5.3.2数位统计DP的记忆化搜索实现
5.3.3数位统计DP例题
5.4状态压缩DP
5.4.1引子
5.4.2状态压缩DP的原理
5.4.3状态压缩DP例题
5.4.4三进制状态压缩DP
5.5区间DP
5.5.1石子合并问题和两种模板代码
5.5.2区间DP例题
5.5.3二维区间DP
5.6树形DP
5.6.1树形DP的基本操作
5.6.2背包与树形DP
5.7一般优化
5.8单调队列优化
5.8.1单调队列优化的原理
5.8.2单调队列优化例题
5.9斜率优化/凸壳优化
5.9.1把状态转移方程变换为平面的斜率问题
5.9.2求一个dp[i]
5.9.3求所有dp[i]
5.9.4例题
5.10四边形不等式优化
5.10.1应用场合
5.10.2四边形不等式优化操作
5.10.3四边形不等式定义和单调性定义
5.10.4四边形不等式定理
5.10.5例题
小结
源码下载
第6章数论和线性代数
小结
第7章组合数学
第8章计算几何
小结
第9章字符串
小结
第10章图论
小结
附录APython在竞赛中的应用
A.1大数计算
A.2构造测试数据和对拍
A.2.1构造随机数据
A.2.2数据去重
A.2.3对拍
A.3输入/输出
索引
前言/序言
读者拿到这本书的第一感觉可能是: 这本书真厚。接下来他有点忐忑和疑惑: 这本书虽然厚,但是它有价值吗?它的内容和风格适合我吗?还有其他的一些问题。下面做一个详细的解答。
为什么学算法竞赛
算法竞赛是计算机相关竞赛中影响最大的分支。目前国内影响大的计算机算法类竞赛有全国青少年信息学奥林匹克竞赛(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银牌或金牌。这些奖牌是“高级队员”的标签,他们已经足够被称为“出色的程序员”,在就业市场上十分抢手。本书的高级部分能帮助他们进一步扩展知识点,增强计算思维。
本书的内容介绍
本书内容的难度涵盖了初级、中级、高级,下面对本书的章节按难度做一个划分。
章名初级中级高级
发货方式
自动:在特色服务中标有自动发货的商品,拍下后,源码类 软件类 商品会在订单详情页显示来自卖家的商品下载链接,点卡类 商品会在订单详情直接显示卡号密码。
手动:未标有自动发货的的商品,付款后,商品卖家会收到平台的手机短信、邮件提醒,卖家会尽快为您发货,如卖家长时间未发货,买家也可通过订单上的QQ或电话主动联系卖家。
退款说明
1、源码类:商品详情(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、功能不能正常使用等)!有演示站时,与实际源码不一致的(但描述中有"不保证完全一样、可能有少许偏差"类似显著公告的除外);
2、营销推广类:未达到卖家描述标准的;
3、点卡软件类:所售点卡软件无法使用的;
3、发货:手动发货商品,在卖家未发货前就申请了退款的;
4、服务:卖家不提供承诺的售后服务的;(双方提前有商定和描述中有显著声明的除外)
5、其他:如商品或服务有质量方面的硬性常规问题的。未符合详情及卖家承诺的。
注:符合上述任一情况的,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法修改描述!
注意事项
1、在付款前,双方在QQ上所商定的内容,也是纠纷评判依据(商定与商品描述冲突时,以商定为准);
2、源码商品,同时有网站演示与商品详情图片演示,且网站演示与商品详情图片演示不一致的,默认按商品详情图片演示作为纠纷评判依据(卖家有特别声明或有额外商定的除外);
3、点卡软件商品,默认按商品详情作为纠纷评判依据(特别声明或有商定除外);
4、营销推广商品,默认按商品详情作为纠纷评判依据(特别声明或有商定除外);
5、在有"正当退款原因和依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;
6、虽然交易产生纠纷的几率很小,卖家也肯定会给买家最完善的服务!但请买卖双方尽量保留如聊天记录这样的重要信息,以防产生纠纷时便于送码网快速介入处理。
送码声明
1、送码网作为第三方中介平台,依据双方交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;
2、非平台线上交易的项目,出现任何后果均与送码网无关;无论卖家以何理由要求线下交易的(如:要求买家支付宝转账付款的,微信转账付款的等),请联系管理举报,本平台将清退卖家处理。
正版 steam 原子之心 Atomic Heart 国区激活码 cd...
steam 英雄连3 国区激活码CDKEY PC游戏正版 Compan...
【骑砍中文站】PC 中文Steam 骑马与砍杀2 霸主 骑砍2 豪华版...
正版 steam 原子之心 Atomic Heart 国区激活码 cd...
M,日朋礼送男友老公创意实人用星人际机器蓝牙音箱走心情节生礼...
PC中文正版Steam 消逝的光芒2 消失的光芒2 Dying Lig...
Steam 女神异闻录5 皇家版 国区激活码CDKey秒发 Perso...
Steam怪物猎人崛起 曙光DLC 激活码cdkey 怪物猎人曙光 M...
steam 只狼 激活码CDKey 只狼影逝二度 Sekiro: Sh...
steam 女神异闻录5皇家版 国区激活码CDKey P5R 女神异闻...