本课程以计算机经典问题求解为导向,通用算法思维和编码能力培养为目标,引入ACM国际大学生程序设计竞赛的有益元素,精心安排课程的理论教学和编程实践。本课程学习将帮助学员提高计算思维和程序设计能力,帮助学员应对IT公司的算法笔试/面试或者研究生入学考试的机考/面试。
——课程团队
开课学校:北京交通大学
开课教授:李清勇、张英俊、李公仆、赵宏智、李强、刘铭
课程概述
“软件=算法+数据结构”,算法是软件的灵魂。在信息时代,计算思维是分析复杂工程问题的重要思维方式,计算机则是求解问题的重要工具。本课程以计算机经典问题求解为导向,通用算法思维和编码能力培养为目标,引入ACM国际大学生程序设计竞赛的有益元素,精心安排课程的理论教学和编程实践。
本课程主要讲授计算机问题求解的经典算法设计方法和算法复杂度分析方法,主要内容包括算法复杂度分析,枚举算法,递归与分治策略,动态规划,贪心算法和通用搜索技术。本课程除了强调经典的算法理论和模型,亦兼顾编程实践能力。力图使得学员面对复杂问题时,既能“想到”还能“做到”。
授课目标
课程大纲
第二章枚举算法(大道至简)
2.1基本原理
2.2模糊数字问题
2.3百钱百鸡问题
2.4数组配对问题
2.5绳子切割问题
2.6石头移动问题
2.7小结
枚举算法作业
第三章递归与分治(庖丁解牛)-1
3.1递归基本思想
3.2递归实例
3.3分治基本原理
3.4Master定理
3.5合并排序
递归算法实践
第三章递归与分治(庖丁解牛)-2
3.6逆序对问题
3.7快速排序
3.8最接近点对
3.9乘方运算
3.11小结
矩阵搜索问题
第四章.动态规划(跬步千里)-1
4.1基本原理
4.2矩阵连乘-问题分析
4.3矩阵连乘-算法与实现
4.4矩阵连乘-备忘录方法
4.5多段图最短路径-问题分析
4.6多段图最短路径-算法与实现
编辑距离问题
第四章.动态规划(跬步千里)-2
4.7最长公共子序列-问题分析
4.8最长公共子序列-算法与实现
4.90-1背包-问题分析
4.100-1背包-算法与实现
4.110-1背包-优化方法
4.12最大上升子序列-问题分析
4.13最大上升子序列-算法与实现
4.14小结
收集控的决策问题
第五章.贪心算法(局部寻优)-1
5.1基本原理
5.2活动安排问题-算法与实现
5.3活动安排问题-正确性证明
5.4小数背包问题
5.5哈夫曼编码-算法与实现
5.6哈夫曼编码-正确性证明
5.7单源最短路径-Dijkstra与实现
5.8单源最短路径-正确性证明
数字删除问题
第五章.贪心算法(局部寻优)-2
5.9最小生成树-问题分析
5.10最小生成树-Prim算法与实现
5.11最小生成树-Prim证明
5.12并查集基础
5.13最小生成树-Kruskal算法与实现
5.14最小生成树-Kruskal证明
5.15小结
贪心算法实践
第六章.搜索技术(按图索骥)-1
6.1状态空间图
6.2深度优先搜索
6.3广度优先搜索
6.4回溯算法-原理
6.5回溯算法-实例
搜索算法实践
第六章.搜索技术(按图索骥)-2
6.6分支限界法-原理
6.7分支限界法-实例
6.8启发式搜索-原理
6.9A*算法-原理
6.10启发式搜索-实例
6.11小结
预备知识
参考资料
李清勇.算法设计与问题求解-计算思维培养(第2版),电子工业出版社,2020.
Cormen,T.H.等著,潘金贵等译.算法导论,机械工业出版社,2006.
课程心得
老师讲得十分透彻,将经典算法的核心思想整理出来了并教给学生如何思考、解决问题,真的非常棒!将算法书上的重点深入浅出的讲解了出来,非常适合本科生学习。对于业余爱好来说,本课程也成了难度没那么高,值得一学的课程!