本书图文并茂、通俗易懂,详细讲解常用的算法知识,又融入大量的竞赛实例和解题技巧,可帮助读者熟练应用各种算法解决实际问题。
本书总计8章。第1章讲解STL,涉及双端队列、优先队列、位图、集合、映射和STL中的常用函数;第2章讲解实用的数据结构,涉及并查集、倍增、稀疏表、区间最值查询、最近公共祖先、树状数组和线段树;第3章讲解查找算法,涉及散列表、字符串模式匹配和字典树;第4章讲解平衡树,涉及树高与性能、平衡二叉搜索树、树堆和伸展树;第5章讲解图论提高方面的知识,涉及连通图与强连通图、桥与割点、双连通分量的缩点和Tarjan算法;第6章讲解图论算法,涉及最小生成树、最短路径、拓扑排序和关键路径;第7章讲解搜索算法提高方面的知识,涉及剪枝优化、嵌套广度优先搜索、双向广度优先搜索和启发式搜索;第8章讲解动态规划提高方面的知识,涉及树形动态规划、状态压缩动态规划和动态规划优化。
本书面向对算法感兴趣的读者,无论是想扎实内功或参加算法竞赛的学生,还是想进入名企的学生、求职者,抑或是想提升核心竞争力的在职人员,都可以参考本书。若读者想系统学习数据结构与算法,则可参考《算法训练营:入门篇》(全彩版)和《算法训练营:进阶篇》(全彩版)。
本书具有以下特色。
(1)完美图解,通俗易懂。本书对每个算法的基本操作都有全彩图解。通过图解,许多问题都变得简单,可迎刃而解。
(2)实例丰富,简单有趣。本书结合了大量竞赛实例,讲解如何用算法解决实际问题,使复杂难懂的问题变得简单有趣,可帮助读者轻松掌握算法知识,体会其中的妙处。
(3)深入浅出,透析本质。本书透过问题看本质,重点讲解如何分析和解决问题。本书采用了简洁易懂的代码,对数据结构的设计和算法的描述全面、细致,而且有算法复杂度分析及优化过程。
(4)实战演练,循序渐进。本书在讲解每个算法后都进行了实战演练,使读者在实战中体会算法的设计思路和使用技巧,从而提高独立思考、动手实践的能力。书中有丰富的练习题和竞赛题,可帮助读者及时检验对所学知识的掌握情况,为从小问题出发且逐步解决大型复杂性工程问题奠定基础。
(5)网络资源,技术支持。本书为读者提供了配套源码、课件、视频,并提供了博客、微信群、QQ群技术支持,可随时为读者答疑解惑。
作者简介
陈小玉
高级程序员,主要研究方向为算法优化和机器学习。出版著作有《趣学算法》《趣学数据结构》《算法训练营》,所教学生多次获得ACM-ICPC、蓝桥杯等算法竞赛奖项。
目前,信息技术已被广泛应用于互联网、金融、航空、军事、医疗等各个领域,未来的应用将更加广泛和深入。并且,很多中小学都开设了计算机语言课程,越来越多的中小学生对编程、算法感兴趣,甚至在NOIP、NOI等算法竞赛中大显身手,进入名校深造。对信息技术感兴趣的大学生通常会参加ACM-ICPC、CCPC、蓝桥杯等算法竞赛,其获奖者更是被各大名企所青睐。
学习算法,不仅可以帮助我们具备较强的思维能力及解决问题的能力,还可以帮助我们快速学习各种新技术,拥有超强的学习能力。
——写作背景——
很多读者都觉得算法太难,市面上晦涩难懂的各种教材更是“吓退”了一大批读者。实际上,算法并没有我们想象中那么难,反而相当有趣。
每当有学生说看不懂某个算法的时候,笔者就会建议其画图。画图是学习算法最好的方法,因为它可以把抽象难懂的算法展现得生动形象、简单易懂。笔者曾出版《算法训练营:海量图解+竞赛刷题》(入门篇)和《算法训练营:海量图解+竞赛刷题》(进阶篇),很多读者非常喜欢其中的海量图解,更希望看到这两本书的全彩版。经过一年的筹备,笔者对上述书中的所有图片都重新进行了绘制和配色,并精选、修改、补充和拆分上述书中的内容,形成了《算法训练营:入门篇》(全彩版)、《算法训练营:提高篇》(全彩版)和《算法训练营:进阶篇》(全彩版),本书就是其中的《算法训练营:提高篇》(全彩版)。在此衷心感谢各位读者的大力支持!
本书详细讲解常用的算法知识,还增加了STL的内容。本书不是知识点的堆砌,也不是粘贴代码而来的简单题解,而是将知识点讲解和对应的竞赛实例融会贯通,读者可以在轻松阅读本书的同时进行刷题实战,在实战中体会算法的妙处,感受算法之美。
——学习建议——
学习算法的过程,应该是通过大量实例充分体会遇到问题时该如何分析:用什么数据结构,用什么算法和策略,算法复杂度如何,是否有优化的可能,等等。这里有以下几个建议。
第1个建议:学经典,多理解。
算法书有很多,初学者最好选择图解较多的入门书,当然,也可以选择多本书,从多个角度进行对比和学习。先看书中的图解,理解各种经典问题的求解方法,如果还不理解,则可以看视频讲解,理解之后再看代码,尝试自己动手上机运行。如有必要,则可以将算法的求解过程通过图解方式展示出来,以加深对算法的理解。
第2个建议:看题解,多总结。
在掌握书中的经典算法之后,可以在刷题网站上进行专项练习,比如练习贪心算法、分治算法、动态规划等方面的题目。算法比数据结构更加灵活,对同一道题目可以用不同的算法解决,算法复杂度也不同。如果想不到答案,则可以看题解,比较自己的想法与题解的差距。要多总结题目类型及最优解法,找相似的题目并自己动手解决问题。
第3个建议:举一反三,灵活运用。
通过专项刷题做到“见多识广”,总结常用的算法模板,熟练应用套路,举一反三,灵活运用,逐步提升刷题速度,力争“bug free”(无缺陷)。
——本书特色——
本书具有以下特色。
(1)完美图解,通俗易懂。本书对每个算法的基本操作都有全彩图解。通过图解,许多问题都变得简单,可迎刃而解。
(2)实例丰富,简单有趣。本书结合了大量竞赛实例,讲解如何用算法解决实际问题,使复杂难懂的问题变得简单有趣,可帮助读者轻松掌握算法知识,体会其中的妙处。
(3)深入浅出,透析本质。本书透过问题看本质,重点讲解如何分析和解决问题。本书采用了简洁易懂的代码,对数据结构的设计和算法的描述全面、细致,而且有算法复杂度分析及优化过程。
(4)实战演练,循序渐进。本书在讲解每个算法后都进行了实战演练,使读者在实战中体会算法的设计思路和使用技巧,从而提高独立思考、动手实践的能力。书中有丰富的练习题和竞赛题,可帮助读者及时检验对所学知识的掌握情况,为从小问题出发且逐步解决大型复杂性工程问题奠定基础。
(5)网络资源,技术支持。本书为读者提供了配套源码、课件、视频,并提供了博客、微信群、QQ群技术支持,可随时为读者答疑解惑。
——建议和反馈——
写书是极其琐碎、繁重的工作,尽管笔者已经竭力使本书内容、网络资源和技术支持接近完美,但仍然可能存在很多漏洞和瑕疵。欢迎读者反馈关于本书的意见,因为这有利于我们改进和提高,以帮助更多的读者。如果对本书有意见和建议,或者有问题需要帮助,则都可以加入QQ群281607840,也可以致信rainchxy@126.com与笔者交流,笔者将不胜感激。
对于本书提供的读者资源,可参照本书封底的“读者服务”信息获取。
——致谢——
感谢笔者的家人和朋友在本书写作过程中提供的大力支持。感谢电子工业出版社工作严谨、高效的张国霞编辑,她的认真、负责促成了本书的早日出版。感谢中国计算机学会常务理事李轩涯老师的帮助。感谢码蹄集平台的大力支持。感谢提供了宝贵意见的同事们。感谢提供了技术支持的同学们。感恩遇到这么多良师益友!