spContent=著名作家王尔德曾经说过:"生活的奥秘存在于艺术之中 " ,计算机学科的奥秘则存在于算法之中。算法不仅是让你知道如何解决计算问题,同时还告诉你如何"优雅"的解决计算问题。因此,算法高手就是程序员中的艺术家。如果你想成为编程高手,一般需要有十年的编程经验。如果你学好算法,成为编程高手的时间可以缩短到二年。
著名作家王尔德曾经说过:"生活的奥秘存在于艺术之中 " ,计算机学科的奥秘则存在于算法之中。算法不仅是让你知道如何解决计算问题,同时还告诉你如何"优雅"的解决计算问题。因此,算法高手就是程序员中的艺术家。如果你想成为编程高手,一般需要有十年的编程经验。如果你学好算法,成为编程高手的时间可以缩短到二年。
—— 课程团队
课程概述
算法是代码的灵魂,每一个以编程作为职业的程序员都应该熟悉算法。本课程介绍适合于计算机使用的、求解各种常用问题的算法。通过本课程的学习,要求学生正确理解算法设计与分析中的基本概念,掌握算法设计的基本策略和方法,能对建立的算法进行理论分析。通过本课程的学习你将掌握算法的概念,算法复杂度的分析方法,掌握对较为复杂计算问题进行建模的方法,能应用基本算法对计算问题进行求解并得到正确解。此外,还会掌握基本算法求解问题的基本步骤,基本算法包括:递归与分治法、排序与树结构、图搜索算法、贪心算法、动态规划算法、最大流算法和随机算法等。尤其是,课程的学习让你能掌握比较不同算法求解问题的方法,能利用时间或者空间复杂度对算法进行分析,并能根据计算问题的场景选择合适的算法。
授课目标
通过本课程的学习,要求学生正确理解算法设计与分析中的基本概念,掌握算法设计的基本策略和方法,能对建立的算法进行时间和空间复杂度分析。
课程大纲
第一部分 算法分析基础
课时目标:掌握算法的定义,掌握算法效率的基本概念,了解求解问题可能存在效率不同的算法。
1.1 算法的基本概念
1.2 算法举例
1.3 数据结构的作用
第二部分 算法分析的基础
课时目标:理解利用渐进分析分析算法的过程,熟悉渐进分析的数学表示,对包含循环的代码能进行分析其时间或空间复杂度。
2.1 渐进分析
2.2 求最大值的算法分析
2.3 二分搜索的算法分析
2.4 子集和的算法分析
第三部分 递归算法与递归函数
课时目标:掌握递归的组成结构和递归函数在计算机内的执行过程,能对给定问题给出其递归求解过程。
3.1 递归算法的组成
3.2 递归算法的执行
3.3 判断回文
3.4 生成全排列
3.5 汉诺塔问题
3.6 递归函数求解
第四部分 分治算法
课时目标:掌握分治算法求解问题的三个基本步骤,熟悉利⽤分治算法求解典型计算问题,熟练掌握分治算法的时间复杂度分析。
4.1 合并排序
4.2 股票买卖
4.3 逆序对问题
4.4 空间点最小距离
4.5 大整数乘法
4.6 矩阵的乘法
4.7 第k小的数
第五部分 贪心算法
课时目标:利⽤贪⼼算法求解典型的计算问题,利⽤反证法证明贪⼼策略是否能获得全局最优解的过程,利⽤合理的数据结构优化贪心算法的效率。
5.1 硬币找零
5.2 任务规划
5.3 单源最短路径问题*
5.3 最小生成树问题*
第六部分 深度优先与回溯算法
课时目标:熟练掌握图上宽度优先搜索算法及其算法复杂度分析,理解回溯算法求解问题的过程,
6.1 深度优先遍历*
6.2 n皇后问题
6.3 子集和问题
第七部分 宽度优先与分支界限算法
课时目标:了解利⽤宽度优先搜索解决计算问题的建模过程,熟悉分支界限算法求解问题的过程。
7.1 宽度优先遍历*
7.2 分支界限算法介绍
7.3 装载问题
7.4 任务分配
7.5 背包问题
7.6 单源最短路径问题
7.7 着色问题
第八部分 动态规划算法
课时目标:熟悉动态规划求解优化问题的基本步骤,从“记忆+递归+猜”来理解动态规划。
8.1 动态规划算法概览
8.2 拾捡硬币
8.3 累加和最大的连续子序列
8.4 疯狂的8
8.5 单词排版
8.6 矩阵乘法
8.7 0/1背包问题
8.8 整数划分
8.9 优化二叉树
第九部分 随机算法
课时目标:理解随机算法求解问题可能带来的坏处,以及如何弥补这些坏处的方法。掌握不同随机算法的区别。
9.1随机算法概览
9.2 随机数生成*
9.3 蒙特卡罗(Monte Carlo)算法*
9.4 拉斯维加斯(Las Vegas)算法*
9.5 舍伍德(Sherwood)算法*
第十部分 算法复杂度
课时目标:了解如何根据问题求解的难易程度对计算问题的基本分类。理解P 问题,NP 问题,NPC 问题的定义。了解⼏个典型的NPC 问题,理解为什么证明P 是否等于NP 是计算机领域最为重要的问题之⼀。
展开全部
预备知识
参考资料
1.算法设计与分析Python ,程振波、李曲、王春平,清华大学出版社,第1版,2018年
2.算法导论,Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest, Clifford Stein著, 殷建平等译者,机械工业出版社,第3版,2013年1月
常见问题
1、线上章节的题目与教材章节为什么不一致?
由于每个学期教学内容都会动态变化,因此线上章节是希望较大范围覆盖算法课程的内容,因此章节题目与教材章节题目有不一致。同学们可以根据学期初老师公布的教学计划阅读教材和线上视频。
2、线上内容不在教学计划内的需要看吗?
不在教学计划内的视频大家可以根据自身情况选看。
3、线上使用Python介绍算法,而教材则用C++会不会导致看不懂线上视频?
不会。因为算法的描述与采用哪种程序设计语言没有关系。
4、如何利用好线上视频资源?
由于我们是线上、线下混合教学,因此大家在上好线下课的同时,可以把线上视频作为答疑或知识拓展。
5、课程的PPT、代码可在哪儿下载?
链接: https://pan.baidu.com/s/1aFerBBcYejOsrXguv1riDg 提取码: maxv