目录
第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
参考文献
主编推荐
1.本书内容全面系统,基本上涵盖了目前程序设计竞赛所要掌握的算法。
2.本书采用C语言对算法进行描述,可读性强。
3.书中有些问题采用不同算法进行求解,让读者体会算法的设计要点。
精彩内容
本书以算法设计策略为知识单元,系统地介绍了算法设计与分析的概念和方法。全书内容包括算法的基本概念、排序及并查集算法、递归与分治策略、贪婪算法、动态规划算法、回溯法、分支与限界法、随机算法、NP 问题等。本书从一些经典问题入手,分析如何求解问题,然后使用伪代码对问题的算法进行描述, 对算法的时间复杂度进行分析。为了便于读者学习和实践,本书采用C语言对算法进行描述,可读性强。每章内容后附有习题,便于读者复习巩固。本书可作为高等院校计算机专业本科生和研究生的教材,也可作为希望进行算法学习和研究的相关人员的参考资料。
媒体评论
1.本书内容全面系统,基本上涵盖了目前程序设计竞赛所要掌握的算法。
2.本书采用C语言对算法进行描述,可读性强。
3.书中有些问题采用不同算法进行求解,让读者体会算法的设计要点。
以下为对购买帮助不大的评价