算法设计与分析
定 价:¥38
中 教 价:¥29.26 (7.70折)
库 存 数: 0
丛 书 名:卓越工程师培养计划“十二五”规划教材
《算法设计与分析:C++语言描述(第2版)》为普通高等教育“十一五”国家级规划教材。 本书内容分为3部分:算法和算法分析、算法设计策略及求解困难问题。第1部分介绍问题求解方法、算法复杂度和分析、递归算法和递推关系;第2部分讨论常用的算法设计策略:基本搜索和遍历方法、分治法、贪心法、动态规划法、回溯法和分枝限界法;第3部分介绍NP完全问题、随机算法、近似算法和密码算法。书中还介绍了两种新的数据结构:跳表和伸展树,以及它们特定的算法分析方法,并对现代密码学做了简要论述。 本书结构清晰、内容翔实、逻辑严谨、深入浅出。书中算法有完整的C++程序,程序构思精巧,且有详细注释。所有程序都已在VC++环境下编译通过并能正确运行,它们既是学习算法设计的示例,也能使复杂抽象的算法设计更易为学习者理解和掌握。书中包含大量实例和图示,并附丰富的习题,便于自学。
第1部分 算法和算法分析第1章 算法问题求解基础1.1 算法概述1.1.1 什么是算法1.1.2 为什么学习算法1.2 问题求解方法1.2.1 问题和问题求解1.2.2 问题求解过程1.2.3 系统生命周期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 递归算法示例1.4.3 归纳证明本章小结习题1第2章 算法分析基础2.1 算法复杂度2.1.1 什么是好的算法2.1.2 影响程序运行时间的因素2.1.3 算法的时间复杂度2.1.4 使用程序步分析算法2.1.5 算法的空间复杂度2.2 渐近表示法2.2.1 大O记号2.2.2 记号2.2.3 记号2.2.4 小o记号2.2.5 算法按时间复杂度分类2.3 递推关系2.3.1 递推方程2.3.2 替换方法2.3.3 迭代方法2.3.4 主方法2.4 分摊分析2.4.1 聚集方法2.4.2 会计方法2.4.3 势能方法本章小结习题2第3章 伸展树与跳表3.1 伸展树3.1.1 二叉搜索树3.1.2 自调节树和伸展树3.1.3 伸展操作3.1.4 伸展树类3.1.5 旋转的实现3.1.6 插入运算的实现3.1.7 分摊分析3.2 跳表3.2.1 什么是跳表3.2.2 跳表类3.2.3 级数分配3.2.4 插入运算的实现3.2.5 性能分析本章小结习题3第2部分 算法设计策略第4章 基本搜索和遍历方法4.1 基本概念4.2 图的搜索和遍历4.2.1 搜索方法4.2.2 邻接表类4.2.3 广度优先搜索4.2.4 深度优先搜索4.3 双连通分量4.3.1 基本概念4.3.2 发现关节点4.3.3 构造双连通图4.4 与或图4.4.1 问题分解4.4.2 判断与或树是否可解4.4.3 构建解树本章小结习题4第5章 分治法5.1 一般方法5.1.1 分治法的基本思想5.1.2 算法分析5.1.3 数据结构5.2 求最大最小元5.2.1 分治法求解5.2.2 时间分析5.3 二分搜索5.3.1 分治法求解5.3.2 对半搜索5.3.3 二叉判定树5.3.4 搜索算法的时间下界5.4 排序问题5.4.1 合并排序5.4.2 快速排序5.4.3 排序算法的时间下界5.5 选择问题5.5.1 分治法求解5.5.2 随机选择主元5.5.3 线性时间选择算法5.5.4 时间分析5.5.5 允许重复元素的选择算法5.6 斯特拉森矩阵乘法5.6.1 分治法求解5.6.2 斯特拉森分治法本章小结习题5第6章 贪心法6.1 一般方法6.2 背包问题6.2.1 问题描述6.2.2 贪心法求解6.2.3 算法正确性6.3 带时限的作业排序6.3.1 问题描述6.3.2 贪心法求解6.3.3 算法正确性6.3.4 可行性判定6.3.5 作业排序贪心算法6.3.6 一种改进算法6.4 最佳合并模式6.4.1 问题描述6.4.2 贪心法求解6.4.3 算法正确性6.5 最小代价生成树6.5.1 问题描述6.5.2 贪心法求解6.5.3 普里姆算法6.5.4 克鲁斯卡尔算法6.5.5 算法正确性6.6 单源最短路径6.6.1 问题描述6.6.2 贪心法求解6.6.3 迪杰斯特拉算法6.6.4 算法正确性6.7 磁带最优存储6.7.1 单带最优存储6.7.2 多带最优存储6.8 贪心法的基本要素6.8.1 最优量度标准6.8.2 最优子结构本章小结习题6第7章 动态规划法7.1 一般方法和基本要素7.1.1 一般方法7.1.2 基本要素7.1.3 多段图问题7.1.4 资源分配问题7.1.5 关键路径问题7.2 每对结点间的最短路径7.2.1 问题描述7.2.2 动态规划法求解7.2.3 弗洛伊德算法7.2.4 算法正确性7.3 矩阵连乘7.3.1 问题描述7.3.2 动态规划法求解7.3.3 矩阵连乘算法7.3.4 备忘录方法7.4 最长公共子序列7.4.1 问题描述7.4.2 动态规划法求解7.4.3 最长公共子序列算法7.4.4 算法的改进7.5 最优二叉搜索树7.5.1 问题描述7.5.2 动态规划法求解7.5.3 最优二叉搜索树算法7.6 0/1背包7.6.1 问题描述7.6.2 动态规划法求解7.6.3 0/1背包算法框架7.6.4 0/1背包算法7.6.5 性能分析7.6.6 使用启发式方法7.7 流水作业调度7.7.1 问题描述7.7.2 动态规划法求解7.7.3 Johnson算法本章小结习题7第8章 回溯法8.1 一般方法8.1.1 基本概念8.1.2 剪枝函数和回溯法8.1.3 回溯法的效率分析8.2 n-皇后8.2.1 问题描述8.2.2 回溯法求解8.2.3 n-皇后算法8.2.4 时间分析8.3 子集和数8.3.1 问题描述8.3.2 回溯法求解8.3.3 子集和数算法8.4 图的着色8.4.1 问题描述8.4.2 回溯法求解8.4.3 图着色算法8.4.4 时间分析8.5 哈密顿环8.5.1 问题描述8.5.2 哈密顿环算法8.6 0/1背包8.6.1 问题描述8.6.2 回溯法求解8.6.3 限界函数8.6.4 0/1背包算法8.7 批处理作业调度8.7.1 问题描述8.7.2 回溯法求解8.7.3 批处理作业调度算法本章小结习题8第9章 分枝限界法9.1 一般方法9.1.1 分枝限界法概述9.1.2 LC分枝限界法9.1.3 15谜问题9.2 求最优解的分枝限界法9.2.1 上下界函数9.2.2 FIFO分枝限界法9.2.3 LC分枝限界法9.3 带时限的作业排序9.3.1 问题描述9.3.2 分枝限界法求解9.3.3 带时限作业排序算法9.4 0/1背包9.4.1 问题描述9.4.2 分枝限界法求解9.4.3 0/1背包算法9.5 旅行商问题9.5.1 问题描述9.5.2 分枝限界法求解9.6 批处理作业调度9.6.1 问题描述9.6.2 分枝限界法求解9.6.3 批处理作业调度算法本章小结习题9第3部分 求解困难问题第10章 NP完全问题10.1 基本概念10.1.1 不确定算法和不确定机10.1.2 可满足性问题10.1.3 P类和NP类问题10.1.4 NP难度和NP完全问题10.2 Cook定理和证明10.2.1 Cook定理10.2.2 简化的不确定机模型10.2.3 证明Cook定理10.3 一些典型的NP完全问题10.3.1 最大集团10.3.2 顶点覆盖