您的浏览器不支持JavaScript,请开启后继续
算法设计与分析

算法设计与分析

  • 作者
  • 李梦雯 主编 李晓、洪留荣 副主编

本书以算法设计策略为知识单元,系统地介绍了算法设计与分析的概念和方法。全书内容包括算法的基本概念、排序及并查集算法、递归与分治策略、贪婪算法、动态规划算法、回溯法、分支与限界法、随机算法、NP完全问题等。本书从一些经典问题入手,分析如何求解问题,然后使用伪代码对问题的算法进行描述,最后对算法的时间复杂度进行分析。为了便于读者学习和实践,本书采用C语言对算法进行...


  • ¥69.00

ISBN: 978-7-122-39886-4

版次: 1

出版时间: 2022-01-01

图书介绍

ISBN:978-7-122-39886-4

语种:汉文

开本:16

出版时间:2022-01-01

装帧:平

页数:264

编辑推荐

1.本书内容全面系统,基本上涵盖了目前程序设计竞赛所要掌握的算法。 2.本书采用C语言对算法进行描述,可读性强。 3.书中有些问题采用不同算法进行求解,让读者体会算法的设计要点。

图书前言

在人工智能大数据时代的今天,各种应用软件被广泛使用,极大地影响了人们的工作和生活。这些软件都是按照特定的算法来予以实现的,算法性能的好坏决定了软件性能的高低。由于计算机的时间和空间资源有限,如何开发出运行时间快、内存占用少、符合人们需求的高质量软件,需要设计合理的数据组织和高效的算法,因此数据结构和算法是计算机科学的重要研究领域和基础性研究内容。
算法设计与分析是计算机专业学生必修的一门重要的专业基础课。通过对这门课程的学习,学生可以理解掌握算法设计的主要思想和方法,具有正确分析算法计算复杂性的能力,并能够利用这些方法解决实际问题。
全书共分为9章。
第1章介绍算法的基本概念及算法时间复杂性的分析方法,其中包括对算法最好情况、最坏情况、平均情况的分析以及递归算法的复杂性分析,是后续章节内容的基础。
第2章介绍排序及并查集算法。排序算法是计算机技术中最基本的算法,许多复杂的算法都会用到排序,本章介绍了几种常用排序算法的思想和原理。
第3章介绍递归与分治策略。作为一种简单有效的算法策略,分治法将大规模问题分解为若干小规模问题,递归求解,分而治之。
第4章介绍贪婪算法。贪婪算法是一种对某些求最优解问题的更简单、更迅速的设计技术。该算法在对问题求解时,通过贪婪策略,做出在当前看来最好的选择,得到某种意义上的局部最优解。
第5章介绍动态规划算法,该算法通常用于求解具有某种最优性质的问题。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,与分治法不同的是,动态规划分解得到的子问题往往不是互相独立的。
第6章和第7章分别介绍回溯法和分支与限界法。这两种都是搜索算法,通过对状态空间树的有效搜索,寻求问题的解。
第8章介绍随机算法。随机算法把随机性注入算法之中,改善了算法设计与分析的灵活性,提高了算法的解题能力。
第9章介绍NP完全问题。NP完全问题是世界七大数学难题之一,具有很高的实用价值。
本书在组织各章节内容时,首先介绍算法的基本思想,其次为了帮助读者更好地掌握算法设计的方法,从一些经典问题入手,分析如何求解问题,然后使用伪代码对问题的算法进行描述,最后对算法的时间复杂度进行分析。值得注意的是,本书中有些问题可以采用不同算法进行求解,读者应对不同方法进行比较,体会每种算法的设计要点。此外,每章内容后附有习题,以便读者能巩固所学的知识点。
本书第2章、第9章由洪留荣编写,第1章和第3~第5章由李梦雯编写,第6~第8章由李晓编写。本书的编写得到淮北师范大学计算机科学与技术学院的大力支持,作者在此表示衷心感谢。在编写本书过程中参考了大量的相关文献,对这些文献的作者表示真诚的感谢。由于作者的知识和写作水平有限,书中难免存在缺点和疏漏之处,热忱欢迎同行专家和读者批评指正。
本书得到安徽省高等学校省级质量工程项目“一流(品牌)专业计算机科学与技术”(编号:2018ylzy022)和安徽省高等学校省级质量工程项目“计算机类一流本科人才示范引领基地”(编号:2019rcsfjd044)资助。

编 者
2021年2月

精彩书摘

本书以算法设计策略为知识单元,系统地介绍了算法设计与分析的概念和方法。全书内容包括算法的基本概念、排序及并查集算法、递归与分治策略、贪婪算法、动态规划算法、回溯法、分支与限界法、随机算法、NP完全问题等。本书从一些经典问题入手,分析如何求解问题,然后使用伪代码对问题的算法进行描述,最后对算法的时间复杂度进行分析。为了便于读者学习和实践,本书采用C语言对算法进行描述,可读性强。每章内容后附有习题,便于读者复习巩固。
本书可作为高等院校计算机专业本科生和研究生的教材,也可作为希望进行算法学习和研究的相关人员的参考资料。

目录

第1章 算法的基本概念
1.1 算法的定义和特征	1
1.2 算法复杂性分析	3
1.3 渐进记号	5
1.4 最好情况、最坏情况和平均情况分析	10
1.5 递归算法分析	14
习题	20

第2章 排序及并查集算法
2.1 冒泡排序	24
2.2 选择排序	25
2.3 合并排序	26
2.3.1 merge算法	26
2.3.2 合并排序算法的具体内容	27
2.3.3 合并排序算法分析	30
2.4 堆及堆排序	30
2.4.1 堆的概念及性质	31
2.4.2 堆的操作	32
2.4.3 堆排序	39
2.4.4 堆排序的应用	40
2.5 桶排序	41
2.5.1 桶排序的基本步骤	41
2.5.2 桶排序的时间复杂度	43
2.6 基数排序	44
2.6.1 基数排序的基本思想	44
2.6.2 基数排序算法的实现	45
2.6.3 基数排序算法的合理性证明	47
2.6.4 基数排序的复杂度分析	47
2.6.5 基数排序的应用	48
2.7 并查集算法	48
习题	52

第3章 递归与分治
3.1 递归算法	54
3.1.1 递归算法的基本思想	55
3.1.2 递归算法实例	55
3.2 分治法	60
3.2.1 分治法的基本思想	60
3.2.2 分治法的步骤	63
3.2.3 应用分治法进行合并排序	64
3.2.4 快速排序	66
3.2.5 快速排序的改进	70
3.2.6 平面最近点对问题	71
3.2.7 BFPRT算法(TOP-K问题)	81
3.2.8 棋盘覆盖问题	84
习题	87

第4章 贪婪法
4.1 贪婪算法	89
4.2 贪婪法的设计思想	92
4.3 区间调度问题	92
4.4 背包问题的贪婪算法	94
4.5 狄斯奎诺(Dijkstra)算法	97
4.5.1 狄斯奎诺算法的核心原理	97
4.5.2 狄斯奎诺算法的步骤描述	99
4.5.3 狄斯奎诺算法的实现	101
4.5.4 狄斯奎诺算法的不足	105
4.6 数列极差问题	106
4.6.1 问题分析	106
4.6.2 极差问题的算法设计	107
4.6.3 极差问题的时间和空间复杂度分析	108
4.7 分数转化问题	108
4.8 被3整除的元素最大和问题	110
4.9 跳跃游戏问题	111
习题	114

第5章 动态规划
5.1 动态规划基本概述	116
5.1.1 动态规划的基本术语	118
5.1.2 动态规划数学模型建立的一般步骤	121
5.2 动态规划的基本性质	123
5.3 货郎担问题	124
5.4 多段图最短路径问题	127
5.4.1 多段图的计算过程	128
5.4.2 多段图的动态规划算法实现	129
5.5 设备更新问题	131
5.6 最长公共子序列	134
5.6.1 最长公共子序列的搜索过程	135
5.6.2 最长公共子序列算法实现	137
5.7 0/1背包问题	139
5.7.1 0/1背包问题求解分析	140
5.7.2 0/1背包问题的实现	141
5.8 最大连续子序列和问题	143
5.9 最优二叉搜索树	145
5.9.1 OBST问题的动态规划求解过程	147
5.9.2 OBST问题的实现过程	149
习题	151

第6章 回溯
6.1 问题的解空间和状态空间树	153
6.2 状态空间树的动态搜索	154
6.3 回溯算法的一般性描述	157
6.4 图的着色问题	160
6.4.1 图着色问题的求解过程分析	161
6.4.2 图着色问题算法实现	163
6.5 n皇后问题	165
6.5.1 n皇后问题的求解过程分析	165
6.5.2 n皇后问题的求解实现	166
6.5.3 数独问题	168
6.6 一些经典算法的回溯求解	172
习题	182

第7章 分支与限界
7.1 分支与限界算法	184
7.2 作业分配问题	186
7.2.1 分支限界法解作业分配问题的思想方法	186
7.2.2 分支限界法解作业分配问题算法的实现	188
7.3 单源最短路径问题	192
7.3.1 分支限界法解单源最短路径问题的思想方法	192
7.3.2 分支限界法解单源最短路径问题算法的实现	194
7.4 0/1背包问题	197
7.4.1 分支限界法解0/1背包问题的思想方法	197
7.4.2 0/1背包问题分支限界算法的实现	200
7.5 货郎担问题	204
7.5.1 费用矩阵的特性及归约	204
7.5.2 分支限界法解最短汉密尔顿回路的思想	205
7.5.3 货郎担问题的求解过程	208
7.5.4 几个辅助函数的实现	212
7.5.5 货郎担问题分支限界算法的实现	217
习题	219

第8章 随机算法
8.1 随机化算法	222
8.1.1 为什么要随机化	222
8.1.2 随机算法	222
8.2 随机数发生器	223
8.3 数值概率算法	225
8.4 拉斯维加斯算法	229
8.4.1 随机快速排序算法	230
8.4.2 随机选择算法	231
8.4.3 n皇后问题的随机算法	232
8.4.4 随机字符串匹配算法	234
8.4.5 整数因子	239
8.5 蒙特卡罗算法	242
8.5.1 函数极大值估计问题	243
8.5.2 主元素问题	244
8.5.3 素数测试问题	246
8.6 随机算法的应用	251
习题	252

第9章 NP完全问题
9.1 判定问题和优化问题	254
9.2 P类问题和NP类问题	255
9.3 NP完全问题	260
习题	262
	
参考文献

发送电子邮件联系我们