华信教育资源网
算法设计与分析——C++语言描述(第3版)
作   译   者:陈慧南 出 版 日 期:2018-01-01
出   版   社:电子工业出版社 维   护   人:冉哲 
书   代   号:G0330540 I S B N:9787121330544

图书简介:

本书为普通高等教育“十一五”国家级规划教材。 本书内容分为3部分:算法和算法分析、算法设计策略、求解困难问题。第1部分介绍问题求解方法、算法复杂度和分析、递归算法和递推关系;第2部分讨论常用的算法设计策略:基本搜索和遍历方法、分治法、贪心法、动态规划法、回溯法和分枝限界法;第3部分介绍NP完全问题、随机算法、近似算法、遗传算法和密码算法,其中遗传算法是本次修订新增的内容。书中还介绍了两种新的数据结构:跳表和伸展树,以及它们特定的算法分析方法,并对现代密码学做了简要论述。
定价 49.0
您的专属联系人更多
配套资源 图书内容 样章/电子教材 图书评价
  • 配 套 资 源

    本书资源

    本书暂无资源

    会员上传本书资源

  • 图 书 内 容

    内容简介

    本书为普通高等教育“十一五”国家级规划教材。 本书内容分为3部分:算法和算法分析、算法设计策略、求解困难问题。第1部分介绍问题求解方法、算法复杂度和分析、递归算法和递推关系;第2部分讨论常用的算法设计策略:基本搜索和遍历方法、分治法、贪心法、动态规划法、回溯法和分枝限界法;第3部分介绍NP完全问题、随机算法、近似算法、遗传算法和密码算法,其中遗传算法是本次修订新增的内容。书中还介绍了两种新的数据结构:跳表和伸展树,以及它们特定的算法分析方法,并对现代密码学做了简要论述。

    图书详情

    ISBN:9787121330544
    开 本:16开
    页 数:316
    字 数:502.0

    本书目录

    目    录
    第1部分  算法和算法分析 
    第1章  算法问题求解基础	1
    1.1  算法概述	1
    1.1.1  什么是算法	1
    1.1.2  为什么学习算法	3
    1.2  问题求解方法	3
    1.2.1  问题和问题求解	4
    1.2.2  问题求解过程	4
    1.2.3  系统生命周期	5
    1.3  算法设计与分析	5
    1.3.1  算法问题求解过程	5
    1.3.2  如何设计算法	6
    1.3.3  如何表示算法	6
    1.3.4  如何确认算法	6
    1.3.5  如何分析算法	7
    1.4  递归和归纳	7
    1.4.1  递归	7
    1.4.2  递归算法示例	9
    1.4.3  归纳证明	11
    本章小结	12
    习题1	13
    第2章  算法分析基础	14
    2.1  算法复杂度	14
    2.1.1  什么是好的算法	14
    2.1.2  影响程序运行时间的因素	15
    2.1.3  算法的时间复杂度	16
    2.1.4  使用程序步分析算法	17
    2.1.5  算法的空间复杂度	18
    2.2  渐近表示法	19
    2.2.1  大O记号	19
    2.2.2  ?记号	20
    2.2.3  ?记号	21
    2.2.4  小o记号	21
    2.2.5  算法按时间复杂度分类	21
    2.3  递推关系	22
    2.3.1  递推方程	22
    2.3.2  替换方法	23
    2.3.3  迭代方法	23
    2.3.4  主方法	24
    2.4  分摊分析	25
    2.4.1  聚集方法	26
    2.4.2  会计方法	26
    2.4.3  势能方法	27
    本章小结	28
    习题2	28
    第3章  伸展树与跳表	30
    3.1  伸展树	30
    3.1.1  二叉搜索树	30
    3.1.2  自调节树和伸展树	30
    3.1.3  伸展操作	31
    3.1.4  伸展树类	32
    3.1.5  旋转的实现	34
    3.1.6  插入运算的实现	34
    3.1.7  分摊分析	36
    3.2  跳表	38
    3.2.1  什么是跳表	38
    3.2.2  跳表类	39
    3.2.3  级数分配	41
    3.2.4  插入运算的实现	42
    3.2.5  性能分析	43
    本章小结	44
    习题3	44
    
    
    第2部分  算法设计策略
    
    第4章  基本搜索和遍历方法	45
    4.1  基本概念	45
    4.2  图的搜索和遍历	46
    4.2.1  搜索方法	46
    4.2.2  邻接表类	47
    4.2.3  广度优先搜索	48
    4.2.4  深度优先搜索	50
    4.3  双连通分量	53
    4.3.1  基本概念	53
    4.3.2  发现关节点	54
    4.3.3  构造双连通图	57
    4.4  与或图	58
    4.4.1  问题分解	58
    4.4.2  判断与或树是否可解	59
    4.4.3  构建解树	61
    本章小结	62
    习题4	62
    第5章  分治法	64
    5.1  一般方法	64
    5.1.1  分治法的基本思想	64
    5.1.2  算法分析	65
    5.1.3  数据结构	66
    5.2  求最大最小元	67
    5.2.1  分治法求解	67
    5.2.2  时间分析	68
    5.3  二分搜索	69
    5.3.1  分治法求解	69
    5.3.2  对半搜索	70
    5.3.3  二叉判定树	71
    5.3.4  搜索算法的时间下界	73
    5.4  排序问题	74
    5.4.1  合并排序	74
    5.4.2  快速排序	76
    5.4.3  排序算法的时间下界	80
    5.5  选择问题	82
    5.5.1  分治法求解	82
    5.5.2  随机选择主元	82
    5.5.3  线性时间选择算法	84
    5.5.4  时间分析	86
    5.5.5  允许重复元素的选择算法	86
    5.6  斯特拉森矩阵乘法	87
    5.6.1  分治法求解	87
    5.6.2  斯特拉森分治法	88
    本章小结	88
    习题5	88
    第6章  贪心法	91
    6.1  一般方法	91
    6.2  背包问题	92
    6.2.1  问题描述	92
    6.2.2  贪心法求解	92
    6.2.3  算法正确性	94
    6.3  带时限的作业排序	95
    6.3.1  问题描述	95
    6.3.2  贪心法求解	95
    6.3.3  算法正确性	97
    6.3.4  可行性判定	97
    6.3.5  作业排序贪心算法	98
    6.3.6  一种改进算法	99
    6.4  最佳合并模式	102
    6.4.1  问题描述	102
    6.4.2  贪心法求解	103
    6.4.3  算法正确性	104
    6.5  最小代价生成树	105
    6.5.1  问题描述	105
    6.5.2  贪心法求解	105
    6.5.3  普里姆算法	106
    6.5.4  克鲁斯卡尔算法	109
    6.5.5  算法正确性	111
    6.6  单源最短路径	111
    6.6.1  问题描述	112
    6.6.2  贪心法求解	112
    6.6.3  迪杰斯特拉算法	112
    6.6.4  算法正确性	115
    6.7  磁带最优存储	116
    6.7.1  单带最优存储	116
    6.7.2  多带最优存储	117
    6.8   贪心法的基本要素	119
    6.8.1  最优量度标准	119
    6.8.2  最优子结构	119
    本章小结	120
    习题6	120
    第7章  动态规划法	122
    7.1  一般方法和基本要素	122
    7.1.1  一般方法	122
    7.1.2  基本要素	123
    7.1.3  多段图问题	123
    7.1.4  资源分配问题	126
    7.1.5  关键路径问题	127
    7.2  每对结点间的最短路径	129
    7.2.1  问题描述	129
    7.2.2  动态规划法求解	130
    7.2.3  弗洛伊德算法	131
    7.2.4  算法正确性	132
    7.3  矩阵连乘	132
    7.3.1  问题描述	132
    7.3.2  动态规划法求解	133
    7.3.3  矩阵连乘算法	134
    7.3.4  备忘录方法	136
    7.4  最长公共子序列	137
    7.4.1  问题描述	137
    7.4.2  动态规划法求解	137
    7.4.3  最长公共子序列算法	138
    7.4.4  算法的改进	140
    7.5  最优二叉搜索树	140
    7.5.1  问题描述	140
    7.5.2  动态规划法求解	141
    7.5.3  最优二叉搜索树算法	143
    7.6  0/1背包	144
    7.6.1  问题描述	144
    7.6.2  动态规划法求解	145
    7.6.3  0/1背包算法框架	147
    7.6.4  0/1背包算法	150
    7.6.5  性能分析	152
    7.6.6  使用启发式方法	153
    7.7  流水作业调度	154
    7.7.1  问题描述	154
    7.7.2  动态规划法求解	155
    7.7.3  Johnson算法	157
    本章小结	158
    习题7	158
    第8章  回溯法	160
    8.1  一般方法	160
    8.1.1  基本概念	160
    8.1.2  剪枝函数和回溯法	161
    8.1.3  回溯法的效率分析	163
    8.2  n-皇后	163
    8.2.1  问题描述	163
    8.2.2  回溯法求解	164
    8.2.3  n-皇后算法	165
    8.2.4  时间分析	166
    8.3  子集和数	167
    8.3.1  问题描述	167
    8.3.2  回溯法求解	167
    8.3.3  子集和数算法	168
    8.4  图的着色	170
    8.4.1  问题描述	170
    8.4.2  回溯法求解	170
    8.4.3  图着色算法	171
    8.4.4  时间分析	172
    8.5  哈密顿环	172
    8.5.1  问题描述	172
    8.5.2  哈密顿环算法	173
    8.6  0/1背包	174
    8.6.1  问题描述	174
    8.6.2  回溯法求解	174
    8.6.3  限界函数	175
    8.6.4  0/1背包算法	176
    8.7  批处理作业调度	178
    8.7.1  问题描述	178
    8.7.2  回溯法求解	178
    8.7.3  批处理作业调度算法	178
    本章小结	180
    习题8	180
    第9章  分枝限界法	182
    9.1  一般方法	182
    9.1.1  分枝限界法概述	182
    9.1.2  LC分枝限界法	184
    9.1.3  15谜问题	185
    9.2  求最优解的分枝限界法	187
    9.2.1  上下界函数	187
    9.2.2  FIFO分枝限界法	188
    9.2.3  LC分枝限界法	189
    9.3  带时限的作业排序	190
    9.3.1  问题描述	190
    9.3.2  分枝限界法求解	190
    9.3.3  带时限作业排序算法	191
    9.4  0/1背包	193
    9.4.1  问题描述	193
    9.4.2  分枝限界法求解	194
    9.4.3  0/1背包算法	195
    9.5  旅行商问题	197
    9.5.1  问题描述	197
    9.5.2  分枝限界法求解	198
    9.6  批处理作业调度	201
    9.6.1  问题描述	201
    9.6.2  分枝限界法求解	201
    9.6.3  批处理作业调度算法	202
    本章小结	205
    习题9	205
     
    第3部分  求解困难问题
     
    第10章  NP完全问题	207
    10.1  基本概念	207
    10.1.1  不确定算法和不确定机	208
    10.1.2  可满足性问题	210
    10.1.3  P类和NP类问题	211
    10.1.4  NP难度和NP完全问题	211
    10.2  Cook定理和证明	212
    10.2.1  Cook定理	212
    10.2.2  简化的不确定机模型	212
    10.2.3  证明Cook定理	214
    10.3  一些典型的NP完全问题	217
    10.3.1  最大集团	217
    10.3.2  顶点覆盖	218
    10.3.3  三元CNF可满足性	219
    10.3.4  图的着色数	220
    10.3.5  有向哈密顿环	221
    10.3.6  恰切覆盖	223
    10.3.7  子集和数	225
    10.3.8  分划问题	225
    本章小结	226
    习题10	226
    第11章  随机算法	228
    11.1  基本概念	228
    11.1.1  随机算法概述	228
    11.1.2  随机数发生器	228
    11.1.3  随机算法分类	228
    11.2  拉斯维加斯算法	229
    11.2.1  标识重复元素算法	229
    11.2.2  性能分析	230
    11.3  蒙特卡罗算法	231
    11.3.1  素数测试问题	231
    11.3.2  伪素数测试	231
    11.3.3  米勒-拉宾算法	232
    11.3.4  性能分析	233
    11.4  舍伍德算法	234
    11.4.1  随机快速排序算法	234
    11.4.2  舍伍德算法的其他应用	234
    本章小结	234
    习题11	235
    第12章  近似算法	236
    12.1  近似算法的性能	236
    12.1.1  基本概念	236
    12.1.2  绝对性能保证	236
    12.1.3  相对性能保证	237
    12.1.4  近似方案	238
    12.2  绝对近似算法	238
    12.2.1  最多程序存储问题	238
    12.2.2  NP难度绝对近似算法	239
    12.3  ?-近似算法	240
    12.3.1  顶点覆盖近似算法	240
    12.3.2  旅行商问题	241
    12.3.3  NP难度?-近似旅行商问题	242
    12.3.4  具有三角不等式性质的旅行商问题	243
    12.3.5  任务调度近似算法	244
    12.4  ?(n)-近似算法	247
    12.4.1  集合覆盖问题	247
    12.4.2  集合覆盖近似算法	247
    12.4.3  ln(n)-近似算法	248
    12.5  多项式时间近似方案	249
    12.5.1  任务调度近似方案	249
    12.5.2  多项式时间近似方案	251
    12.6  子集和数的完全多项式时间近似方案	251
    12.6.1  子集和数的指数时间算法	251
    12.6.2  完全多项式时间近似方案	252
    本章小结	254
    习题12	254
    第13章  遗传算法	256
    13.1  进化计算	256
    13.2  遗传算法的生物学基础	257
    13.3  遗传算法的基本思想	258
    13.4  基本遗传算法	259
    13.4.1  基本遗传算法构成要素	259
    13.4.2  基本遗传算法流程图	262
    13.5  遗传算法的特点和应用	262
    13.5.1  遗传算法的特点	262
    13.5.2  遗传算法的应用	263
    13.6  基本遗传算法实现方法	263
    13.6.1  数据结构	263
    13.6.2  主程序	264
    13.6.3  选择运算	264
    13.6.4  交叉运算	266
    13.6.5  变异运算	267
    13.7  旅行商问题	268
    13.7.1  排列编码	268
    13.7.2  目标函数和适应度函数	269
    13.7.3  锦标赛选择	269
    13.7.4  顺序交叉	269
    13.7.5  交换变异	271
    13.7.6  参数选择	272
    13.7.7  实例运行结果	272
    本章小结	272
    习题13	272
    第14章  密码算法	274
    14.1  信息安全和密码学	274
    14.1.1  信息安全	274
    14.1.2  什么是密码	274
    14.1.3  密码体制	275
    14.2  数论初步	276
    14.3  背包密码算法	277
    14.3.1  背包算法	277
    14.3.2  超递增背包	278
    14.3.3  由私人密钥产生公开密钥	279
    14.3.4  加密方法	279
    14.3.5  解密方法	279
    14.3.6  背包安全性	280
    14.4  RSA算法	280
    14.4.1  RSA算法概述	280
    14.4.2  RSA的安全性	281
    14.5  散列函数和消息认证	282
    14.5.1  散列函数	282
    14.5.2  散列函数结构	282
    14.5.3  消息认证	283
    14.6  数字签名	283
    14.6.1  RSA数字签名体制	283
    14.6.2  需仲裁的数字签名	284
    本章小结	284
    习题14	284
    附录A  专有名词中英文对照表	 285
    附录B  C++程序设计概要	 290
    参考文献	 304
    展开

    前     言

    再 版 前 言
    《算法设计与分析》一书自2006年出版以来,深受读者欢迎,在此表示衷心感谢。本教材是为高等学校计算机和其他相关专业本科高年级和研究生的“算法设计与分析”课程编写的。此次再版,增加了“遗传算法”一章,而将原第13章密码算法改为第14章。
    这是因为,遗传算法的应用领域越来越广泛,目前,遗传算法的应用范围已包括组合最优化、图像处理、模式识别、智能控制、神经网络、自动程序设计、机器学习、数据挖掘、人工生命和网络通信等许多领域。对于计算机专业的学生和计算机相关从业者而言,遗传算法应该成为必备知识,因而不一定要在学习人工智能相关课程时,才去了解此类算法。作为一种求解函数最优化和组合最优化的十分有用和有效算法,将其引入传统的“算法设计与分析”课程与其他算法知识一起讨论,非常自然且很有必要。
    随着遗传算法的深入研究以及与其他学科的相互融合,遗传算法有望在智能领域占有更加重要地位。作为进化计算的主要分支,作者希望新增的遗传算法知识能满足计算机专业学生和计算机相关从业者了解遗传算法,并进一步学习进化计算的需要。
    作者对第13章的编写保持了本书一贯的风格,对遗传算法中涉及的方法,书中同样给出了C++程序,程序代码都有详细注释,已在VC++环境下编译通过并能正确运行。
    作  者
    展开

    作者简介

    本书暂无作者简介
  • 样 章 试 读
  • 图 书 评 价 我要评论
华信教育资源网