《21世纪高等学校规划教材·计算机科学与技术:算法设计与分析》是普通本科高校计算机专业核心课程“算法设计与分析”的教材。本着“易理解,重实用”的指导思想,结合多年的教学经验,以算法设计策略为主线,沿着“算法思想—算法设计—构造实例—算法描述—算法分析”的思路来组织教材内,系统介绍了算法的设计方法和分析技巧。主要内容包括:算法及基础知识、贪心法、分治法、动态规划、搜索法、随机化算法、线性规划问题与网络流、数论算法及计算几何算法和NP完全理论。为突出教材的可读性、可用性及前沿性,每章增设了教学目标、阅读材料及习题解析。
《21世纪高等学校规划教材·计算机科学与技术:算法设计与分析》内容丰富、思路清晰、实例讲解详细、图例直观形象,适合作为计算机及其相关专业的本科生教材,也可供工程技术人员和自学读者学习参考。此外,也适合作为参加ACM程序设计大赛的爱好者的参考书或培训教材。
《21世纪高等学校规划教材·计算机科学与技术:算法设计与分析》侧重于算法步骤的设计及实例构造,注重算法与数据结构的结合、算法时间效率分析。其特色在于针对每一种算法设计策略,按照算法思想设计了详细的算法步骤,构造了具体实例以展现算法的详细演示过程,最后给出算法描述。《21世纪高等学校规划教材·计算机科学与技术:算法设计与分析》内容精练,算法设计步骤清晰,实例构造详尽,算法描述的注释清楚,阅读材料丰富,易教、易学。
一、 关于本书
本书是在结合作者多年教学经验及实践的基础上编写而成的。它充分考虑了学生的接受能力,本着“易理解,重实用”的指导思想,以掌握算法设计与分析的基本概念和方法、拓展学生专业知识结构为宗旨,按照“算法思想→算法设计→构造实例→算法描述→算法分析”的思路来组织本书内容,详细讲述了多种经典算法设计策略。纵观全书,这里并没有创造出任何新的算法,因为作者仅仅是希望通过对经典算法的讲解,把算法设计与分析中基础且重要的内容用更清晰的思路、更直观的形式展现给读者。
二、 本书结构
本书以算法策略为知识单元,共9章内容,其中第1章介绍基础知识,第2~8章介绍经典的算法设计策略,第9章简单介绍了NP完全理论。具体结构安排如下:
第1章: 算法及基础知识。主要介绍算法设计与分析的基础知识、递归、常用的数据结构及数学公式等。
第2~5章介绍经典的算法设计策略: 贪心法、分治法、动态规划、搜索法等。每一种算法设计策略均按照算法思想、算法设计、构造实例、算法描述、算法分析的思路详细讲解。
第6章: 随机化算法。讲述了4种类型的随机化算法,并结合实例讲述了每种类型随机化算法的特点。
第7章: 线性规划问题与网络流。着重讲述线性规划问题的标准化及单纯形算法、网络流的基本概念及理论、求最大流的增广路算法、求最小费用流的消圈算法。
第8章: 数论算法及计算几何算法。数论算法中介绍了一些简单的数论理论知识及最大公约数、一次同余方程和同余方程组的算法; 计算几何算法中主要介绍叉积的概念和几何意义,进而利用它判断点与线段、线段与线段之间的关系; 解决凸包问题及最接近点对问题的两种算法的实现与比较。
第9章: NP完全理论。简单介绍了NP理论和近似算法,以引起读者进一步学习和研究的兴趣。
其中,第5、6、8章由南阳理工学院王秋芬编写,第1、2、3、7章由南阳理工学院吕聪颖编写,第4、9章由南阳理工学院徐艳群编写,习题解析的第1~4章由吕聪颖编写,第5~9章由王秋芬编写,吉林大学周春光教授负责全书的审阅工作。
三、 本书特点
本书侧重于算法步骤的设计及实例构造,注重算法与数据结构的结合、算法时间效率分析。其特色在于针对每一种算法设计策略,按照算法思想设计了详细的算法步骤,构造了具体实例以展现算法的详细演示过程,最后给出算法描述。
本书内容精练,算法设计步骤清晰,实例构造详尽,算法描述的注释清楚,阅读材料丰富,易教、易学。通过本书,读者一方面可以学习到基本的算法设计策略和分析方法; 另一方面,还可以对当今流行算法和算法界的大师有所了解。
在此,谨向清华大学出版社负责本书编辑出版工作的全体同仁和每一位曾经关心和支持本书编写工作的各方面专家表示衷心感谢。
由于编者水平有限,书稿虽几经修改,仍难免有疏漏或不妥之处,欢迎广大读者和专家批评指正。
编者
2011年6月
第1章 算法及基础知识
1.1 算法的基本概念
1.1.1 学习算法的重要性
1.1.2 算法的定义及特性
1.1.3 算法的描述方式
1.1.4 算法与程序的区别
1.2 算法设计的一般过程
1.3 算法分析
1.3.1 算法分析的概念
1.3.2 时间复杂性
1.3.3 空间复杂性
1.3.4 渐进复杂性态
1.3.5 算法复杂性的权衡考虑
1.4 递归
1.4.1 认知递归
1.4.2 n的阶乘
1.4.3 排列问题
1.4.4 递归算法的复杂性分析
1.5 基本的数据结构
1.5.1 顺序表与链表
1.5.2 栈与队列
1.5.3 树与图
1.5.4 集合
1.6常用数学公式
1.6.1 对数公式
1.6.2 组合公式
1.6.3 求和公式
1.6.4 向下取整和向上取整公式
阅读材料1--算法界十大名师简介
习题1
第2章 贪心法
2.1 概述
2.1.1 贪心法的基本思想
2.1.2 贪心法的基本要素
2.1.3 贪心法的解题步骤及算法设计模式
2.2 会场安排问题
2.3 单源最短路径问题
2.4 哈夫曼编码
2.5 最小生成树
2.5.1 Prim算法
2.5.2 Kruskal算法
2.5.3 两种算法的比较
阅读材料2--遗传算法
习题2
第3章 分治法
3.1 概述
3.1.1 分治法的基本思想
3.1.2 分治法的求解步骤
3.2 二分查找
3.3 循环赛日程表
3.4 合并排序
3.5 快速排序
阅读材料3--禁忌搜索算法
习题3
第4章 动态规划
4.1 概述
4.1.1 动态规划的基本思想
4.1.2 动态规划的求解步骤
4.1.3 动态规划的基本要素
4.2 矩阵连乘问题
4.3 凸多边形最优三角剖分
4.4 最长公共子序列问题
4.5 加工顺序问题
4.6 0-1背包问题
4.7最优二叉查找树
阅读材料4--模拟退火算法
习题4
第5章 搜索法
5.1 穷举搜索
5.2 深度优先搜索
5.3 回溯法
5.3.1 回溯法的算法框架及思想
5.3.2 子集树
5.3.3 排列树
5.3.4 满m叉树
5.4 宽度优先搜索
5.5 分支限界法
5.5.1 分支限界法的基本思想
5.5.2 0-1背包问题
5.5.3 旅行商问题
5.5.4 布线问题
5.5.5 分支限界法与回溯法的比较
阅读材料5--蚁群算法
习题5
第6章 随机化算法
6.1 概述
6.1.1 随机化算法的类型及特点
6.1.2 随机数发生器
6.2 数值随机化算法
6.2.1 计算π的值
6.2.2 计算定积分
6.3 蒙特卡罗算法
6.3.1 主元素问题
6.3.2 素数测试
6.4 拉斯维加斯算法
6.4.1 整数因子分解
6.4.2 n皇后问题
6.5 舍伍德算法
6.5.1 随机快速排序
6.5.2 线性时间选择
阅读材料6--粒子群优化算法
习题6
第7章 线性规划问题与网络流
7.1 概述
7.1.1 一般线性规划问题的描述
7.1.2 标准型线性规划问题的描述
7.1.3 标准型线性规划问题的单纯形算法
7.2 最大网络流
7.2.1 基本概念
7.2.2 增广路算法
7.2.3 最大网络流的变换与应用
7.3 最小费用最大流
7.3.1 基本概念
7.3.2 消圈算法
7.3.3 最小费用最大流的变换与应用
阅读材料7--捕食搜索算法
习题7
第8章 数论算法及计算几何算法
8.1 最大公约数
8.1.1 欧几里得算法
8.1.2 Stein算法
8.2 同余方程
8.3 同余方程组
8.4 线段相交
8.5 凸包问题
8.5.1 凸包问题的穷举搜索法
8.5.2 凸包问题的分治法
8.6 最接近点对问题
8.6.1 最接近点对问题的穷举搜索法
8.6.2 最接近点对问题的分治法
阅读材料8--动态进化算法
习题8
第9章 NP完全理论
9.1 易解问题和难解问题
9.2 P类和NP类问题
9.2.1 P类问题
9.2.2 NP类问题
9.2.3 P类问题和NP类问题的关系
9.3 NP完全问题
9.3.1 多项式变换技术
9.3.2 典型的NP完全问题
9.4 NP完全问题的近似算法
9.4.1 顶点覆盖问题
9.4.2 装箱问题
9.4.3 旅行商问题TSP
9.4.4 集合覆盖问题
阅读材料9--DNA计算
习题9
附录A 习题解析
第1章
第2章
第3章
第4章
第5章
第6章
第7章
第8章
第9章
参考文献