新書推薦:
《
可转债投资实战
》
售價:NT$
454.0
《
王氏之死(新版,史景迁成名作)
》
售價:NT$
250.0
《
敢为天下先:三年建成港科大
》
售價:NT$
352.0
《
长高食谱 让孩子长高个的饮食方案 0-15周岁儿童调理脾胃食谱书籍宝宝辅食书 让孩子爱吃饭 6-9-12岁儿童营养健康食谱书大全 助力孩子身体棒胃口好长得高
》
售價:NT$
214.0
《
身体自愈力:解决内在病因的身体智慧指南
》
售價:NT$
449.0
《
非言语沟通经典入门:影响人际交往的重要力量(第7版)
》
售價:NT$
561.0
《
山西寺观艺术壁画精编卷
》
售價:NT$
7650.0
《
中国摄影 中式摄影的独特魅力
》
售價:NT$
4998.0
|
編輯推薦: |
本书获得浙江省普通高校“十三五”新形态教材、浙江省高等教育课堂教学改革、浙江工业大学精品课程、浙江工业大学重点教材建设和绍兴市精品课程建设项目资助。
利用程序设计竞赛模式和在线评测系统的特点,将抽象的算法理论与程序设计竞赛试题相结合,给算法设计和分析课程带来了新的生机。
|
內容簡介: |
本书内容包括经典的算法设计技术,主要介绍数据结构和标准模板库、递归与分治策略、动态规划、贪心算法、回溯算法、分支限界算法、图的搜索算法、图论、数论和组合数学问题。本书包括大量的问题实例,并在北京大学、浙江大学和杭州电子科技大学在线题库中精选原题,详细地分析解题的方法,深入浅出地讲解用到的算法,章后的上机练习题也选自在线题库中的典型题目,供读者练习,以巩固所学算法。本书内容基本上涵盖了目前大学生程序设计竞赛所要掌握的算法。 本书结构清晰、内容丰富,适合作为计算机科学与技术、软件工程以及相关学科算法课程的教材或参考书,特别适合有志于参加信息学竞赛和ACM大学生程序设计竞赛的读者学习和训练。
|
關於作者: |
赵端阳,教授,1987年中国矿业大学硕士研究生毕业,留校工作两年,1989-1999,杭州市杭州船舶工业学校任教,1999年并入浙江工业大学。从1987年起,一直从事计算机专业课程的教学。2002.9~2003.7,到英国Plymouth大学网络研究组,作为高级访问学者从事网络安全的研究。
作者在工作期间一直从事算法设计与分析的研究,从2005年起就一直指导学生参加大学生程序设计竞赛,并每年都获得浙江省大学生程序设计竞赛的银牌和铜牌,2017年度,获得ACM大学生程序设计竞赛青岛和南宁赛区的铜牌,和东亚赛区的铜牌。
编写《算法分析与设计—以大学生程序设计竞赛为例》教程,清华大学出版社,2012年3月出版,2015年改版;编写《ACM大学生程序设计竞赛题解(1)》和《ACM大学生程序设计竞赛题解(2)》,电子工业出版社,2010年7月出版。从2007年起承担本科《算法分析与设计》课程的教学,本课程2013年评为浙江工业大学精品课程,2013年,获得浙江省课堂教学改革SPOC立项。
2015年版《算法设计与分析—以ACM大学生程序设计竞赛在线题库为例》获得浙江省“十二五优秀教材”,浙江省“十三五”新形态教材立项。
|
目錄:
|
第1章算法概述
1.1引言
1.1.1算法的描述
1.1.2算法的设计
1.2算法的复杂度
1.2.1时间复杂度
1.2.2空间复杂度
1.3大学生程序设计竞赛概述
1.4程序设计在线测试题库
第2章数据结构和标准模板库
2.1栈
2.2向量
2.3映射
2.4列表
2.5集合
2.6队列
2.7优先队列
2.8ZOJ1004Anagrams by Stack
2.9ZOJ1094Matrix Chain Multiplication
2.10ZOJ1011NTA
2.11ZOJ1062Trees Made to Order
2.12ZOJ1097Code the Tree
2.13ZOJ1156Unscrambling Images
2.14ZOJ1167Trees on the Level
2.15ZOJ1016Parencodings
2.16ZOJ1944Tree Recovery
2.17ZOJ2104Let the Balloon Rise
上机练习题
第3章递归与分治策略
3.1递归算法
3.1.1Fibonacci数列
3.1.2集合的全排列问题
3.1.3整数划分问题
3.2分治策略
3.2.1分治策略的基本步骤
3.2.2分治策略的适用条件
3.2.3二分搜索算法
3.2.4循环赛日程表
3.2.5棋盘覆盖问题
3.2.6选择问题
3.2.7输油管道问题
3.2.8半数集问题
3.2.9整数因子分解
3.2.10取余运算
3.3ZOJ1633Big String
上机练习题
第4章动态规划
4.1矩阵连乘积问题
4.1.1分析解的结构
4.1.2建立递归关系
4.1.3计算值
4.1.4构造解
4.2动态规划算法的基本要素
4.2.1子结构
4.2.2重叠子问题
4.2.3备忘录方法
4.3长公共子序列
4.3.1长公共子序列的结构
4.3.2子问题的递归结构
4.3.3计算值
4.3.4构造长公共子序列
4.4子段和
4.501背包问题
4.5.1递归关系分析
4.5.2算法实现
4.6长单调递增子序列
4.7数字三角形问题
4.8ZOJ1027Human Gene Functions
4.9ZOJ1074To the Max
4.10ZOJ1093Monkey and Banana
4.11ZOJ1107FatMouse and Cheese
4.12ZOJ1108FatMouses Speed
4.13ZOJ1147Formatting Text
4.14ZOJ1149Dividing
4.15ZOJ1163The Staircases
4.16ZOJ1183Scheduling Lectures
4.17ZOJ1196Fast Food
4.18ZOJ1206Win the Bonus
4.19ZOJ1227Free Candies
4.20ZOJ1234Chopsticks
上机练习题
第5章贪心算法
5.1活动安排问题
5.2贪心算法的理论基础
5.2.1贪心选择性质
5.2.2子结构性质
5.2.3贪心算法的求解过程
5.3背包问题
5.4装载问题
5.5单源短路径
5.6小生成树
5.6.1小生成树的性质
5.6.2Prim算法
5.6.3Kruskal算法
5.7删数问题
5.7.1问题的贪心选择性质
5.7.2问题的子结构性质
5.8多处服务次序问题
5.8.1问题的贪心选择性质
5.8.2问题的子结构性质
5.9ZOJ1012Mainframe
5.10ZOJ1025Wooden Sticks
5.11ZOJ1029Moving Tables
5.12ZOJ1076Gene Assembly
5.13ZOJ1161Gone Fishing
5.14ZOJ1171Sorting the Photos
5.15ZOJ2109FatMouse Trade
上机练习题
第6章回溯算法
6.1回溯算法的理论基础
6.1.1问题的解空间
6.1.2回溯算法的基本思想
6.1.3子集树与排列树
6.2装载问题
6.301背包问题
6.4图的m着色问题
6.5n皇后问题
6.6旅行商问题
6.7流水作业调度问题
6.8子集和问题
6.9ZOJ1145Dreisam Equations
6.10ZOJ1157A Plug for UNIX
6.11ZOJ1166Anagram Checker
6.12ZOJ1213Lumber Cutting
上机练习题
第7章分支限界算法
7.1分支限界算法的基本理论
7.1.1分支限界算法策略
7.1.2分支结点的选择
7.1.3提高分支限界算法的效率
7.1.4限界函数
7.2单源短路径问题
7.3装载问题
7.401背包问题
7.5旅行商问题
7.6ZOJ1136Multiple
7.7回溯算法与分支限界算法的比较
上机练习题
第8章图的搜索算法
8.1图的深度优先搜索遍历
8.2ZOJ1002Fire Net
8.3ZOJ1008Gnome Tetravex
8.4ZOJ1047Image Perimeters
8.5ZOJ1084Channel Allocation
8.6ZOJ1142Maze
8.7ZOJ1190Optimal Programs
8.8ZOJ1191The Die Is Cast
8.9ZOJ1204Additive equations
8.10ZOJ1245Triangles
8.11ZOJ2100Seeding
8.12图的广度优先搜索遍历
8.13ZOJ1079Robotic Jigsaw
8.14ZOJ1085Alien Security
8.15ZOJ1103Hike on a Graph
8.16ZOJ1148The Game
8.17ZOJ1217Eight
8.18ZOJ1091Knight Moves
上机练习题
第9章图论
9.1网络流问题
9.1.1流和割的概念
9.1.2剩余网络和增广路径
9.1.3FordFulkerson算法
9.1.4EdmondsKarp算法
9.1.5ZOJ1734Power Network——EdmondsKarp算法
9.1.6ISAP算法
9.1.7ZOJ1734Power Network——ISAP算法
9.1.8Dinic算法
9.1.9ZOJ1734Power Network——Dinic算法
9.1.10小费用流——SPFA算法
9.1.11ZOJ2404Going Home——SPFA算法
9.2二分图匹配问题
9.2.1匹配问题
9.2.2二分图匹配——匈牙利算法
9.2.3ZOJ1137Girls and Boys
9.2.4ZOJ1140Courses——匈牙利算法
9.2.5PJU1247The Perfect Stall——匈牙利算法
9.2.6HopcroftKarp算法
9.2.7ZOJ1140Courses——HopcroftKarp算法
9.2.8PJU1274The Perfect Stall——HopcroftKarp算法
9.2.9二分图匹配——Kuhn Munkres算法
9.2.10ZOJ2404Going Home——Kuhn Munkres算法
上机练习题
第10章数论
10.1扩展欧几里得算法
10.2PJU2115C Looooops
10.3欧拉函数
10.4ZOJ1906Relatives
10.5PJU2480Longges problem
10.6PJU3696The Luckiest number
10.7中国剩余定理
10.8ZOJ1160Biorhythms
10.9一元线性同余方程组
10.10PJU2891Strange Way to Express Integers
10.11HDU1573X问题
上机练习题
第11章组合数学
11.1母函数
11.1.1普通型母函数
11.1.2指数型母函数
11.1.3Stirling数
11.1.4Catalan数
11.2HDU2082找单词
11.3HDU1521排列组合
11.4HDU2065“红色病毒”问题
11.5HDU3625Examining the Rooms
11.6POJ2084Game of Connection
11.7容斥原理与鸽巢原理
11.7.1容斥原理
11.7.2错排问题
11.7.3鸽巢原理
11.8HDU2048“恭喜你,中奖了!”
11.9POJ2356Find a multiple
11.10ZOJ2836Number Puzzle
上机练习题
参考文献
|
內容試閱:
|
“算法设计与分析”是一门理论性与实践性结合很强的课程。在信息技术高速发展的今天,计算机技术已经应用到了很多科学领域。从理论上来说,算法研究已经被公认是计算机科学的基石。David Harel在其《算法学: 计算精髓》一书中写道: “算法不仅是计算机科学的一个分支,它更是计算机科学的核心。可以毫不夸张地说,它和绝大多数的科学、商业和技术都是相关的。”
在ACM国际大学生程序设计竞赛中,在线裁判系统是开展竞赛的核心,它是一个在线的程序与算法设计的练习和竞赛平台。系统可以提供大量的关于程序和算法设计的题目供学生练习或竞赛,学生可以使用自己熟悉的语言提交相关题目的程序代码,如果系统编译提交代码没有错误,则生成可执行文件。利用系统的测试用例来测试,如果输出结果正确,则返回程序消耗的内存空间和时间。对于竞赛题目,系统可以从程序正确性、运行总时间、消耗内存空间、返回结果等方面来考查学生提交的代码。系统可以实现在规定的时间段举行竞赛的功能,根据学生解题数目和时间进行排名,也可以批量导出学生代码,进行分析。
基于程序设计竞赛的教学模式的优势如下:
(1) 提供一个开放的、自主学习的实验环境。在线评测系统通过网络使用,学生可以随时随地提交程序代码; 在丰富的算法设计题库中寻找适合自己的题目,训练程序设计能力。
(2) 有效地训练学生程序设计能力,培养创新型IT人才。本课程的学习难点在于如何将常见的算法策略应用到实际的应用环境中。通过在线评测系统的实践训练,让学生熟练掌握常见的算法设计策略,训练学生的创新思维,加深学生对各种算法设计策略的认识,理解算法的意义及精髓,达到学以致用的目的。
(3) 形成了良好的学习氛围,加强了学生之间的交流。使用在线评测系统进行课程考核并举办程序与算法设计竞赛,以团队方式参与,可以形成良好的校园竞争和交流的学习氛围; 学生有了在课余时间自主进行本学科知识钻研的机会和环境; 也让学生体验团队协作的重要性,为软件项目团队化的合作要求做好准备。
“算法设计与分析”是面向设计的核心课程,主要通过介绍常见的算法设计策略及复杂度分析方法,培养学生分析问题和解决问题的能力,为开发高效的软件系统及相关领域的研究工作奠定坚实的基础。该课程理论与实践并重,内容具有综合性、广泛性和系统性,是一门集应用性、创造性及实践性为一体的综合性极强的课程。
目前,该课程的教学方法还是以传统的讲解为主,通常只是将经典算法在已有的数学模型和数据结构上解释给学生; 在实践环节只是盲目地验证算法,而对该算法的运行效率、测试数据规模以及实际的应用场景则很少考虑。学生的学习主要以理解和记忆的继承式学习为主,虽然记住了大量的算法理论,但没有“理解”和“消化”,不能灵活运用算法; 在实践环节学生代码抄袭严重,很难达到训练的效果。在这种教学模式下,学生缺乏问题抽象能力,在遇到实际问题时无从下手,思维创新能力和实践能力难以得到有效的提高,很难培养出高水平的程序员。
本书利用程序设计竞赛模式和在线评测系统的特点,结合课程特点和实际教学,弥补课程教学中存在的不足,以此探讨“算法设计与分析”课程的教学改革,培养高水平的编程人才。
本书共分为11章。
第1章,算法概述。主要是算法的基本概念、算法的复杂度、大学生程序设计竞赛概述和程序设计在线测试题库的基本情况。
第2章,数据结构和标准模板库。主要介绍栈(Stack)、向量(Vector)、映射(Map)、列表(List)、集合(Set)、队列(Queue)和优先队列(Priority Queue)以及典型例题。
第3章,递归与分治策略。主要介绍递归算法和分治策略以及典型例题。
第4章,动态规划。主要介绍动态规划算法的基本要素以及典型例题。
第5章,贪心算法。主要介绍贪心算法的理论基础以及典型例题。
第6章,回溯算法。主要介绍回溯算法的理论基础以及典型例题。
第7章,分支限界算法。主要介绍分支限界算法的基本理论以及典型例题。
第8章,图的搜索算法。主要介绍图的深度和广度优先搜索遍历算法以及典型例题。
第9章,图论。主要介绍网络流问题和二分图匹配问题,分析剩余网络的增广路径、FordFulkerson算法和EdmondsKarp算法,二分图匹配的匈牙利算法、HopcroftKarp算法和Kuhn Munkres算法以及典型例题。
第10章,数论。主要介绍扩展欧几里得算法、欧拉函数、中国剩余定理和一元线性同余方程组以及典型例题。
第11章,组合数学。主要介绍母函数、Stirling数、Catalan数、容斥原理与鸽巢原理以及典型例题。
本书配备有电子教案和源代码,请到清华大学出版社网站www.tup.tsinghua.edu.cn下载。
本书获得浙江省高等教育课堂教学改革、浙江工业大学精品课程、浙江工业大学重点教材建设和绍兴市精品课程建设等多个项目资助,并被评为浙江省普通高校“十二五”优秀教材和浙江省普通高校“十三五”新形态教材。
由于编者水平所限,书中难免有不足之处,恳请广大读者批评指正。
编者
于2021年2月
|
|