前言 关于本书 根据作者多年教学经验及实践,充分考虑教学难度和授课学时安排,本书在 《算法设计与分析——基于C++编程语言的描述》 的基础上,删减了穷举搜索、深度优先搜索、宽度优先搜索和线性规划问题等内容,整合精简了数论算法和计算几何算法。本书本着“易理解,重实用”的指导思想,以掌握算法设计与分析的基本概念和方法、拓展学生专业知识结构为宗旨,按照“算法思想—算法设计—构造实例—算法描述—算法分析—C++实战”的思路组织 内容,详细讲述了多种经典算法设计策略。纵观全书,这里并没有创造出任何新的算法,因为作者仅仅是希望通过对经典算法的讲解,把算法设计中基础且重要的内容用更清晰的思路、更直观的形式展现给读者。 本书结构 本书以算法策略为知识单元,共8章内容,其中第1章介绍算法的基础知识,第2~7章介绍经典的算法设计策略,第8章简单介绍了NP完全理论。具体结构安排如下: 第1章算法概述,主要介绍了算法的基本概念与描述方式、算法设计的一般过程、算法分析方法及递归等。 第2~5章介绍经典的算法设计策略: 贪心算法、分治算法、动态规划算法、回溯算法及分支限界算法。每种算法设计策略均按照算法思想、算法设计、构造实例、算法描述、算法分析、C++实战的思路来组织。 第6章随机化算法,讲述了四种类型的随机化算法,并结合实例讲述了每种类型随机化算法的特点。 第7章网络流算法,着重讲述网络流的基本概念及理论、求最大网络流的增广路算法、求最小费用最大流的消圈算法。 第8章NP完全理论,简单介绍了NP完全理论和近似算法,以引起读者进一步学习和研究的兴趣。 本书特点 本书侧重于算法步骤的设计、实例构造和编程实战,注重算法与数据结构的结合,以及算法时间效率分析。其特色在于针对 每种算法设计策略,按照算法思想设计了详细的算法步骤,构造了具体实例展现算法的执行过程,最后给出算法描述和编程实现 的完整源代码。 本书内容精炼,算法设计步骤清晰,实例构造详尽,算法描述清楚,源码完整,阅读材料丰富,易教、易学,适合高等学校计算机及其相关专业的学生、编程爱好者、各类想从事计算机编程工作的专业或非专业人士阅读。通过本书,读者一方面可以学习到基本的算法设计策略和分析方法; 另一方面,还可以对当今流行算法和算法界的大师有所了解。 本书配套资源丰富,包括教学大纲、教学课件、微课视频、程序代码、实验指导、测试题库等。 授课方法 1. 线上线下混合式教学 利用随书提供的微课视频和测试题库,教师可以布置线上学习任务,检测线上学习效果。线下课堂基于线上学习的情况,有针对性地答疑解惑,采用参与式学习策略,比如问题驱动、任务驱动等教学方法,教师引导,学生充分思考、讨论,寻求问题答案,完成课堂任务。 2. 注重运用前驱课程基本知识、基本原理 “算法”课程与“数学”“程序设计基础”“数据结构”等前驱课程紧密联系。在讲授本课程时,针对要解决的问题: ①要求学生审清题意,明确问题给定的已知数据、约束条件和求解目标; ②运用数学知识,引入数学符号表达已知数据、约束条件及求解目标,构建数学模型; ③训练计算思维,要求学生思考、讨论数学模型中的符号如何存储到计算机中,即采用什么数据结构存储数学模型中涉及的各种符号; ④选择贪心、分治、动态规划、搜索等一种或多种算法设计策略; ⑤分组任务,要求各小组根据选定的数据结构和算法策略设计求解问题的算法步骤,然后各组分享各自的设计成果,最后教师总结、追问引发更深层的思考; ⑥课下任务,以作业的形式,借助实践教学平台(如头歌)或刷题平台(如洛谷、力扣),选用各自擅长的程序设计语言,将课堂上设计的算法翻译成程序,完成实战训练。 3. 注重创新意识、创新精神、创新思维的训练 “算法”课程应注重应用创新和技术创新,在分析问题求解的思想、方法的基础上,从数据结构、算法设计策略、编程语言、具体操作等方面分析现有方法的优势与不足,发挥现有方法本身的优势,举一反三,创新应用; 针对现有方法自身的不足,开动脑筋,不断创新、创造,寻求其他更好的求解方法,让学生认识到人人可以创新,时时可以创新,处处可以创新。 4. 思政育人、价值塑造 “算法”课程中讲解的策略、思想、方法是人类智慧的结晶,蕴含着丰富的科学思想、技术创新、中华优秀传统文化。教师传道授业解惑时,通过算法名师、技术革新、工程伦理、前沿技术等揭示算法本身的思政属性,把知识传授、能力培养、价值塑造映射到教学的每个环节,实现“课程承载思政,思政寓于课程”的有机统一。通过潜移默化、循循善诱的方式,在不经意中实现“润物细无声”的育人目标。“算法”课程思政育人体系如下,仅供授课教师参考。 另外,要说明一下,书中出现的log均是以2为底的对数。 在此,谨向清华大学出版社负责本书编辑出版工作的全体人员和每位曾经关心和支持本书编写工作的各方面专家表示衷心的感谢。 由于编者水平有限,书稿虽几经修改,但仍难免有疏漏或不妥之处,欢迎广大读者和专家批评指正。 编者 2023年12月