前言

算法是软件设计和网络管理等重要技术的核心,其对计算机科学的发展有着重要的推动作用。高等院校开设算法设计相关课程的目的在于培养和提升学生分析并解决问题的能力,提高学生软件开发的水平与效率,进而激发学生主动思考解决问题的创新方法。

本书对各类算法的介绍深入浅出、通俗易懂,注重理论与实践相结合。为了适应高等院校的人才培养模式,本书各章均配套相关的实训内容,以增强学生学有所得和学有所用的体验,激发学生学习算法设计相关知识的兴趣。

1.章节结构

本书共包含7章内容。

第1章 概论:介绍了算法的基本概念,包括算法的含义、作用、特性、描述和设计步骤;此外,还介绍了算法分析的基本方法。

第2章 蛮力法:介绍了蛮力法的概念与特点,讨论了运用蛮力策略解决几类常见排序问题的设计思想,并介绍了与蛮力法相关的几个经典问题。

第3章 分治法:介绍了递归技术和分治法的基本思想,以及分治法在快速排序、二路归并排序和二分查找等问题中的应用。

第4章 贪心法:介绍了贪心法的基本思想,以及贪心法在哈夫曼树、最小生成树等中的应用,讨论了贪心法用于解决背包问题、田忌赛马问题和多机调度问题时的算法设计与实现。

第5章 动态规划法:介绍了动态规划法的基本知识,讨论了动态规划法用于解决斐波那契数列、数字塔问题和凑硬币问题等时的算法设计与实现。

第6章 回溯法:介绍了问题的解空间的概念和回溯法的基本思想,讨论了回溯法在背包问题等中的应用。

第7章 分支限界法:介绍了分支限界法的基本思想及应用方法,讨论了分支限界法在解决电路布线和任务分配等问题时的算法设计与实现。

2.本书特色

编者根据多年在算法教学过程中所积累的经验,编排本书时力求突出以下特色。

(1)理论难度适当、实训任务充实

针对高等院校教学的特点,本书理论内容的设计难度适宜,突出了实训内容的教学设计,以加强学生运用所学算法知识解决实际问题的意识与能力。

(2)案例分析翔实、易懂

为了让学生更好地体会书中算法的易学与易用性,本书给出了很多案例分析素材,并对它们进行了详细的讲解,以提高学生学习算法的兴趣,使学生能够更好地了解如何使用算法解决实际问题。

(3)注重问题导向的学习内容设计

本书将各种算法应用于多个有趣的现实问题的解决过程中,以问题为导向来促进学生思考并体会算法的精妙之处与用途,进而提升其学习效果。

(4)注重算法之间的共性与个性的比较

在不同算法的案例分析中,既有对各类算法解决相同问题的设计分析,也有对各类算法适宜解决问题的案例分析,这可使学生深刻体会所学算法间的相似与差异,从而更好地掌握各类算法的根本特点与使用场景。

本书由汪江桦与汤建国共同编著而成,其中,汪江桦编写了第1、3、4、7章,汤建国编写了第2、5、6章。

由于编者水平有限,书中不妥之处在所难免,故编者殷切希望广大读者及同行专家能够批评指正,并拨冗反馈所发现的不妥之处,以便编者尽快更正。编者E-mail:tjguo@126.com。

编者

2020年5月