新書推薦:
《
盗墓笔记之秦岭神树4
》
售價:HK$
57.3
《
战胜人格障碍
》
售價:HK$
66.7
《
逃不开的科技创新战争
》
售價:HK$
103.3
《
漫画三国一百年
》
售價:HK$
55.2
《
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
》
售價:HK$
82.8
《
粤行丛录(岭南史料笔记丛刊)
》
售價:HK$
80.2
《
岁月待人归:徐悲鸿自述人生艺术
》
售價:HK$
61.4
《
女人的中国医疗史:汉唐之间的健康照顾与性别
》
售價:HK$
103.8
|
編輯推薦: |
《算法竞赛入门经典训练指南(升级版)》是算法届大神刘汝佳所著信息学奥赛红宝书《算法竞赛入门经典》的拓展训练用书。
训练指南2021新版增补了大量ACMICPCNOINOIP的新知识点和新题型,优化了部分算法模板,扩增了分类专项练习题。
这是一本单书销售9万册,丛书销售35万册,连UVa线上评测系统创始人、ACMICPC国际指导委员Miguel A.Revilla都推荐的算法竞赛训练题集。
这是一本在程序员中家喻户晓、被大量学校广泛采作教材的算法竞赛经典之作。
这不是一本入门图书。想看懂它,需要你具备一定的算法基础。
这本书,如果你能独立完成大部分,你的算法能力完全能达到现今IT公司内程序员的中上水准。
这本书和《算法竞赛入门经典(第2版)》珠联璧合,相辅相成。它会像朋友和知己一样,同你一起探讨和研究问题,直至你打开算法之美的大门!
ACM入门经典,我们相见恨晚!!
|
內容簡介: |
《算法竞赛入门经典训练指南(升级版)》是《算法竞赛入门经典(第2版)》一书的重要补充,旨在补充原书中没有涉及或者讲解得不够详细的内容,从而构建一个更完整的知识体系。本书通过大量有针对性的题目,让抽象复杂的算法和数学具体化、实用化。 《算法竞赛入门经典训练指南(升级版)》共包括6章,分别为算法设计基础、数学基础、实用数据结构、几何问题、图论算法与模型以及更多算法专题。全书通过206道例题深入浅出地介绍了上述领域的各个知识点、经典思维方式以及程序实现的常见方法和技巧,并在章末给出了丰富的分类习题,供读者查漏补缺和强化学习效果。 《算法竞赛入门经典训练指南(升级版)》题目多选自近年来ACMICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点。书中还给出了所有重要的经典算法的完整程序,以及重要例题的核心代码,既适合选手自学,也方便院校和培训机构组织学生学习和训练。
|
關於作者: |
刘汝佳,2000年3月获得NOI2000全国青少年信息学奥林匹克竞赛一等奖。大一时获2001年ACMICPC国际大学生程序设计竞赛亚洲-上海赛区冠军和2002年世界总决赛银牌。2004年至今共为 ACMICPC亚洲赛区命题二十余道,担任6次裁判和2次命题总监,并应邀参加IOI和ACMICPC相关国际研讨会。曾出版《算法竞赛入门经典》《算法竞赛入门经典训练指南》《编程挑战》等畅销书。
陈锋,任职于厦门宇道信隆信息科技有限公司,担任技术总监职务,专注于人工智能以及算法技术在金融科技领域的应用。同时担任四川大学ACMICPC算法竞赛集训队特邀指导老师,榕阳编程NOI、NOIP指导教练。所带学员多次获得ICPC金银牌,进入NOI省队等。曾出版《算法竞赛入门经典训练指南》《算法竞赛入门经典习题与解答》《算法竞赛入门经典算法实现》等畅销书。
|
目錄:
|
第1章 算法设计基础 1
1.1 思维的体操 1
1.2 问题求解常见策略 14
1.3 高效算法设计举例 36
1.4 动态规划专题 55
1.5 小结与习题 71
1.5.1 问题求解策略 72
1.5.2 高效算法设计 80
1.5.3 动态规划 83
第2章 数学基础 86
2.1 基本计数方法 86
2.2 递推关系 92
2.3 数论 101
2.3.1 基本概念 102
2.3.2 模方程 107
2.3.3 线性筛 113
2.3.4 积性函数与莫比乌斯反演 116
2.3.5 筛法求解积性函数 118
2.4 组合游戏 124
2.5 概率与数学期望 130
2.6 置换及其应用 135
2.7 矩阵和线性方程组 142
2.8 快速傅里叶变换(FFT) 154
2.9 数值方法 165
2.10 小结与习题 171
2.10.1 组合计数 173
2.10.2 数论 177
2.10.3 组合游戏 181
2.10.4 概率 183
2.10.5 置换 184
2.10.6 矩阵与线性方程组 186
2.10.7 快速傅里叶变换(FFT) 188
2.10.8 数值方法 189
第3章 实用数据结构 192
3.1 基础数据结构回顾 192
3.1.1 抽象数据类型(ADT) 192
3.1.2 优先队列 194
3.1.3 并查集 197
3.2 区间信息的维护与查询 199
3.2.1 二叉索引树(树状数组) 200
3.2.2 RMQ问题 202
3.2.3 线段树(1):点修改 204
3.2.4 线段树(2):区间修改 207
3.3 字符串(1) 219
3.3.1 Trie 219
3.3.2 KMP算法 222
3.3.3 Aho-Corasick自动机 225
3.4 字符串(2) 229
3.4.1 后缀数组 229
3.4.2 最长公共前缀(LCP) 233
3.4.3 基于哈希值的LCP算法 235
3.4.4 回文的Manacher算法 238
3.5 字符串(3) 240
3.5.1 后缀自动机的性质 241
3.5.2 后缀链接树(Suffix Link Tree) 241
3.5.3 后缀自动机的构造算法 242
3.6 排序二叉树 255
3.6.1 基本概念 255
3.6.2 用Treap实现名次树 258
3.6.3 用伸展树实现可分裂与合并的序列 266
3.7 树的经典问题与方法 270
3.8 动态树与LCT 289
3.9 离线算法 299
3.10 kd-Tree 312
3.11 可持久化数据结构 319
3.12 小结与习题 331
3.12.1 基础数据结构 332
3.12.2 区间信息维护 333
3.12.3 字符串算法 335
3.12.4 排序二叉树 338
3.12.5 树的经典问题与方法 339
3.12.6 动态树与LCT 342
3.12.7 离线算法 344
3.12.8 kd-Tree 347
3.12.9 可持久化数据结构 348
第4章 几何问题 351
4.1 二维几何基础 351
4.1.1 基本运算 352
4.1.2 点和直线 353
4.1.3 多边形 355
4.1.4 例题选讲 356
4.1.5 二维几何小结 359
4.2 与圆和球有关的计算问题 360
4.2.1 圆的相关计算 360
4.2.2 球面相关问题 366
4.3 二维几何常用算法 366
4.3.1 点在多边形内的判定 366
4.3.2 凸包 368
4.3.3 半平面交 372
4.3.4 平面区域 378
4.4 三维几何基础 382
4.4.1 三维点积 383
4.4.2 三维叉积 384
4.4.3 三维凸包 386
4.4.4 例题选讲 388
4.4.5 三维几何小结 392
4.5 小结与习题 393
4.5.1 基础题目 393
4.5.2 二维几何计算 395
4.5.3 几何算法 398
4.5.4 三维几何 403
第5章 图论算法与模型 408
5.1 基础题目选讲 408
5.2 深度优先遍历 411
5.2.1 无向图的割顶和桥 413
5.2.2 无向图的双连通分量 416
5.2.3 有向图的强连通分量 420
5.2.4 2-SAT问题 424
5.3 最短路问题 428
5.3.1 再谈Dijkstra算法 428
5.3.2 再谈Bellman-Ford算法 432
5.3.3 例题选讲 436
5.4 生成树相关问题 443
5.5 二分图匹配 447
5.5.1 二分图最大匹配 447
5.5.2 二分图最佳完美匹配 448
5.5.3 稳定婚姻问题 452
5.5.4 常见模型 455
5.6 网络流问题 457
5.6.1 最短增广路算法 457
5.6.2 最小费用最大流算法 462
5.6.3 建模与模型变换 464
5.6.4 例题选讲 467
5.7 小结与习题 472
5.7.1 基础知识和算法 472
5.7.2 DFS及其应用 472
5.7.3 最短路及其应用 476
5.7.4 最小生成树 477
5.7.5 二分图匹配 479
5.7.6 网络流 480
第6章 更多算法专题 484
6.1 轮廓线动态规划 484
6.2 嵌套和分块数据结构 490
6.3 暴力法专题 500
6.3.1 路径寻找问题 500
6.3.2 对抗搜索 505
6.3.3 精确覆盖问题和DLX算法 510
6.4 几何专题 516
6.4.1 仿射变换与矩阵 516
6.4.2 离散化和扫描法 518
6.4.3 运动规划 527
6.5 数学专题 529
6.5.1 小专题集锦 530
6.5.2 线性规划 532
6.6 浅谈代码设计与静态查错 533
6.6.1 简单的Bash 533
6.6.2 《仙剑奇侠传四》之最后的战役 542
6.7 小结与习题 548
6.7.1 轮廓线上的动态规划 548
6.7.2 数据结构综合应用 550
6.7.3 暴力法 557
6.7.4 几何专题 562
6.7.5 数学专题 567
6.7.6 代码组织与调试 569
附录 Java、C#和Python语言简介 575
主要参考书目 582
|
內容試閱:
|
许多计算机相关专业的人,毕业之后除了为应付面试外,基本都很少再去碰算法。而在实际的产品或者项目开发过程中,大多数人也没有必要亲自去实现复杂的算法。因此,算法渐渐淡出程序员的日常生活。同时,在现实生活中有另外一种声音:程序员的生活太纠结,coding的速度永远跟不上需求变化的速度,提需求的客户似乎成了程序员的天敌,成了他们苦逼生活的罪魁祸首。
那么,一本讲算法比赛的书跟这又有多少关系呢?就从我自身的经历说起吧。我不是计算机科班出身,但因种种原因进入了这个行业,而且是从一个很低的起点进入的。于是我像所有人一样,平时很难静下心来学习算法,有了面试就去临时抱本书突击一下。终于有一天我受不了了这种循环,我扪心自问:难道只有为了某个急功近利的目的我才愿意去付出自己的时间吗?佛家有句话叫凡夫求果,菩萨求因,我就想,既然成不了圣人,就学一回圣人吧。
因缘际会,我接触到了入门经典及其作者刘汝佳,于是一发不可收,写这本书的过程也变成了修行与学习的过程。慢慢地,我发现算法对于实际工作的人而言,有着比应付面试更大的价值。所谓的算法、组件、模式,就像是一些基础的原材料,对于优秀的建筑师来说,需要透彻地理解(不一定写得很熟练)它们的关键性。因为一个错误的设计,对于系统来说,所要付出的代价远比一般的程序bug要高得多。更进一步说,现在做软件的为什么苦,为什么抱怨需求变化快?因为解决问题的思维方式出现了偏差。需求分析绝对不是简单地拿着需求,直接翻译成代码这是最低层次的实现。算法分析的意义,更多地不在于性能,不在于那些脑筋急转弯,而在于发现纷繁复杂的问题背后的不变式,而这正是本书要着力与大家分享的地方。
2012年,《算法竞赛入门经典训练指南》第一版出版面市。时光荏苒,转眼间已过去8年时间。这些年间,竞赛界出现了很多新的知识点和题目类型;另外,在人工智能大潮的感召下,更多的学子参与到了算法竞赛中。为了能够为这些新增的知识点提供一些例题讲解以及习题练习,大概从两年前开始,笔者和刘汝佳老师开始考虑对本书进行增补。
我们对近些年来ACMICPC等信息学竞赛中新增的知识和点题型进行了仔细的斟酌和比对,通过多次筛选,挑选出了一些极具代表性的习题,增补到了原书中。这些习题基本都是ACMICPC各个区域比赛以及世界总决 赛的真题以及各国信息学竞赛中的真题,部分章节中几乎有一半习题被更新为最新题目。
具体来说,《算法竞赛入门经典训练指南》升级版新增的内容主要有:
第2章,补充了数学部分线性筛、莫比乌斯反演以及积性函数。将FFT放到第2章并且进行了扩写,并且增加了NTT以及FWT相关例题。
第3章,补充了字符串部分,主要是后缀自动机、Manacher字符串相关算法;倍增LCA、点分治、树链剖分等树上经典问题与方法;LCT的相关例题以及习题;离线算法,包括基于时间分治、整体二分、莫队;kd-Tree;可持久化数据结构,包括权值线段树、Trie、树状数组、Treap的可持久化版本。
第4章,补充了一道平面切割立方体的3D几何例题(LA 5808)。
第5章,完善了一些例题题解的描述。
第6章,补充了树分块和树上莫队等内容。
以上新增部分的内容提纲及题解审阅由刘汝佳老师完成,具体的题解及代码编写由陈锋完成。另外,为了提升读者的做题体验感,本书在牛客竞赛网上提供了各章节绝大多数题目的题单(扫描封底文泉云盘二维码,获取题单及其他资源下载方式),读者可以获得更好的提交速度以及体验。当然,读者也可以挑选自己薄弱的章节,有针对性地进行题目的练习。
|
|