算法是计算机科学的核心,绝大多数科学、商业和技术都与其密切相关。课程将从算法表示、分析、设计策略三个方面开展线上线下混合教学,以实际工程应用问题为导向,开展探究式实践教学,使学生能从数学上分析算法的时间、空间复杂度;针对特定的问题,能形式化描述问题,选择合适的算法设计策略开展算法设计、分析、证明等,能对问题的算法复杂性进行讨论。
教学团队长期从事程序设计、算法分析等课程的教学,多年指导程序设计类学科竞赛,同时具有丰富的软件开发工程经验,能将算法设计策略与工程实际问题进行有效结合,有效训练学生的计算思维及解决实际问题的能力。
目标1:能重述算法时间复杂度分析的概念和符号,能够对软件系统中设计的递归算法、非递归算法的时间复杂度进行数学描述及分析,并能选择合适的渐进符号进行表达,并能对不同算法的时间复杂度进行比较与总结。
目标2:能使用标准伪代码对软件系统中特定问题的算法进行表达,能形式化描述问题,针对问题目标,能选择合适的设计策略进行算法设计。
目标3:针对设计的算法,能对其正确性进行说明,能分析算法的时间复杂度,并能通过文献调研、实验分析、讨论不同算法的优劣,针对问题目标,通过分析能得到有效结论。
百分制,满分100分,60分合格。
考核方式:
线上单元测验:10%
线上单元作业:10%
线上课程讨论:10%
课后研究报告:10%
上机考试:期中(30%)、期末(30%)
第一章 算法及问题求解过程
1.1 什么是算法
1.2 问题求解过程
第一章 单元作业
第一章 单元测试
第二章 算法效率分析基础
第二章 单元作业
2.1 算法分析框架
2.2 时间渐近表示
2.3 非递归算法效率分析
2.4 递归算法效率分析
第二章 单元测验
第三章 蛮力法
3.1 蛮力法
3.2 最近对和凸包问题等的蛮力法
3.3 穷举问题的蛮力法
第三章 单元作业
第三章 单元测验
第四章 减治法
4.1 减治法与排序
4.2 生成组合对象的算法
4.3 减常因子算法
4.4 减可变规模算法
第四章 单元作业
第四章 单元测试
第五章 分治法
5.1 分治法与排序
5.2 快速排序
5.3 最近对问题
5.4 凸包问题
第五章 单元测验
第五章 单元作业
第六章 变治法
6.1 变治法与预排序
6.2 高斯消元法
6.3 堆和堆排序
第六章 单元作业
第六章 单元测试
第七章 时空权衡
7.1 分布计数排序
7.2 字符串匹配中的输入增强技术
7.3 散列法
第七章 单元测试
第七章 单元作业
第八章 动态规划
8.1 动态规划基本原理
8.2 背包问题
8.3 最优二叉树
8.4 Warshall算法
第八章 单元作业
第八章 单元测验
第九章 贪心方法
贪心策略概述
Prim算法
Kruskal算法
Dijkstra算法
第十章 迭代改进
迭代改进
单纯形法
第十一章 回溯与分支限界
回溯法
分支限界法
先修知识点:集合、排列、矩阵、高级程序设计语言、图、树、递归等。
先修能力和素质基础:能使用高级程序设计语言完成代码编写、运行与调试的能力,具备一定分析问题和解决问题的能力。
先修主要课程:离散数学、程序设计(C语言)、数据结构。
1. (美) Anany Levtin著. 算法分析与设计基础(第三版),潘彦译,清华大学出版社,2015年2月
2. Thomas H.Cormen等著,殷建平,徐云,王刚等译.算法导论(第三版).机械工业出版社.2013年1月