前 言
计算机的普及极大地改变了人们的生活。目前,各行业、各领域都广泛采用了计算机信息技术,并由此产生出开发各种应用软件的需求。为了以最小的成本、最快的速度、最好的质量开发出适合各种应用需求的软件,必须遵循软件工程的原则。设计一个高效的程序不仅需要编程小技巧,更需要合理的数据组织和清晰高效的算法,这正是计算机科学领域数据结构与算法设计所研究的主要内容。
一些著名的计算机科学家在有关计算机科学教育的论述中认为,计算机科学是一种创造性思维活动,其教育必须面向设计。“计算机算法设计与分析”正是一门面向设计,且处于计算机学科核心地位的教育课程。通过对计算机算法系统的学习与研究,理解掌握算法设计的主要方法,培养对算法的计算复杂性正确分析的能力,为独立设计算法和对算法进行复杂性分析奠定坚实的理论基础,对每一位从事计算机系统结构、系统软件和应用软件研究与开发的科技工作者都是非常重要和必不可少的。
为了适应21世纪我国培养计算机各类人才的需要,本课程结合我国高等学校教育工作的现状,追踪国际计算机科学技术的发展水平,更新了教学内容和教学方法,以算法设计策略为知识单元,系统地介绍计算机算法的设计方法与分析技巧,以期为计算机专业的学生提供一个广泛扎实的计算机算法知识基础。本课程的教学改革实践取得了丰硕的成果,“算法与数据结构”课程被评为国家精品课程。
本书修正了第4版中发现的一些错误,并将各章的习题分为算法分析题和算法实现题两部分,增加了算法实践性内容,以期加强教学实践环节。
当今信息技术的发展已从传统的微软模式转变到谷歌模式,而谷歌模式的核心就是大数据和人工智能。它的学科覆盖面广、包容性强、应用需求空间巨大,已成为国际上公认的最具发展前景的学科之一。大数据和人工智能的兴起,对于大数据中的串和序列算法的要求越来越高。为了适应这种算法需求,应广大读者的要求,在第5版中增加了有关串和序列的算法内容。
全书共9章,具体如下。
第1章介绍算法的基本概念,并对算法的计算复杂性和算法的描述做了简要阐述。然后围绕算法设计常用的基本设计策略组织了第2~9章的内容。
第2章介绍递归与分治策略,它是设计有效算法最常用的策略,也是必须掌握的方法。
第3章介绍动态规划算法,以具体实例详述动态规划算法的设计思想、适用性及算法的设计要点。
第4章介绍贪心算法,它也是一种重要的算法设计策略,它与动态规划算法的设计思想有一定的联系,但其效率更高。按贪心算法设计出的许多算法能产生最优解。其中有许多典型问题和典型算法可供学习和使用。
第5章和第6章分别介绍回溯法和分支限界法。这两章所介绍的算法适合处理难解问题。其解题思想各具特色,值得学习和掌握。
第7章介绍随机化算法,对许多难解问题提供了高效的解决途径,是有很高实用价值的算法设计策略。
第8章介绍实用性很强的线性规划与网络流算法。许多实际应用问题可以转化为线性规划和网络流问题,并可用第8章中的算法有效求解。
第9章介绍在大数据和人工智能中有重要应用的串和序列的算法。
在本书各章的论述中,首先介绍一种算法设计策略的基本思想,然后从解决计算机科学和应用中的实际问题入手,由简到繁地描述几个经典的精巧算法。同时对每个算法所需的时间和空间进行分析,使读者既能学到一些常用的精巧算法,也能通过对算法设计策略的反复应用,牢固掌握这些算法设计的基本策略,以期收到融会贯通之效。在为各种算法设计策略选择用于展示其设计思想与技巧的具体应用问题时,本书有意重复选择某些经典问题,使读者能深刻体会到一个问题可以用多种设计策略求解。而且,通过对解同一问题的不同算法的比较,使读者更容易体会到每种算法的设计要点。随着本书内容的逐步展开,读者将进一步感受到综合应用多种设计策略可以更有效地解决问题。
本书采用面向对象的C++语言作为算法描述手段,在保持C++优点的同时,尽量使算法描述简明、清晰。为便于学习,每章的章首为学习要点提示,章末配有难易适度的习题,分为算法分析题和算法实现题两部分,以强化实践环节。为了便于教学,本书配套有《计算机算法设计与分析习题解答(第5版)》,免费提供电子课件,请任课教师登录到华信教育资源网http://www.hxedu.com.cn,注册后免费下载。结合国家精品课程建设,作者团队建立了“算法设计与分析”教学网站http://www.icourses.cn/sCourse/course_2535.html。欢迎广大读者访问教学网站,并提出宝贵意见,作者E-mail为wangxd@fzu.edu.cn。
在本书编写过程中,得到了全国高等学校计算机专业教学指导委员会的关心和支持。福州大学“211工程”计算机与信息工程重点学科实验室和福建工程学院为本书的写作提供了优良的设备和工作环境。傅清祥教授、吴英杰教授、傅仰耿博士和朱达欣教授参加了本书有关章节的讨论,对本书第5版的内容及各章节的编排提出了许多建设性意见。田俊教授认真审阅了全书。电子工业出版社负责本书编辑出版工作的全体同仁为本书的出版付出了大量辛勤的劳动,他们认真细致、一丝不苟的工作精神保证了本书的出版质量。在此,谨向每一位曾经关心和支持本书编写工作的各方面人士表示衷心的谢意!
由于作者的知识和写作水平有限,书稿虽几经修改,仍难免有缺点和错误。热忱欢迎同行专家和读者批评指正,使本书在使用中不断得到改进,日臻完善。
作 者