图书信息我要评论 查看评论
内容介绍: 【展开】
《算法设计、分析与实现:C、C++和Java》第1章~第6章按算法设计技巧分成渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法。每章针对一些经典问题给出解决问题的算法,并分析算法的时间复杂度。这样对于初学者来说,按照算法的设计方法划分,算法思想的阐述比较集中,有利于快速入门理解算法的精髓所在。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以结合已学的方法综合起来解决比较复杂的问题。本书第7章的线性规划和第8章的计算几何是综合算法部分,通过学习这些内容,读者将进一步地学习更前沿的随机算法、近似算法和并行算法等现代算法设计方法和实战技巧,第9章是算法的实践部分,教给读者如何进行调试。 《算法设计、分析与实现:C、C++和Java》特色是按照算法之间逻辑关系编排学习顺序,并对每一个经典算法,都给出了完整的C/C++/Java三种主流编程语言的实现程序,是一本既能让读者清晰、轻松地理解算法思想,又能让读者编程实现算法的实用书籍。建议读者对照本书在计算机上自己创建项目、文件,进行录入、调试程序等操作,从中体会算法思想的精髓,体验编程成功带来的乐趣。 《算法设计、分析与实现:C、C++和Java》适合各种学习算法的人员使用,也适合作为大中专院校的学习用书,及培训学校的教材。
目 录
第1章 集腋成裘——渐增型算法 1
1.1 算法设计与分析 1
1.2 插入排序算法 4
1.2.1 算法描述与分析 4
1.2.2 程序实现 6
1.2.3 应用——赢得舞伴 32
1.3 两个有序序列的合并算法 33
1.3.1 算法描述与分析 33
1.3.2 程序实现 36
1.4 序列的划分 47
1.4.1 算法描述与分析 47
1.4.2 程序实现 49
1.5 小结 55
第2章 化整为零——分治算法 56
2.1 Hanoi塔问题与递归算法 56
2.1.1 算法的描述与分析 56
2.1.2 程序实现 59
2.1.3 应用——新Hanoi塔游戏 63
2.2 归并排序算法 66
2.2.1 算法描述与分析 66
2.2.2 程序实现 67
2.2.3 应用——让舞伴更开心 73
2.3 快速排序算法 74
2.3.1 算法描述与分析 74
2.3.2 程序实现 77
2.4 堆的实现 84
2.4.1 堆的概念及其创建 84
2.4.2 程序实现 89
2.5 堆排序 95
2.5.1 算法描述与分析 95
2.5.2 程序实现 96
2.6 基于二叉堆的优先队列 101
2.6.1 算法描述与分析 101
2.6.2 程序实现 102
2.7 关于排序算法 114
2.7.1 比较型排序算法的时间复杂度 114
2.7.2 C/C++/Java提供的排序函数(方法) 116
2.7.3 应用——环法自行车赛 117
2.8 小结 118
第3章 记表备查——动态规划算法 120
3.1 矩阵链乘法 121
3.1.1 算法描述与分析 121
3.1.2 程序实现 125
3.1.3 应用——牛牛玩牌 131
3.2 最长公共子序列 133
3.2.1 算法描述与分析 133
3.2.2 程序实现 136
3.2.3 算法的应用 143
3.3 0-1背包问题 147
3.3.1 算法描述与分析 147
3.3.2 程序实现 149
3.3.3 算法的应用 153
3.4 带权有向图中任意两点间的最短路径 156
3.4.1 算法描述与分析 156
3.4.2 程序实现 160
3.4.3 应用——牛牛聚会 166
3.5 小结 168
第4章 高效的选择——贪婪算法 169
4.1 活动选择问题 169
4.1.1 算法描述与分析 169
4.1.2 程序实现 172
4.1.3 贪婪算法与动态规划 177
4.1.4 应用——海岸雷达 179
4.2 Huffman编码 181
4.2.1 算法描述与分析 181
4.2.2 程序实现 185
4.2.3 应用——R-叉Huffman树 195
4.3 最小生成树 199
4.3.1 算法描述与分析 199
4.3.2 程序实现 202
4.3.3 应用——北方通信网 212
4.4 单源最短路径问题 214
4.4.1 算法描述与分析 214
4.4.2 程序实现 217
4.4.3 应用——西气东送 224
4.5 小结 227
第5章 艰苦卓绝——回溯算法 228
5.1 组合问题与回溯算法 228
5.1.1 3-着色问题 228
5.1.2 n-皇后问题 231
5.1.3 Hamilton回路问题 234
5.1.4 子集和问题 236
5.2 解决组合问题的回溯算法框架 237
5.2.1 算法框架 237
5.2.2 程序实现 241
5.3 排列树和子集树 253
5.3.1 子集树问题 253
5.3.2 排列树问题 258
5.4 用回溯算法解决组合优化问题 261
5.4.1 算法框架 261
5.4.2 旅行商问题 263
5.4.3 应用 268
5.5 P、NP和NP-完全问题 276
5.6 小结 278
第6章 图的搜索算法 280
6.1 广度优先搜索 282
6.1.1 算法描述与分析 282
6.1.2 程序实现 285
6.1.3 应用——攻城掠地 293
6.2 深度优先搜索 296
6.2.1 算法描述与分析 296
6.2.2 程序实现 298
6.2.3 有向无圈图的拓扑排序 301
6.2.4 应用——全排序 309
6.3 有向图的强连通分支 311
6.3.1 算法描述与分析 311
6.3.2 程序实现 315
6.3.3 应用——亲情号 320
6.4 无向图的双连通分支 323
6.4.1 算法描述与分析 323
6.4.2 程序实现 326
6.4.3 应用——雌雄大盗 329
6.5 流网络与最大流问题 331
6.5.1 算法描述与分析 331
6.5.2 程序实现 342
6.5.3 应用 344
6.6 小结 347
第7章 集组合优化问题之大成——线性规划 348
7.1 标准形式与松弛形式 351
7.1.1 线性规划的标准形式 351
7.1.2 线性规划的松弛形式 355
7.2 单纯形算法 358
7.2.1 单纯形算法的例子 358
7.2.2 轴转操作 361
7.2.3 正规的单纯形算法 364
7.3 初始基本可行解 372
7.4 应用——将组合优化问题形式化为线性规划 381
7.5 小结 385
第8章 图形学基础——计算几何 386
8.1 线段的性质 386
8.1.1 叉积及其应用 387
8.1.2 程序实现 390
8.2 判断是否存在线段相交 393
8.2.1 算法描述与分析 394
8.2.2 程序实现 397
8.3 求凸壳 401
8.3.1 Graham扫描 402
8.3.2 Jarvis行进 409
8.4 求最邻近点对 412
8.4.1 算法描述与分析 413
8.4.2 程序实现 416
8.5 应用 418
8.5.1 光导管 418
8.5.2 最小边界矩形 420
8.5.3 得克萨斯一日游 422
8.6 小结 423
第9章 实验指南 424
9.1 实验平台的搭建 424
9.1.1 C、C++语言的实验平台 424
9.1.2 Java语言的实验平台 425
9.2 代码验证 429
9.2.1 C语言代码验证 429
9.2.2 C++语言代码验证 434
9.2.3 Java语言代码验证 435
9.3 自主实验 436
9.3.1 C语言环境 436
9.3.2 C++语言环境 438
9.3.3 Java语言环境 439
附录 442
参考文献 455
目 录
第1章 集腋成裘——渐增型算法 1
1.1 算法设计与分析 1
1.2 插入排序算法 4
1.2.1 算法描述与分析 4
1.2.2 程序实现 6
1.2.3 应用——赢得舞伴 32
1.3 两个有序序列的合并算法 33
1.3.1 算法描述与分析 33
1.3.2 程序实现 36
1.4 序列的划分 47
1.4.1 算法描述与分析 47
1.4.2 程序实现 49
1.5 小结 55
第2章 化整为零——分治算法 56
2.1 Hanoi塔问题与递归算法 56
2.1.1 算法的描述与分析 56
2.1.2 程序实现 59
2.1.3 应用——新Hanoi塔游戏 63
2.2 归并排序算法 66
2.2.1 算法描述与分析 66
2.2.2 程序实现 67
2.2.3 应用——让舞伴更开心 73
2.3 快速排序算法 74
2.3.1 算法描述与分析 74
2.3.2 程序实现 77
2.4 堆的实现 84
2.4.1 堆的概念及其创建 84
2.4.2 程序实现 89
2.5 堆排序 95
2.5.1 算法描述与分析 95
2.5.2 程序实现 96
2.6 基于二叉堆的优先队列 101
2.6.1 算法描述与分析 101
2.6.2 程序实现 102
2.7 关于排序算法 114
2.7.1 比较型排序算法的时间复杂度 114
2.7.2 C/C++/Java提供的排序函数(方法) 116
2.7.3 应用——环法自行车赛 117
2.8 小结 118
第3章 记表备查——动态规划算法 120
3.1 矩阵链乘法 121
3.1.1 算法描述与分析 121
3.1.2 程序实现 125
3.1.3 应用——牛牛玩牌 131
3.2 最长公共子序列 133
3.2.1 算法描述与分析 133
3.2.2 程序实现 136
3.2.3 算法的应用 143
3.3 0-1背包问题 147
3.3.1 算法描述与分析 147
3.3.2 程序实现 149
3.3.3 算法的应用 153
3.4 带权有向图中任意两点间的最短路径 156
3.4.1 算法描述与分析 156
3.4.2 程序实现 160
3.4.3 应用——牛牛聚会 166
3.5 小结 168
第4章 高效的选择——贪婪算法 169
4.1 活动选择问题 169
4.1.1 算法描述与分析 169
4.1.2 程序实现 172
4.1.3 贪婪算法与动态规划 177
4.1.4 应用——海岸雷达 179
4.2 Huffman编码 181
4.2.1 算法描述与分析 181
4.2.2 程序实现 185
4.2.3 应用——R-叉Huffman树 195
4.3 最小生成树 199
4.3.1 算法描述与分析 199
4.3.2 程序实现 202
4.3.3 应用——北方通信网 212
4.4 单源最短路径问题 214
4.4.1 算法描述与分析 214
4.4.2 程序实现 217
4.4.3 应用——西气东送 224
4.5 小结 227
第5章 艰苦卓绝——回溯算法 228
5.1 组合问题与回溯算法 228
5.1.1 3-着色问题 228
5.1.2 n-皇后问题 231
5.1.3 Hamilton回路问题 234
5.1.4 子集和问题 236
5.2 解决组合问题的回溯算法框架 237
5.2.1 算法框架 237
5.2.2 程序实现 241
5.3 排列树和子集树 253
5.3.1 子集树问题 253
5.3.2 排列树问题 258
5.4 用回溯算法解决组合优化问题 261
5.4.1 算法框架 261
5.4.2 旅行商问题 263
5.4.3 应用 268
5.5 P、NP和NP-完全问题 276
5.6 小结 278
第6章 图的搜索算法 280
6.1 广度优先搜索 282
6.1.1 算法描述与分析 282
6.1.2 程序实现 285
6.1.3 应用——攻城掠地 293
6.2 深度优先搜索 296
6.2.1 算法描述与分析 296
6.2.2 程序实现 298
6.2.3 有向无圈图的拓扑排序 301
6.2.4 应用——全排序 309
6.3 有向图的强连通分支 311
6.3.1 算法描述与分析 311
6.3.2 程序实现 315
6.3.3 应用——亲情号 320
6.4 无向图的双连通分支 323
6.4.1 算法描述与分析 323
6.4.2 程序实现 326
6.4.3 应用——雌雄大盗 329
6.5 流网络与最大流问题 331
6.5.1 算法描述与分析 331
6.5.2 程序实现 342
6.5.3 应用 344
6.6 小结 347
第7章 集组合优化问题之大成——线性规划 348
7.1 标准形式与松弛形式 351
7.1.1 线性规划的标准形式 351
7.1.2 线性规划的松弛形式 355
7.2 单纯形算法 358
7.2.1 单纯形算法的例子 358
7.2.2 轴转操作 361
7.2.3 正规的单纯形算法 364
7.3 初始基本可行解 372
7.4 应用——将组合优化问题形式化为线性规划 381
7.5 小结 385
第8章 图形学基础——计算几何 386
8.1 线段的性质 386
8.1.1 叉积及其应用 387
8.1.2 程序实现 390
8.2 判断是否存在线段相交 393
8.2.1 算法描述与分析 394
8.2.2 程序实现 397
8.3 求凸壳 401
8.3.1 Graham扫描 402
8.3.2 Jarvis行进 409
8.4 求最邻近点对 412
8.4.1 算法描述与分析 413
8.4.2 程序实现 416
8.5 应用 418
8.5.1 光导管 418
8.5.2 最小边界矩形 420
8.5.3 得克萨斯一日游 422
8.6 小结 423
第9章 实验指南 424
9.1 实验平台的搭建 424
9.1.1 C、C++语言的实验平台 424
9.1.2 Java语言的实验平台 425
9.2 代码验证 429
9.2.1 C语言代码验证 429
9.2.2 C++语言代码验证 434
9.2.3 Java语言代码验证 435
9.3 自主实验 436
9.3.1 C语言环境 436
9.3.2 C++语言环境 438
9.3.3 Java语言环境 439
附录 442
参考文献 455