MOOC丨算法设计与问题求解大学慕课

本课程以计算机经典问题求解为导向,通用算法思维和编码能力培养为目标,引入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.

课程心得

老师讲得十分透彻,将经典算法的核心思想整理出来了并教给学生如何思考、解决问题,真的非常棒!将算法书上的重点深入浅出的讲解了出来,非常适合本科生学习。对于业余爱好来说,本课程也成了难度没那么高,值得一学的课程!

THE END
1.3D数学基础(矩阵详解)方形矩阵M的行列式表示为|M|。 2 x 2矩阵的行列式如下: 更容易记住的方式,沿对角线和反对角线分别让元素相乘,然后使用对角线元素相乘的结果减去反对角线元素相乘的结果即可。 3 x 3矩阵的行列式如下: 使用容易记录的方式:先并排编写矩阵M的两个副本,然后沿对角线和反对角线分别让元素相乘,最后使用对角线元素相乘https://zhuanlan.zhihu.com/p/434655226
2.Java矩阵连乘问题(动态规划)算法实例分析java本文实例讲述了Java矩阵连乘问题(动态规划)算法。分享给大家供大家参考,具体如下: 问题描述:给定n个矩阵:A1,A2,,An,其中Ai与Ai+1是可乘的,i=1,2,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的https://www.jb51.net/article/128975.htm
3.矩阵连乘动态规划悠乐萧子?问题的最优子结构性质是该问题可用动态规划算法 求解的显著特征 矩阵连乘算法数据结构 形参中应有矩阵个数n和存储矩阵行数的一维数组p[n]。因为要使矩阵可乘,Ai的列数必须与Ai+1的行数一致,所以只需用p[0]存储A1的行数,其他矩阵只存储列数即可 https://www.cnblogs.com/LieYanAnYing/p/11708906.html
4.秒懂算法矩阵连乘问题算法秒懂算法 | 矩阵连乘问题 01、问题分析——递归关系 1●问题 给定n个矩阵{A1,A2,A3,…,An},其中Ai与Ai+1(i=1,2,3,…,n-1)是可乘的。用加括号的方法表示矩阵连乘的次序,不同加括号的方法所对应的计算次序是不同的。 【例4-2】三个矩阵A1A2A3连乘,用加括号的方法表示其计算次序。https://download.csdn.net/blog/column/11702032/124419099
5.算法:矩阵连乘求的最小乘法次数今天来讨论一道算法题,这道算法题我在做的时候真的是没什么思路,甚至看到解法之后依然想了好久才想明白,好久没看过算法了,本来对动态规划这块就不是很熟,这里记录一下。 题目 给定一个 n 的矩阵序列,我们希望计算它们的乘积: 其中, 是 矩阵 注意,这里不是要计算乘积,而是希望找到一个明确的计算次序,使得这个矩https://www.jianshu.com/p/02b3b1b81bee
6.规模为5矩阵连乘问题,计算次序有()种规模为5矩阵连乘问题,计算次序有5种。因为乘法是满足结合律的,所以计算的顺序不同,最终结果是一样的。但是每种顺序所需的乘法次数可能不同。根据矩阵连乘算法的动态规划思想,得到的计算次序如下:((A1A2)(A3A4))A5,共需计算次数:260 (A1((A2A3)(A4A5))),共需计算次数:270 (https://zhidao.baidu.com/question/1905518827368601580.html
7.动态规划(矩阵连乘)讲解.ppt动态规划 (矩阵连乘)讲解.ppt,* 实验三 动态规划算法 ——矩阵连乘问题 * 动态规划的应用:矩阵连乘 例:A1A2相乘,设这2个矩阵的维数分别为10*5,5*3运算次数10*5*3=150。 问题:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积https://max.book118.com/html/2017/0314/95383848.shtm
8.矩阵连乘问题给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 Input 输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有2*C行数据,每组测试数据占2行,每组测试数据第一行是1个整数n,表示有n个矩阵连乘,接下来一行有n+1个数,表示是n个矩阵的行及第n个https://www.coder100.com/index/index/content/id/1006557
9.矩阵连乘问题python代码矩阵连乘问题算法矩阵连乘问题python代码 矩阵连乘问题算法 矩阵连乘优化 前言 从旭东的博客 看到一篇博文:矩阵连乘最优结合 动态规划求解,挺有意思的,这里做个转载【略改动】。 问题 矩阵乘法是这样的,比如\[ A_{ab} B_{bc} = C_{ac} \] 两个矩阵,一个a行,一个c列,行列乘法次数为a*c。一行乘以一列得到C中的一个https://blog.51cto.com/u_13250/8284001
10.动态规划算法的基本思路是()。在动态规划算法中,处理重叠子问题的方法是() 点击查看答案进入小程序搜题 ()哪个不是我们解决台湾问题的最大底气。 点击查看答案进入小程序搜题 在动态规划算法中,处理多阶段决策过程的方法是() 点击查看答案进入小程序搜题 矩阵连乘问题的算法可由()设计实现时时间性能较好。 点击查看答案进入小程序搜题赞https://m.ppkao.com/wangke/daan/cd18c0e524a4480db9daa0811dfe23f8
11.动态规划DP算法详解动态规划(dynamic programing)和分治法类似,都是通过组合子问题的解来求解原问题的解。(在经典排序算法中的二路归并排序和快速排序都用到了分而治之的思想-分治法)。 分治法是将原问题划分为没有交集,相互独立的子问题,并分别求解后再进行合并,求出原问题的解。 https://removeif.github.io/algorithm/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92DP%E7%AE%97%E6%B3%95%E8%AF%A6%E8%A7%A3.html
12.精选算法设计与分析(第六章分支限界法)归纳起来,与回溯法相比,分枝限界法算法的优点是可以更快地找到一个解或者最优解,其缺点是要存储结点的限界值等信息,占用的内存空间较多。另外,求解效率基本上由限界函数决定,若限界估计不好,在极端情况下将与穷举搜索没多大区别。 结语 第六章分支限界法结束,下一章——第七章贪心法https://cloud.tencent.com/developer/article/2399051