新書推薦:
《
山西寺观艺术彩塑精编卷
》
售價:HK$
1680.0
《
积极心理学
》
售價:HK$
55.8
《
自由,不是放纵
》
售價:HK$
54.9
《
甲骨文丛书·消逝的光明:欧洲国际史,1919—1933年(套装全2册)
》
售價:HK$
277.8
《
剑桥日本戏剧史(剑桥世界戏剧史译丛)
》
售價:HK$
201.6
《
中国高等艺术院校精品教材大系:材料的时尚表达??服装创意设计
》
售價:HK$
76.2
《
美丽与哀愁:第一次世界大战个人史
》
售價:HK$
143.4
《
国家豁免法的域外借鉴与实践建议
》
售價:HK$
188.2
|
編輯推薦: |
本书以“算法概述→算法框架(或步骤)→算法设计→算法分析”为技术线路,系统地介绍了各种常用的算法设计策略,并以专题形式讨论了图算法、计算几何、概率算法和近似算法设计原理及其应用。
本书特色:
(1) 由浅入深,循序渐进。 每种算法设计策略从设计思想和算法框架入手,由易到难地讲解相关经典问题的求解过程。
(2) 示例丰富,重视启发。 书中列举大量经典示例和有代表性的在线编程示例,深入剖析其求解思路,展示其算法设计的清晰过程。
(3) 注重求解问题的多维性。同一个问题采用多种算法策略实现,提高读者利用不同算法策略解决复杂问题的能力。
(4) 强调算法实现和对动手能力的培养。书中精选大量难度适中的在线编程实验题,提高读者的编程能力,帮助读者直面各类竞赛和求职市场。
|
內容簡介: |
本书以“算法概述→算法框架(或步骤)→算法设计→算法分析”为技术线路,系统地介绍了各种常用的算法设计策略,包括穷举法、分治法、回溯法、分支限界法、动态规划和贪心法等,并以专题形式讨论了图算法、计算几何、概率算法和近似算法设计原理及其应用,帮助读者迅速掌握算法设计要点,规范算法设计、分析及实现的方法。书中列举了大量的经典示例和在线编程示例并予以解析,全方位地帮助读者提高算法设计与分析实践能力和理论水平。
本书既便于教师课堂讲授,又便于自学者阅读,适合作为高等学校计算机及相关专业学生的算法设计与分析课程教材,也可供ACM和各类程序设计竞赛者学习参考。
|
目錄:
|
扫一扫
源码下载
第1章绪论/
1.1算法概述/
1.1.1什么是算法/
1.1.2算法描述/
1.1.3算法设计的基本步骤/
1.2算法分析/
1.2.1算法时间复杂度分析/
1.2.2算法空间复杂度分析/
1.3算法设计工具——STL/
1.3.1STL概述/
1.3.2vector(向量容器)/
1.3.3string(字符串容器)/
1.3.4deque(双端队列容器)/
1.3.5list(链表容器)/
1.3.6stack(栈容器)/
1.3.7queue(队列容器)/
1.3.8priority_queue(优先队列容器)/
1.3.9set(集合容器)/multiset(多重集合容器)/
1.3.10map(映射容器)/multimap(多重映射容器)/
1.3.11unordered_set(哈希集合容器)/
1.3.12unordered_map(哈希映射容器)/
1.4练习题/
1.5在线编程实验题/
第2章递归算法设计技术/
2.1递归概述/
2.1.1什么是递归/
2.1.2何时使用递归/
2.1.3递归模型/
2.1.4递归算法的执行过程/
2.1.5递归算法的时间复杂度和空间复杂度分析/
2.2递归算法的设计方法/
2.2.1递归与数学归纳法/
2.2.2递归算法设计的一般步骤/
2.2.3基于递归数据结构的递归算法设计/
2.2.4基于归纳思想的递归算法设计/
2.3直接插入排序/
2.40/1背包问题/
2.5求表达式的值/
2.6计算递推式/
2.6.1直接展开法/
2.6.2递归树方法/
2.6.3主方法/
2.6.4*特征方程方法/
2.7练习题/
2.8在线编程实验题/
第3章穷举法/
3.1穷举法概述/
3.1.1什么是穷举法/
3.1.2穷举算法的框架/
3.2算法优化中常用的数据结构/
3.2.1前缀和数组/
3.2.2并查集/
3.3求回文串的个数/
3.4求最大连续子序列和/
3.5求幂集/
3.60/1背包问题/
3.7求全排列/
3.8n皇后问题/
3.9任务分配问题/
3.10旅行商问题/
3.11练习题/
3.12在线编程实验题/
第4章分治法/
4.1分治法概述/
4.1.1什么是分治法/
4.1.2分治法的求解过程/
4.1.3分治算法分析/
4.2快速排序/
4.3二路归并排序/
4.4二分查找/
4.4.1基本二分查找/
4.4.2二分查找的扩展/
4.5求最大连续子序列和/
4.6棋盘覆盖问题/
4.7循环日程安排问题/
4.8旅行商问题/
4.9练习题/
4.10在线编程实验题/
第5章回溯法/
5.1回溯法概述/
5.1.1问题的解空间/
5.1.2什么是回溯法/
5.1.3回溯算法分析/
5.2基于子集树的回溯算法框架/
5.2.1解空间树的类型/
5.2.2求幂集/
5.2.3子集树回溯算法框架/
5.3图的路径搜索/
5.4构造表达式/
5.5图的m着色问题/
5.6子集和问题/
5.7简单装载问题/
5.80/1背包问题/
5.9*完全背包问题/
5.10基于排列树的回溯算法框架/
5.10.1求全排列/
5.10.2排列树回溯算法框架/
5.11n皇后问题/
5.12任务分配问题/
5.13旅行商问题/
5.14练习题/
5.15在线编程实验题/
第6章分支限界法/
6.1分支限界法概述/
6.1.1什么是分支限界法/
6.1.2分支限界法的设计要点/
6.1.3分支限界法的时间性能/
6.2广度优先搜索/
6.2.1图的广度优先搜索/
6.2.2广度优先搜索的应用/
6.3队列式分支限界法的框架/
6.4图的单源最短路径/
6.50/1背包问题(1)/
6.6优先队列式分支限界法的框架/
6.70/1背包问题(2)/
6.8任务分配问题/
6.9旅行商问题/
6.10*A*算法及其应用/
6.10.1A*算法概述/
6.10.2启发式函数/
6.11练习题/
6.12在线编程实验题/
第7章动态规划/
7.1动态规划概述/
7.1.1从一个简单的示例入门/
7.1.2动态规划的原理/
7.1.3动态规划求解问题的类型、性质和步骤/
7.1.4动态规划与其他方法的比较/
7.2求最大连续子序列和/
7.3最长递增子序列/
7.4三角形的最小路径和/
7.5最长公共子序列/
7.6编辑距离/
7.70/1背包问题/
7.8*完全背包问题和多重背包问题/
7.8.1完全背包问题/
7.8.2多重背包问题/
7.9扔鸡蛋问题/
7.10资源分配问题/
7.11旅行商问题/
7.12最少士兵数问题/
7.13矩阵连乘问题/
7.14练习题/
7.15在线编程实验题/
第8章贪心法/
8.1贪心法概述/
8.1.1什么是贪心法/
8.1.2用贪心法求解的问题具有的性质/
8.1.3用贪心法求解问题的一般过程/
8.2区间问题/
8.2.1最大兼容区间个数/
8.2.2区间合并/
8.2.3*最少资源问题/
8.3背包问题/
8.4田忌赛马问题/
8.5零钱兑换问题/
8.6哈夫曼编码/
8.7*拟阵/
8.7.1拟阵概述/
8.7.2求加权拟阵最优子集的贪心算法/
8.7.3带期限和惩罚的任务调度问题/
8.8练习题/
8.9在线编程实验题/
第9章图算法/
9.1图的最小生成树/
9.1.1什么是最小生成树/
9.1.2Prim算法/
9.1.3Kruskal算法/
9.2图的最短路径/
9.2.1Dijkstra算法/
9.2.2BellmanFord算法/
9.2.3SPFA算法/
9.2.4Floyd算法/
9.3网络流/
9.3.1问题的引入/
9.3.2FordFulkerson算法/
9.3.3EdmondsKrap算法/
9.3.4Dinic算法/
9.4练习题/
9.5在线编程实验题/
第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在线编程实验题/
第11章计算复杂性/
11.1P类和NP类/
11.1.1易解问题和难解问题/
11.1.2判定问题和优化问题/
11.1.3计算模型/
11.1.4P类问题/
11.1.5NP类问题/
11.2多项式时间变换和问题归约/
11.3NP完全问题/
11.3.1什么是NP完全问题和NP难问题/
11.3.2第一个NP完全问题/
11.3.3其他NP完全问题/
11.4练习题/
第12章概率算法和近似算法/
12.1概率算法/
12.1.1什么是概率算法/
12.1.2数值概率算法/
12.1.3蒙特卡洛算法/
12.1.4拉斯维加斯算法/
12.1.5舍伍德算法/
12.2近似算法/
12.2.1什么是近似算法/
12.2.2多机调度问题的近似算法/
12.2.30/1背包问题的近似算法/
12.2.4旅行商问题的近似算法/
12.3练习题/
参考文献/
|
內容試閱:
|
党的二十大报告指出: 教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑。必须坚持科技是第一生产力、人才是第一资源、创新是第一动力,深入实施科教兴国战略、人才强国战略、创新驱动发展战略,这三大战略共同服务于创新型国家的建设。高等教育与经济社会发展紧密相连,对促进就业创业、助力经济社会发展、增进人民福祉具有重要意义。
算法在计算机科学中扮演着重要角色,算法设计与分析课程是计算机科学与技术等相关专业的核心必修课,其目标是培养学生分析问题和解决问题的能力,使学生掌握算法设计的基本技巧和算法分析的基本技术,并能熟练运用常用算法设计策略解决一些较综合的问题,为学生进一步学习后续课程奠定良好的基础。本书是依据上述课程目标并参考ACM/IEEE计算课程体系规范CC2020算法领域的4个绩效能力(验证理论结果、对程序设计问题能给出解决方案、能开发出概念验证性程序和判断是否能开发出更快的解决方案)所编写的。
1.本书内容
全书由12章构成,各章的内容如下:
第1章为绪论,介绍算法的概念、算法分析方法和STL在算法设计中的应用。
第2章为递归算法设计技术,介绍递归的概念、递归模型、递归算法设计方法和递归的经典应用示例,包括直接插入排序、0/1背包问题和求表达式值,以及递推式计算方法,包括直接展开法、递归树方法、主方法和特征方程方法。
第3章为穷举法,介绍穷举法的特点、各种列举方法和穷举法的经典应用示例,包括求幂集、求全排列、0/1背包问题和旅行商问题等。
第4章为分治法,介绍分治法的特点、分治法的基本步骤和分治法的经典应用示例,包括快速排序、二路归并排序、二分查找及其扩展、求最大连续子序列和、棋盘覆盖问题、循环日程安排问题和旅行商问题等。
第5章为回溯法,介绍解空间概念、回溯法解空间类型、子集树回溯算法框架、排列树回溯算法框架和回溯法的经典应用示例,包括构造表达式、图着色问题、子集和问题、0/1背包问题、完全背包问题、n皇后问题、任务分配问题和旅行商问题等。
第6章为分支限界法,介绍广度优先搜索的特性、分支限界法的特点、分支限界法的主要类型和分支限界法的经典应用示例,包括图的单源最短路径、0/1背包问题、任务分配问题和旅行商问题等,以及A*算法的原理及其应用。
第7章为动态规划,介绍动态规划的特点、动态规划求解问题应具有的性质、动态规划的求解步骤、滚动数组的应用和动态规划的经典应用示例,包括求最大连续子序列和、最长递增子序列、三角形最小路径和、最长公共子序列、编辑距离、0/1背包问题、完全背包问题、扔鸡蛋问题、资源分配问题、旅行商问题、最少士兵数问题和矩阵连乘问题等。
第8章为贪心法,介绍贪心法的特点、贪心法求解问题应具有的性质和贪心法的经典应用示例,包括区间问题、背包问题、田忌赛马问题、零钱兑换问题和哈夫曼编码,以及拟阵的概念、带期限和惩罚的任务调度问题的求解过程。
第9章为图算法,讨论构造图最小生成树的两种算法(Prim和Kruskal)、求图的最短路径的4种算法(Dijkstra、BellmanFord、SPFA和Floyd)和网络流的相关概念,以及求最大流的相关算法。
第10章为计算几何,介绍计算几何中常用的向量运算,以及求解凸包问题、最近点对问题和最远点对问题的典型算法。
第11章为计算复杂性,介绍易解问题和难解问题、图灵机计算模型、P类和NP类问题以及NP完全问题。
第12章为概率算法和近似算法,介绍这两类算法的特点和基本的算法设计方法。
书中带“*”符号的部分作为选学内容。
2.本书特色
本书具有如下鲜明的特色。
(1) 由浅入深,循序渐进。每种算法设计策略从设计思想和算法框架入手,由易到难地讲解相关经典问题的求解过程,使读者既能学到求解问题的方法,又能通过对算法设计策略的反复应用掌握其核心原理,以收到融会贯通之效。
(2) 示例丰富,重视启发。书中列举大量经典示例和有代表性的在线编程示例(选自LeetCode、LintCode、POJ和HDU),深入剖析其求解思路,展示其算法设计的清晰过程,并举一反三,激发读者学习算法设计的兴趣。
(3) 注重求解问题的多维性。同一个问题采用多种算法策略实现,例如0/1背包问题采用递归法、穷举法、回溯法、分支限界法和动态规划求解,旅行商问题采用穷举法、分治法、回溯法、分支限界法和动态规划求解。通过比较不同算法策略,使读者体会每种算法策略的特点,以提高利用不同算法策略解决复杂问题的能力。
(4) 强调算法实现和对动手能力的培养。算法设计仅会“纸上谈兵”是不够的,必须具备从问题建模、算法设计、算法实现到验证的能力,书中精选了大量难度适中的在线编程实验题,通过这些题目的训练,不仅可以提高读者的编程能力,还可以帮助读者直面各类竞赛和求职市场。
(5) 本书配套有《算法设计与分析(第3版)学习指导》和《算法设计与分析(第3版)在线编程实验指导》(李春葆等,清华大学出版社,2024),涵盖所有练习题和在线编程题的参考答案。
3.教学资源
为了方便教师教学和学生学习,本书提供了全面且丰富的教学资源,包括以下内容。
(1) 教学PPT: 提供全部教学内容的精美PPT课件,供任课教师在教学中使用。
(2) 程序源代码: 所有源代码按章组织,例如ch2文件夹中存放第2章的源代码(在Dev C 5.11中调试通过)。
(3) 教学大纲和电子教案: 包含32和48课堂讲授学时的教学内容安排及相应的实验教学内容安排,供教师参考。
(4) 与各章知识点对应的题库: 包括单项选择题、填空题和算法设计的上机实验题。
(5) 绝大部分知识点的教学视频: 视频采用微课碎片化形式组织,含170个视频,累计超过34小时。
资源下载提示
课件等资源: 扫描封底的“课件下载”二维码,在公众号“书圈”下载。
素材(源码)等资源: 扫描目录上方的二维码下载。
在线自测题: 扫描封底的作业系统二维码,再扫描自测题二维码在线做题。
微课视频: 扫描封底的文泉云盘防盗码,再扫描书中相应章节的视频讲解二维码,可以在线学习。
4.致谢
本书的编写得到101计划和武汉大学计算机学院相关课程教学研究项目的大力支持,清华大学出版社的魏江江分社长和王冰飞老师提供了全方位的帮助和精心的编辑工作,LeetCode和相关在线编程平台给予了无私的帮助,编者在此一并表示衷心的感谢。
尽管编者不遗余力,但由于水平所限,本书仍存在疏漏和不足之处,敬请教师和同学们批评指正。
编者
2024年1月
|
|