
前言
随着大数据时代的到来,数据挖掘、人工智能等与算法相关的词语已成为IT行业最流行的词汇。但是算法的设计与分析并不是最近才兴起的,它从计算机诞生之日起,就成为整个计算机领域研究的核心内容。小到加减乘除,大到数据挖掘、人工智能,都在算法的研究之列。市场对于算法方面的人才需求也是与日俱增的,为了满足这一需求,培养出优秀的软件研究与设计人才,绝大多数高校的计算机及相关专业都开设了算法设计与分析的课程,它早已成为计算机类专业及电子信息类专业的核心课程。
软件的效率和稳定性取决于软件中所采用的算法,对算法在资源消耗上的评估能够使研发人员客观地认识算法的本质特征,并做出相应的改善,这么重要的研究内容当然需要一本合适的书做指导。现在图书市场上与算法相关的书非常多,但是有“两极”分化的迹象:要么是“抽象”算法设计与分析,理论较多,缺少实践,初学者接受存在一定困难;要么是过多地关心算法实现,缺少设计与分析方面的描述,尤其是算法分析的内容,有些公式或复杂度凭空而出,令人摸不着头脑。大多数的算法教材关注了问题的特点、算法求解的方法,却忽略了读者如何能够更快地掌握算法设计与分析的技巧。尤其是利用数学工具对算法进行分析,找到算法的优缺点,确定适当的使用时机、应用场景及改进办法。针对这些情况,本书在汲取其他算法图书的优点的基础上,进行了改进。本书的特点体现在以下6个方面。
(1)每道例题都有问题分析、计算模型、算法设计与描述、算法分析四大环节,使读者容易形成学习与记忆规律,并能逐步培养读者在算法设计与分析方面严密的思维方式,改变随意拼凑的习惯。
(2)为了能够帮助读者初步建立算法分析体系,在正式讲解算法策略之前,本书详细介绍了算法效率分析基础(第2章)。从最简单的数指令条数开始,逐步上升到渐近复杂度分析及常用的数学公式,而且将抽象的数学知识与相应的算法片段相结合,让初学者能够更好地实践、更快地接受。
(3)全书各章均使用了第2章介绍的算法分析工具,它对每个经典例题都进行分析和适当地扩展。
(4)本书对一些经典例题在不同的章节用不同的算法策略及实现手段构建不同的解决方案,并进行分析,使读者能够更好地认清问题的本质,以及每种算法策略解决问题的特点、所适应的环境等,以读者更容易接受的“老问题、新解法”的方式展现。
(5)书中案例既包含各种算法策略中的经典例题,也包含了趣味性强、知识覆盖面广的例题,以提高读者的阅读兴趣,拓展读者的学习视野。
(6)每章开头都有本章内容导读,提醒读者学习的重点;章末还有本章总结,帮助读者梳理所学知识。每章的重难点内容还提供了微课视频,读者可扫描二维码查看相关视频。
本书通过对迭代法、蛮力法、分治法、回溯法与分支限界法、贪心算法、动态规划及随机算法中经典案例的讲解,由浅入深、循序渐进地帮助读者尽快掌握算法设计与分析的技巧,提高读者分析问题与设计算法的能力。
本书由张小东负责统稿,第1章由张小东和谷松林编写,第2章由张小东和张岩编写,第3章由张小东和李春山编写,第4、5、7章由张小东编写,第6章由张华编写,第8章由周学权编写,第9章由张小东和张维刚编写。
在本书的编写过程中,初佃辉教授在百忙之中审阅了全部初稿,并对本书提出了很多宝贵意见。在书稿的录入、校对及例题和课后习题的调试过程中,马帅、刘艺姝、张壹帆、崔杨、倪烨、过友辉、衣景龙、胡容舸、杨睿等同志做了大量的工作,在此对他们表示诚挚的感谢。
因编者水平有限,书中难免存在不足之处,恳请读者批评指正。欢迎读者给我们发送电子邮件,对本书提出宝贵意见。E-mail:z_xiaodong7134@163.com,zhua547@163.com。