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