《算法分析与设计(Design and Analysis of Algorithms)》教学大纲
制定时间:2025 年 7月
一、课程基本信息
(一)适用专业:智能科学与技术
(二)课程代码:3DX1171A
(三)学分/课内学时:2学分/32学时
(四)课程类别:专业教育
(五)课程性质:必修/理论课
(六)先修课程:C语言程序设计与应用、数据结构B、高等数学
(七)后续课程: 编译原理
二、课程教学目标
本课程旨在使学生掌握算法分析与设计的基本理论如分治法、动态规划、贪心法、回溯法、分支定界等,学会算法分析与设计、数学建模、用算法解决实际问题的方法。课程教学通过案例,将各种基础知识集成在一起,使学生既能清楚地理解算法分析与设计的相关知识点和原理,又能掌握常用的算法设计的方法,从而具备基本的算法分析与设计能力。
(一)具体目标
目标1:掌握算法的概念、算法的表示,算法的分类、算法的时间复杂度和空间复杂度,并能对指定的算法进行性能分析得出正确的时间复杂度和空间复杂度结论。
目标2:掌握分治法、动态规划、贪心算法、回溯法、分支定界算法等常用算法的设计思想和相应的算法设计技巧。同时,让学生掌握科学思维方法,运用算法分析与设计知识,对于不同的应用场景开发具有针对性的软件系统。
(二)课程目标与毕业要求的对应关系
毕业要求 |
毕业要求指标点 |
课程目标 |
教学单元 |
评价方式 |
1. 能够应用数学、自然科学和工程科学的基本原理,识别、表达、并通过文献研究分析计算机软件系统中的复杂工程问题,以获得有效结论。 |
毕业要求指标点2.1:能识别和判断软件系统中的涉及问题的主要算法类别和方法,识别和判断嵌入式系统中硬件设备涉及问题的主要原理。 |
目标1 |
算法的基本概念,递归与分治法 |
课内实验 期末考试 |
2. 能够针对计算机应用系统的复杂工程问题,开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具,实现对复杂工程问题的预测与模拟,理解其局限性。能够就计算机应用系统的复杂工程问题与业界同行及社会公众进行有效沟通和交流,具有一定的写作能力、表达能力和人际交往能力;掌握一门外语,具备一定的国际视野,能够在跨文化背景下进行沟通和交流。 |
毕业要求指标点5.2:能理解并使用前沿的测试工具;在一定的指导下,能够选择和使用恰当技术资源、现代工程工具和信息技术工具,解决计算机应用系统设计开发中的复杂工程问题。 毕业要求指标点10.2:能够就复杂工程问题与业界同行及社会公众进行有效沟通和交流,具有良好的语言表达能力、写作能力和人际交往能力。 |
目标2 |
动态规划,贪心算法,回溯法,分支限界 |
课内实验 期末考试 |
三、教学内容与方法
(一)教学内容及要求
序 号 |
教学单元 |
教学内容 |
学习产出要求 |
推荐学时 |
推荐教学方式 |
支撑 课程目标 |
备注 |
1 |
算法的基本概念 |
教学内容: 算法的定义、算法的5个基本特点及其内涵、算法的描述方法、算法的分类、算法性能的度量方法、算法的时间和空间复杂度的求解和度量方法。 以冒泡排序、基数排序和归并排序分析其算法的时间复杂度和空间复杂度。 |
理解算法的定义、算法的5个基本特点和分类;掌握常见的算法描述方法、算法时间复杂度的分析和度量方法。 重点: 算法的定义、算法的5个基本特点和分类、常见的算法描述方法以及算法时间复杂度的分析和度量。 难点: 算法时间复杂度的分析方法和度量结论的得出依据。 |
4 |
讲授 |
目标1 目标2 |
|
2 |
递归与分治法 |
递归的定义、递归的本质、递归和循环的关系、递归的特点。 以汉诺塔问题、杨辉三角和Fibonacci数列问题举例揭示递归的相关特点。 分治法的本质、分治法的设计思路、用递归法实现分治法和分治法的非递归实现方法。 以二分搜索、快速排序、线性时间选择和平面上的最近点对等问题为例讲解分治法的算法设计方法。 |
理解递归的本质和特点;掌握分治算法的设计方法和分治法的非递归实现方法。 重点: 递归的本质和特点;分治法的设计思想和要点。 难点: 分治算法的设计方法(关键在于合并子问题解的方法的设计) |
8 |
讲授 案例 实验 |
目标1 目标2 |
|
3 |
动态规划 |
什么是动态规划、动态规划的2个基本要点和动态规划设计算法的方法。 用递归法和递推法实现动态规划时的特点和区别。 以矩阵乘法连、最大子段和、图像压缩问题和0~1背包问题等为例讲解动态规划的算法设计方法。 |
通过例示动态规划算法,学会判别一个问题是否适合用动态规划求解、能给出简单问题的动态规划状态转移方程。 重点: 动态规划的2个基本要点和动态规划设计算法的方法。 难点: 判别一个给定问题是否适合用动态规划求解、能给出问题的动态规划状态转移方程。 |
6 |
讲授 案例 实验 |
目标1 目标2 |
|
4 |
贪心算法 |
贪婪算法的本质和应用贪婪算法求解问题的2个要件。 贪婪算法与前述动态规划算法的区别。 以经典的最小生成树、单源最短路径和哈夫曼编码问题为例。 |
通过例示贪婪算法,学会判别一个问题是否适合用贪婪求解、能对给定问题设计出相应的贪婪算法。 重点: 贪婪算法的本质和应用贪婪算法求解问题的2个要件。 难点: 贪婪算法与前述动态规划算法的区别。 对给定问题设计出相应的贪婪算法。 |
4 |
讲授 案例 实验 |
目标1 目标2 |
|
5 |
回溯法 |
回溯法本质是枚举或者深度优先搜索,为了提高搜索效率加快搜索速度,引入了剪枝策略。 在枚举的算法框架中引入剪枝。 以经典的8皇后、圆排列和0~1背包问题的回溯法求解为例。 |
学会枚举搜索的算法设计方法,并学会使用剪枝的思想。理解判定性问题用回溯法一定可解。 重点: 深度优先搜索的算法设计方法。 难点: 设计有效的剪枝策略。 |
6 |
讲授 案例 实验 |
目标1 目标2 |
|
6 |
分支限界 |
分支限界本质也是枚举或者广度优先搜索,为了提高搜索效率加快搜索速度,引入了剪枝策略。 在广度优先搜索的算法框架中引入定界函数加快搜索速度。 以0~1背包问题的分支定界法求解为例。 |
学会枚举搜索的算法设计方法,并学会使用定界函数的思想。判定性问题和最优化可用分支定界的思想设计搜索算法。 重点: 广度优先搜索的算法设计方法。 难点: 设计有效的分支定界策略加快搜索速度,以及在此基础衍生出的双向广度优先搜索算法。 |
4 |
讲授 案例 实验 |
目标1 目标2 |
|
(二)教学方法
1.课堂讲授
(1)采用启发式教学,启发学生自行思考,让学生掌握学习方法,使学生能够真正理解算法分析与设计的本质,认识到算法的重要性,提高学习积极性,主动学习,从而培养学生算法设计思想以及编程能力,为后续学习打下基础。
(2)在教学内容上,首先讲解算法基本概念,特别是时间复杂度的计算。然后系统讲授常用算法,包括分治算法、动态规划、贪心算法、回溯法和分支限界等。通过本课程的学习,学生理解数学与计算机科学的联系,具备基本的数学建模能力,最终提升学生的思维方式和编程能力。
(3)在教学过程中采用电子教案,多媒体教学、案例教学与传统板书相结合,提高课堂教学信息量,增强教学的直观性。
(4)理论课与实验课的有机结合,对于本课程最佳的上课方式应是将二者合二为一。老师讲解基本理论之后,学生可以马上对所学知识进行实验,加深理解。教师需要设计好实验方案,使学生循序渐进的对所学内容进行练习。实验课内容应以学生的创新为主。
(5)课内讨论和课外答疑相结合,每周至少一次进行答疑。
2.实验教学
实验教学是本课程中重要的实践环节,目的是提升学生的思维方式和编程能力,使学生具有将常用算法实现为程序代码的能力。课程必做实验4个,各实验要求学生独立完成。实验成绩根据学生实验完成情况给出。
四、考核及成绩评定
(一)考核内容及成绩构成
课程目标 |
考核内容 |
成绩评定方式 |
成绩占总评分比例 |
目标成绩占当次考核比例 |
学生当次考核平均得分 |
目标达成情况计算公式 |
目标1:掌握算法的概念、算法的表示,算法的分类、算法的时间复杂度和空间复杂度,并能对指定的算法进行性能分析得出正确的时间复杂度和空间复杂度结论。 |
算法的基本概念 |
期末考试 |
10% |
100% |
B1 |
|
递归 |
实验 |
20% |
100% |
A1 |
目标2:掌握分治法、动态规划、贪心算法、回溯法、分支限界算法等常用算法的设计思想和相应的算法设计技巧。 |
分治法、动态规划、贪心算法、回溯法、分支限界法。 |
实验 |
20% |
100% |
A2 |
|
根据具体问题,选择合适算法并完成代码实现。 |
期末考试 |
50% |
100% |
B2 |
总评成绩(100%)= 实验(40%)+期末考试(60%) |
100% |
—— |
—— |
|
(二)平时考核成绩评定
1.实验:必做实验4次,支撑目标1、目标2,共占总评分40%,目标1占20%、目标2占20%。实验在在线实验平台如PTA和Openjudge完成。由教师设置每次实验题目及测试点,根据学生提交的程序通过测试点的个数,系统自动裁判得出该次实验的分数。对应目标的评分标准如下:
对应目标 |
目标1:掌握算法的概念、算法的表示,算法的分类、算法的时间复杂度和空间复杂度,并能对指定的算法进行性能分析得出正确的时间复杂度和空间复杂度结论。 |
目标2:掌握分治法、动态规划、贪心算法、回溯法、分支定界算法等常用算法的设计思想和相应的算法设计技巧。 |
考查点 |
实验1 分治算法 |
实验2 动态规划 |
实验3 贪心算法 |
实验4 回溯与分支限界 |
总评分占比 |
10% |
10% |
10% |
10% |
评分标准 |
100% 至 90% |
|
|
|
|
89.9% 至 80% |
|
|
|
|
79.9 至 70% |
|
|
|
|
69.9% 至 60% |
|
|
|
|
59.9%至 0 |
|
|
|
|
五、参考学习资料
(一)推荐教材:屈婉玲,刘田,张立昂,王捍贫.算法设计与分析(第2版)
,ISBN:9787302424505. 北京:清华大学出版社,2016.
(二)在线资源: https://www.icourse163.org/course/PKU-1002525003