新書推薦:
《
真需求
》
售價:HK$
110.9
《
阿勒泰的春天
》
售價:HK$
50.4
《
如见你
》
售價:HK$
51.3
《
人格阴影 全新修订版,更正旧版多处问题。国际分析心理学协会(IAAP)主席力作
》
售價:HK$
67.0
《
560种野菜野果鉴别与食用手册
》
售價:HK$
67.1
《
中国官僚政治研究(一部洞悉中国政治制度演变的经典之作)
》
售價:HK$
62.7
《
锂电储能产品设计及案例详解
》
售價:HK$
110.9
《
首辅养成手册(全三册)(张晚意、任敏主演古装剧《锦绣安宁》原著小说)
》
售價:HK$
121.0
|
編輯推薦: |
难度适中,强调算法设计和动手能力培养注重实验,提供大量的上机实验题和在线编程题案例来源于著名IT企业面试笔试题和ACM竞赛题教学资源丰富,每个知识点都配套了视频讲解
|
內容簡介: |
本书系统地介绍了各种常用的算法设计策略,包括递归、分治法、蛮力法、回溯法、分枝限界法、贪心法、动态规划、概率算法和近似算法等,并详细讨论了各种图算法和计算几何设计算法。 全书既注重原理又注重实践,配有大量图表、练习题、上机实验题和在线编程题,内容丰富,概念讲解清楚,表达严谨,逻辑性强,语言精练,可读性好。 本书既便于教师课堂讲授,又便于自学者阅读,适合作为高等院校算法设计与分析课程的教材,也可供ACM和各类程序设计竞赛者参考。
|
目錄:
|
目录
第1章概论
1.1算法的概念
1.1.1什么是算法
1.1.2算法描述
1.1.3算法和数据结构
1.1.4算法设计的基本步骤
1.2算法分析
1.2.1算法时间复杂度分析
1.2.2算法空间复杂度分析
1.3算法设计工具STL
1.3.1STL概述
1.3.2常用的STL容器
1.3.3STL在算法设计中的应用
1.4练习题
1.5上机实验题
1.6在线编程题
第2章递归算法设计技术
2.1什么是递归
2.1.1递归的定义
2.1.2何时使用递归
2.1.3递归模型
2.1.4递归算法的执行过程
2.2递归算法设计
2.2.1递归与数学归纳法
2.2.2递归算法设计的一般步骤
2.2.3递归数据结构及其递归算法设计
2.2.4基于归纳思想的递归算法设计
2.3递归算法设计示例
2.3.1简单选择排序和冒泡排序
2.3.2求解n皇后问题
2.4*递归算法转化为非递归算法
2.4.1用循环结构替代递归过程
2.4.2用栈消除递归过程
2.5递推式的计算
2.5.1用特征方程求解递归方程
2.5.2用递归树求解递归方程
2.5.3用主方法求解递归方程
2.6练习题
2.7上机实验题
2.8在线编程题
第3章分治法
3.1分治法概述
3.1.1分治法的设计思想
3.1.2分治法的求解过程
3.2求解排序问题
3.2.1快速排序
3.2.2归并排序
3.3求解查找问题
3.3.1查找最大和次大元素
3.3.2折半查找
3.3.3寻找一个序列中第k小的元素
3.3.4寻找两个等长有序序列的中位数
3.4求解组合问题
3.4.1求解最大连续子序列和问题
3.4.2求解棋盘覆盖问题
3.4.3求解循环日程安排问题
3.5求解大整数乘法和矩阵乘法问题
3.5.1求解大整数乘法问题
3.5.2求解矩阵乘法问题
3.6并行计算简介
3.6.1并行计算概述
3.6.2并行计算模型
3.6.3快速排序的并行算法
3.7练习题
3.8上机实验题
3.9在线编程题
第4章蛮力法
4.1蛮力法概述
4.2蛮力法的基本应用
4.2.1采用直接穷举思路的一般格式
4.2.2简单选择排序和冒泡排序
4.2.3字符串匹配
4.2.4求解最大连续子序列和问题
4.2.5求解幂集问题
4.2.6求解简单01背包问题
4.2.7求解全排列问题
4.2.8求解任务分配问题
4.3递归在蛮力法中的应用
4.3.1用递归方法求解幂集问题
4.3.2用递归方法求解全排列问题
4.3.3用递归方法求解组合问题
4.4图的深度优先和广度优先遍历
4.4.1图的存储结构
4.4.2深度优先遍历
4.4.3广度优先遍历
4.4.4求解迷宫问题
4.5练习题
4.6上机实验题
4.7在线编程题
第5章回溯法
5.1回溯法概述
5.1.1问题的解空间
5.1.2什么是回溯法
5.1.3回溯法的算法框架及其应用
5.1.4回溯法与深度优先遍历的异同
5.1.5回溯法的时间分析
5.2求解01背包问题
5.3求解装载问题
5.3.1求解简单装载问题
5.3.2求解复杂装载问题
5.4求解子集和问题
5.4.1求子集和问题的解
5.4.2判断子集和问题是否存在解
5.5求解n皇后问题
5.6求解图的m着色问题
5.7求解任务分配问题
5.8求解活动安排问题
5.9求解流水作业调度问题
5.10练习题
5.11上机实验题
5.12在线编程题
第6章分枝限界法
6.1分枝限界法概述
6.1.1什么是分枝限界法
6.1.2分枝限界法的设计思想
6.1.3分枝限界法的时间性能
6.2求解01背包问题
6.2.1采用队列式分枝限界法求解
6.2.2采用优先队列式分枝限界法求解
6.3求解图的单源最短路径
6.3.1采用队列式分枝限界法求解
6.3.2采用优先队列式分枝限界法求解
6.4求解任务分配问题
6.5求解流水作业调度问题
6.6练习题
6.7上机实验题
6.8在线编程题
第7章贪心法
7.1贪心法概述
7.1.1什么是贪心法
7.1.2用贪心法求解的问题应具有的性质
7.1.3贪心法的一般求解过程
7.2求解活动安排问题
7.3求解背包问题
7.4求解最优装载问题
7.5求解田忌赛马问题
7.6求解多机调度问题
7.7哈夫曼编码
7.8求解流水作业调度问题
7.9练习题
7.10上机实验题
7.11在线编程题
第8章动态规划
8.1动态规划概述
8.1.1从求解斐波那契数列看动态规划法
8.1.2动态规划的原理
8.1.3动态规划求解的基本步骤
8.1.4动态规划与其他方法的比较
8.2求解整数拆分问题
8.3求解最大连续子序列和问题
8.4求解三角形最小路径问题
8.5求解最长公共子序列问题
8.6求解最长递增子序列问题
8.7求解编辑距离问题
8.8求解01背包问题
8.9求解完全背包问题
8.10求解资源分配问题
8.11求解会议安排问题
8.12滚动数组
8.12.1什么是滚动数组
8.12.2用滚动数组求解01背包问题
8.13练习题
8.14上机实验题
8.15在线编程题
第9章图算法设计
9.1求图的最小生成树
9.1.1最小生成树的概念
9.1.2用普里姆算法构造最小生成树
9.1.3克鲁斯卡尔算法
9.2求图的最短路径
9.2.1狄克斯特拉算法
9.2.2贝尔曼福特算法
9.2.3SPFA算法
9.2.4弗洛伊德算法
9.3求解旅行商问题
9.3.1旅行商问题描述
9.3.2采用蛮力法求解TSP问题
9.3.3采用动态规划求解TSP问题
9.3.4采用回溯法求解TSP问题
9.3.5采用分枝限界法求解TSP问题
9.3.6采用贪心法求解TSP问题
9.4网络流
9.4.1相关概念
9.4.2求最大流
9.4.3割集与割量
9.4.4求最小费用最大流
9.5练习题
9.6上机实验题
9.7在线编程题
第10章计算几何
10.1向量运算
10.1.1向量的基本运算
10.1.2判断一个点是否在一个矩形内
10.1.3判断一个点是否在一条线段上
10.1.4判断两条线段是否平行
10.1.5判断两条线段是否相交
10.1.6判断一个点是否在多边形内
10.1.7求3个点构成的三角形的面积
10.1.8求一个多边形的面积
10.2求解凸包问题
10.2.1礼品包裹算法
10.2.2Graham扫描算法
10.3求解最近点对问题
10.3.1用蛮力法求最近点对
10.3.2用分治法求最近点对
10.4求解最远点对问题
10.4.1用蛮力法求最远点对
10.4.2用旋转卡壳法求最远点对
10.5练习题
10.6上机实验题
10.7在线编程题
第11章计算复杂性理论简介
11.1计算模型
11.1.1求解问题的分类
11.1.2图灵机模型
11.2P类和NP类问题
11.3NPC问题
11.4练习题
第12章概率算法和近似算法
12.1概率算法
12.1.1什么是概率算法
12.1.2蒙特卡罗类型概率算法
12.1.3拉斯维加斯类型概率算法
12.1.4舍伍德类型概率算法
12.2近似算法
12.2.1什么是近似算法
12.2.2求解旅行商问题的近似算法
12.3练习题
12.4上机实验题
12.5在线编程题
附录A书中部分算法清单
参考文献
|
內容試閱:
|
前言
算法在计算科学中扮演着重要角色。算法设计是计算机科学与技术专业的必修课,其目标是培养学生分析问题和解决问题的能力,使学生掌握算法设计的基本技巧和方法,熟悉算法分析的基本技术,并能熟练运用一些常用算法策略解决一些较综合的问题。在学习本书之前,学生已经学习了基本的数据结构知识,能熟练运用一门或多门编程语言,并具备了一定的编程经验。如何利用已学过的知识针对不同的实际问题设计出有效的算法,是本书所要达到的目的。本书的特点是问题模型化,求解算法化,设计最优化,在掌握必要的算法设计技术和编程技巧的基础上,能够在实际工作中根据具体问题设计和优化算法。本书是针对这一特点并结合课程组全体教师多年的教学经验编写的。1. 本书内容全书由12章构成,各章的内容如下。第1章概论: 介绍算法的概念、算法分析方法和STL在算法设计中的应用。第2章递归算法设计技术: 介绍递归的概念、递归算法设计方法和相关示例、递归算法到非递归算法的转化以及递推式的计算。第3章分治法: 介绍分治法的策略和求解过程,讨论采用分治法求解排序问题、查找问题、最大连续子序列和问题、大整数乘法问题及矩阵乘法问题的典型算法,并简要介绍了并行计算的概念。第4章蛮力法: 介绍蛮力法的特点、蛮力法的基本应用示例、递归在蛮力法中的应用以及图的深度优先和广度优先遍历算法。第5章回溯法: 介绍解空间概念和回溯法算法框架,讨论采用回溯法求解01背包问题、装载问题、子集和问题、n皇后问题、图的m着色问题、任务分配问题、活动安排问题和流水作业调度问题的典型算法。第6章分枝限界法: 介绍分枝限界法的特点和算法框架、队列式分枝限界法和优先队列式分枝限界法,讨论采用分枝限界法求解01背包问题、图的单源最短路径、任务分配问题和流水作业调度问题的典型算法。第7章贪心法: 介绍贪心法的策略、求解过程和贪心法求解问题应具有的性质,讨论采用贪心法求解活动安排问题、背包问题、最优装载问题、田忌赛马问题、多机调度问题、哈夫曼编码和流水作业调度问题的典型算法。第8章动态规划: 介绍动态规划的原理和求解步骤,讨论采用动态规划法求解整数拆分问题、最大连续子序列和问题、三角形最小路径问题、最长公共子序列问题、最长递增子序列问题、编辑距离问题、01背包问题、完全背包问题、资源分配问题、会议安排问题和滚动数组的典型算法。第9章图算法设计: 讨论构造图最小生成树的两种算法Prim和Kruskal算法,并查集的应用、求图的最短路径的4种算法Dijkstra、BellmanFord、SPFA和Floyd,并采用5种算法策略求解旅行商问题TSP问题,最后介绍网络流的相关概念以及求最大流和最小费用最大流的算法。第10章计算几何: 介绍计算几何中常用的矢量运算以及求解凸包问题、最近点对问题和最远点对问题的典型算法。第11章计算复杂性理论简介: 介绍图灵机计算模型、P类和NP类问题以及NPC问题。第12章概率算法和近似算法: 介绍这两类算法的特点和基本的算法设计方法。书中带*符号的章节作为选学内容。2. 本书特色本书具有如下鲜明特色。1 由浅入深,循序渐进: 每种算法策略从设计思想、算法框架入手,由易到难地讲解经典问题的求解过程,使读者既能学到求解问题的方法,又能通过对算法策略的反复应用掌握其核心原理,以收到融会贯通之效。2 示例丰富,重视启发: 书中列举大量的具有典型性的求解问题,深入剖析采用相关算法策略求解的思路,展示算法设计的清晰过程,并举一反三,激发学生学习算法设计的兴趣。3 注重求解问题的多维性: 同一个问题采用多种算法策略实现,如01背包问题采用回溯法、分枝限界法和动态规划求解,旅行商问题采用5种算法策略求解。通过不同算法策略的比较,使学生更容易体会到每一种算法策略的设计特点和各自的优缺点,以提高算法设计的效率。4 强调实验和动手能力的培养: 算法讲解不仅包含思路描述,而且以CC完整程序的形式呈现,同时给出了大量的上机实验题和在线编程题,大部分是近几年国内外的著名IT企业面试笔试题谷歌、微软、阿里巴巴、腾讯、网易等和ACM竞赛题。通过这些题目的训练,不仅可以提高学生的编程能力,而且可以帮助其直面求职市场。(5) 本书配套有《算法设计与分析(第2版)学习与实验指导》(李春葆,清华大学出版社,2018),涵盖所有练习题、上机实验题和在线编程题的参考答案。(6) 本书配套有绝大部分知识点的教学视频,视频采用微课碎片化形式组织(含100多个小视频,累计超过20小时),读者通过扫描二维码即可观看相关视频讲解。3. 教学资源本书提供的教学资源包括完整的教学PPT和书中全部源程序代码在VC 6.0中调试通过,用户可以扫描封底课件二维码免费下载。4. 感谢本书的编写得到湖北省教育厅和武汉大学教学研究项目《计算机科学与技术专业课程体系改革》的大力帮助,清华大学出版社的魏江江主任全力支持本书的编写工作,王冰飞老师给予精心的编辑工作。本书在编写过程中参考了很多同行的教材和网络博客,特别是牛客网中众多的企业面试、笔试题和丰富资源给予编者良好的启发,河南工程学院张天伍老师和使用本教材第1版的多位老师指正多处问题和错误,在此一并表示衷心感谢。本书是课程组全体教师多年教学经验的总结和体现,尽管编者不遗余力,但由于水平所限,难免存在不足之处,敬请教师和同学们批评指正,在此表示衷心感谢。编者
2018年5月
|
|